Mirki i Mirabelki! Jestem w trakcie zmiany pracy (czytaj, obecny pracodawca odchodzi w niepamięć a nowego jeszcze nie ma na horyzoncie) i w związku z tym mam odrobinę wolnego czasu. Dlatego szukam pomysłu na fajny projekt oraz chętnych do współpracy. Główny cel to mieć odrobinę zabawy. Preferowane obszary to telekomunikacja bezprzewodowa i audio.
#programowanie #embedded #elektronika
Kurde chciałem sobie uruchomić tylko i wyłacznie przerwanie IDLE na STM32F103 i udało się ale dzieje się coś dziwnego - cały czas jestem przerzucany do procedury obsugi przerwania, mimo, że teoretycznie flaga powinna być wyczyszczona, zgodnie z dokumentacją:

It is cleared by a software sequence (an read to the USARTSR register followed by a read to the USARTDR register). as you can see I do it in my code, but for some reason the flag is not cleared.

Mimo to siedząc w debuggerze widzę, że cały czas jestem przerzucany do
@zarowka12: #!$%@?ąc na chwilę od dyskusji na temat RTOS-ów.
Skonfigurowałem w końcu STM32F4. Chwilę to zajęło, bo api libopencm4 dla F1 i F4 trochę się różni, poza tym trochę zmian przy kompilacji w związku z dodatkowymi rejestrami do operacji zmiennoprzecinkowych na F4.

Kod wygląda tak: klik
Połączenie tak jak było FTDI -> STM32F4
Włączone przerwanie na idle.
I co? I wygląda na to, że działa jak należy... Co prawda zrobiłem
  • Odpowiedz
trochę zaczyna mnie męczyć słaby rynek embedded i chcę powoli się zacząć uczyć czegoś innego by mieć alternatywę w razie czego. na ten moment 2 lata doświadczenia w C++ przy pracy w projekcie LTE. w żaden front nie chcę iść, chcę pozostać przy backendzie ale by to było trochę coś bardziej ambitnego niż jakieś CRUDy i podobne. co polecacie? myślałem nad Rustem trochę

#programista15k #programowanie #pracait
Cześć,
Projektuję aktualnie urządzenie w oparciu o mikrokontroler STM32, które odbiera w przerwaniu pojedyncze bajty, które są zapisywane do bufora. Piszę teraz parser, który miałby operować na tym buforze. Jeśli pojawi się w nim jedna z komend, to musi zostać wykonana jakaś akcja. Mam zagwostkę dotyczącą przetwarzania danych przechowywanych w buforze przez parser, tak żeby nie obciążać nadmiarowo procka. Czy sprawdzenie zawartości bufora musi się odbywać za każdym razem po odebraniu znaku?
@r00ti: no wyobraź sobie, że nie wszyscy stawiają pieniądze jako najwyższy priorytet w życiu. Zresztą w embedded też się zdarzają oferty po 20k. Poza tym, idąc twoim tokiem myślenia, to dlaczego nie zostałeś jakimś konsultantem w big4 czy coś, zarabiałbyś jeszcze więcej. Albo dlaczego ludzie zostają na uczelni mimo tego, że z ich wiedzą mogliby zarabiać 5 razy więcej xD
  • Odpowiedz
Ściągnąłem sobie CMSIS 5 ze strony Keila, utworzyłem repozytorium gita itd itp, odpaliłem skrypt gen-pack.bat i coś tam porobiło i po cichu się zakończyło.
Na stronie keila jest tabelka, z której wynika, że moje repo powinno zawierać pliki .lib na przykład taki plik:

arm_cortexM7lfsp_math.lib
Oczywiście u mnie w repozytorium akurat pliku CMSIS/DSP/Lib zabrakło. Są źródła ale nie ma binarek, a bez tego ani rusz.
Co robić, jak żyć?
#programowanie #
  • Odpowiedz
Siema mireczki mam pytanie czy ktoś z was pisał swój Driver pod malinkę? Generalnie chce takowy napisać w celach edukacyjnych. Na chwilę obecną konsoliduję wiedzę bazując głownie na https://lwn.net/Kernel/LDD3/ ale jeśli ktoś coś ma na swoim #github albo jakiś artykuł który taki temat porusza to proszę podzielcie się.
Proszę mnie nie przekonywać że pisanie drivera nie ma sensu bo zdaje sorię z tego sprawę, ale chciałbym się czegoś nauczyć a
@printf: Daaawno temu pisałem w ramach nauki prosty driver USB na linuksa (nie polecam XD). Pamiętam, że w trakcie przewinęło się kilka artykułów i tutoriali m.in. przynajmniej jeden z poniższych (ale nie wiem czy obecnie są one jeszcze coś warte [2004 i 2006 r. xd]):

https://www.linuxjournal.com/article/7353?page=0,1
http://freesoftwaremagazine.com/articles/drivers_linux/

Nie wiem też, czy w ogóle będą one pomocne w kontekście twojego pytania.
  • Odpowiedz
@printf: @hitherto: @MyNameIsJefff:
Elo mirasy. Wpadłem an tego posta przypadkiem.
Umiem kucować w miarę proste drivery na Linuksa(w sensie kernel modules)

Pisałem takie:
- urządzenie w FPGA -> Linux. Character device który zwracał wyniki szybkich
  • Odpowiedz
Cześć Mirki, próbuję opanować transmisję 433 MHz za pomocą biblioteki RCSwitch dla #arduino. Podpatrzyłem analizatorem takie dwa sygnały. Prawdopodobnie problem jest taki, że pilot zaczyna transmisję długą jedynką (pierwszy wykres) a arduino długim zerem (drugi wykres). Arduino nie widzi kodu przekazywanego przez pilota. Ktoś wie jak to pogodzić? Jak się nazywa takie kodowanie? #embedded #pytanie
piwuch - Cześć Mirki, próbuję opanować transmisję 433 MHz za pomocą biblioteki RCSwit...

źródło: comment_1598708175buiueYJ0d9b0bP5ZPEgIHC.jpg

Pobierz
  • Odpowiedz
@Ithan: a i dla jasności ` to jest konwencja mówiąca zastąp przez wartość liczbową. czyli b 0x00` to breakpoint przy power on reset o ile twoja architektura ma tablicę wektorów na adresie 0
  • Odpowiedz
@Ithan: Ale ty chcesz postawić breakpoint na danej linii czy na instrukcji o danym adresie? Jeżeli na adresie to wpisz najpierw "disass", wtedy zobacz na jakim adresie leży interesująca cię instrukcja i wpisz "break *0x1337" (w przypadku gdy adres to 0x1337)
  • Odpowiedz
Mirki mam dziwny problem. Kod po otrzymaniu danych przez UART ma je odesłać. Przygotowałem dwie wersje kodu:
- wersja 1 - w main wołam serverrun(), który posiada swoją nieskończoną pętlę.
- wersja 2 - w main w pętli wołam funkcję server
task(), która sprawdza warunek, jeżeli spełniony to odsyła dane. Jedyna różnica co do funkcji server_run() to taka, że tutaj nie ma pętli nieskończonej.

Zresztą zobaczcie sami, kod jest bardzo
@bielu000: dodam jeszcze, że atomic również dotyczy problemów z równoległością (przerwania, wątki), ale innych niż volatile. Przykładem może być zmienna typu int na 8-bitowych AVRach. Tam int ma 16 bitów. Ponieważ architektura jest 8-bitowa, operacje na intach muszą być wykonywane etapami, czyli nie atomowo. Wyobraźmy sobie, że zmienną int inicjujemy wartością 1000 i sprawdzamy w pętli, czy jest ona większa od zera. W przerwaniu zmniejszamy zmienną o 1. W pewnym
  • Odpowiedz
Macie jakieś dobre materiały na temat tego jak handlować komunikację poprzez układ UART? Nie mam na myśli konfiguracji samego układu bo to sobie znajdę w manualu. Mam na myśli coś innego - jakieś dobre praktyki, może jak zaprojektować warstwy od tych wysokopoziomowych do niskopoziomowych (ale bez szaleństw, celuje w MCU). Tak swoją drogą materiały nie muszą być oczywiście stricte związane z programowaniem MCU, ale może coś związanego z embedded Linux ,w końcu dobre praktyki są w teorii dość uniwersalne.

Ostatnie nad czym się zastanawiam - może mnie ktoś wyprowadzi z błędu lub wskaże dobrą drogę. Mam sobie dwa mikrokontolery jakiś od STM np. STM32F1 i ESP8266. ESP8266 chce wykorzystać jako medium transmisji poprzez Wifi.
Na STM-ie chciałbym mieć serwer http, do którego np. mógłby się podłączyć jakiś klient. Czy jest możliwe, aby mając taki serwer i nasł#!$%@?ąc na jakimś porcie, wykorzystać ESP8266 tak abym za pomocą klienta http mógł wykonać jakiś request ale z poziomu STM-a?

Dla zobrazowania
@bielu000: pytanie odnośnie UART jest dosyć szerokie, więc nie wiem od czego zacząć. Do głowy przychodzi mi:
- odbiornik nie może gubić bajtów. Zwykle więc dane odbiera się tle, np. w przerwaniu albo za pomocą DMA i przechowuje się je w buforze
- główny kod zagląda do bufora i sprawdza czy jest pełna ramka, wtedy ją dekoduje i usuwa z bufora
- warto pomyśleć o CRC
- stosujemy timeouty, dzięki temu jak np. dostaniemy pół ramki i transmisja się urwie, to nie czekamy głupio na resztę bo kolejną ramkę możemy potraktować jako część tej starej
- protokoły można wymyślać różne, np. z ramkami w postaić danecrc, gdzie STX i ETX to odpowiednie znaki kontrolne ASCII, do tego znaki ACK i NAK, są też protokoły, które mają długość w nagłówku, czyli jest coś w rodzaju
  • Odpowiedz
@pepepanpatryk: Możesz w swoim protokole na samym początku zdefiniować pole (np na dwóch bajtach) określające długość ramki, wiesz ile nasłuchiwać i masz elastyczność.

Inna sprawa - czy na pewno potrzebujesz to robić po HTTP? Mam wrażenie, że chcesz go wykorzystać tylko jako warstwę transportową. Wystarczyłoby otwarcie zwykłego socketa TCP i na nim działać swoim protokołem jeśli nie chcesz korzystać z dobrodziejstw HTTP.
  • Odpowiedz
Czy da się jakoś sprawdzić, które zbocze - opadające czy narastające - wyzwoliło przerwanie Input Capture w timerze?


@zwei: możesz w locie zmieniać konfigurację input capture w przerwaniu. Jak złapiesz zbocze narastające to przestaw input capture, żeby łapało zbocze opadające, a jak złapiesz opadające to przestaw na czekanie na narastające.

Opcja druga to tryb MasterSlave, jeśli kombinujesz z pomiarem wypełnienia PWMa:
https://github.com/yhyuan/STM32-Examples/tree/master/6-M3-PWM%20Input%20Capture/USER
  • Odpowiedz
#embedded #!$%@? #!$%@? w dupę chińczyki zawsze #!$%@? podpiszą te zasrane piny odwrotnie no #!$%@? zawsze, a potem ja się męczę, bo działa na opak, dobrze że gnd z vcc nie zamienili
via Wykop Mobilny (Android)
  • 2
@zwei: Ja dostałem kiedyś dokumentację do jednej płytki z ichszym oprogramowaniem. Dokumentacja po chińsku i angielsku. Oczywiście jak z chińskiego tłumaczyło się na angielski to dana komenda oznaczała co innego (i zazwyczaj chińska wersja była dobra).
A i tak sama dokumentacja to w 80% jakieś z dupy wyjęte dane. Jakby małpa tłukła ogonem w klawiaturę.
  • Odpowiedz
@MrDarkenRahl:
gcc
make
vscode (z wtyczko neovim)
openocd+gdb (czasem na żywca, ale zazwyczaj przez plugin w vscode - cortex debug czy jakoś tak, bo szybciej wyklikać te breakpointy w gui), wcześniej używałem texane/st-link zamiast openocd, ale zaczęło się chrzanić nie wiem czemu
+ własne skrypty jakieś, żeby za dużo się nie naklepać w klawiaturę
  • Odpowiedz
@MrDarkenRahl: gcc, make, Emacs, st-link albo OpenOCD (to drugie zwłaszcza jak nie pracuję na demoboardzie od ST i trzeba użyć np. SWD). Nie lubię GUI i klikania myszą, wolę command line, gdb i git też, próbowałem użyć jakichś IDE-like helperów w Emacsie ale mi to nie podchodzi
  • Odpowiedz