Hej, potrzebuję zadać parę pytań a za bardzo nie mam komu - ba nawet nie wiem gdzie w necie mógłbym o to zapytać. Wybaczcie, że pytania mogą wydawać się głupie ale naprawdę nie wiem do końca jak to powinno wyglądać. Wszystkie pytania będą dotyczyć customowego boarda, bazującego na SoC LS1028a
1) Czy dodając support dla mojego SoMa powinienem dodać nowy board do źródeł Trusted Firmware A? Patrząc na źródła Trusted Firmware A, w katalogu
@bielu000: moim zdaniem, jak zwykle "to zależy". Rozumiem że pytanie dotyczy bardziej wsparcia projektu w długim czasie; i że dotyczy tylko yocto.
1. Moim zdaniem warto wrzucić osobny board, z dwóch powodów - jeśli upstream coś zmieni, to zaaplikowanie tych zmian będzie wymagało przejrzenia co się zmieniło i jaki to może mieć faktyczny wpływ. Dodatkowo, powinno to imho poprawić zrozumienie procesu dla nowego inżyniera jeśli kiedykolwiek będziecie zatrudniać lub ktoś
Mirki mam kilka pytań, może ktoś będzie w stanie odpowiedzieć.
1) Czy korzystacie z Fit image w swoich konfiguracjach czy nie? Jeżeli tak, to czy w wynikowym obrazie (np. na partycji boot) powinien się zawierać plik fit image czy np. powinien też być Image. Moim zdaniem tylko fitImage, jako, że on już zawiera obraz kernela.
2) Czy w Yocto, zmiany w np. u-boocie, które da się ogarnać np. configiem - np. CONFIG_BOOTARGS, dostarczacie jako
ja już jakiś (dłuższy) czas nie dłubałem z tej strony, ale z tego co pamiętam, nie używaliśmy fitimage, a szkoda, jak sobie przeczytałem artykuł to fajna koncepcja. Pytanie tylko jak z aktualizacją czegoś takiego, zdaje się że w tym przypadku musiałbyś po prostu lecieć modelem A-B jeśli się zaktualizował i zbootował z B to się udało, jak nie to wracamy do bootowania A.
Mrki z #embedded mam takie pytanie. Załóżmy, że firma zdecydowała się na zbudowanie płytki w oparciu o procek STM32MP135. Na rynku dostępne są development kity itp. Mamy wsparcie w mainline u-boocie, mamy wsparcie w mainline Linux. Płytka, którą stworzy firma zawierać będzie inne elementy niż te dostępne na dev kicie. Jak rozumiem np. oznacza to patchowanie źródeł u-boota, dodanie np. swoich configów do odpowiadających tworzonej płytce. Tak samo z Linuxem?
@bielu000: device tree używasz tylko dla szyn które nie mają autodetekcji, typu i2c, spi etc. USB nic nie musisz robić. Te zewnętrzne urządzenia zazwyczaj nie są niezbędne do boot płyty. Innymi słowy wszystko w SoC ci wstanie od kopa. Flash SPI będziesz musiał zdefiniować jeśli jest inny layout (adresy) żeby coreboot ci obraz załadował ale to banał. Co do Linuxa i tych dodatkowych zewnętrznych układów, to może będziesz musiał kompilować
@bielu000: Pewnie przestałeś śledzić jak sytuacja wyglądała tak, że ruskich dzieliły godziny od zajęcia Bachmutu i ruszenia na Kramatorsk. Jeśli tak, to nic się nie zmieniło. Ruscy zdobyli kilka małych wiosek, a ukraińcy kilka odbili. Front stoi, a ukraińcy nawalają artylerią i dronami, robią uderzenia sprawdzające przed kontrofensywą, ruscy zaś nadal walą po blokach mieszkalnych. W Bachmucie nadal trwają walki.
Cztery lata marzyłam o wyjeździe na work&travel do Stanów i w tym roku w końcu spełniam swoje marzenie! Ktoś z Was był na takiej wymianie? Chętnie pogadam :D #podroze #usa #chwalesie
@give_me_coffee: Zazdro! Na jak długo lecisz? Lecisz w jakieś konkretne miejsce, czy raczej będziesz podróżować po Stanach? Podrzuć link do insta, żeby śledzić relację, może być na PW :)
TLDR; 3k za pórczony kurs, poźniej egzamin - zdasz - gwarancja pracy. ps tak mam kobiety w teamie. ps.2. jasne prywatna firma może robić co chce, niemniej jednak szkoda, że wielu enuzjastów programowania już na starcie jest dyskryminowanych przez losowy wybryk natury, na który nie mieli wpływu.
@RandomizeUsr0: Straszny frustrat z Ciebie. Akurat tak się złożyło, że studia skończyłem i nadal uważam, że pójście na studia to nie jest zmarnowany czas. Ale nie będę się tutaj nad tym rozwodził. Wątek z kompleksami i spermiarzami pominę, dodam tylko, żebyś nie mierzył wszystkich swoją miarą. Temat dotyczy nierówności na rynku pracy, którą generują firmy udając, że z tą nierównością walczą - bo akurat coś jest modne.
@PaaD: "Będziesz pisała kod, testowała oprogramowanie i tworzyła dokumentację. Jeśli dostrzeżesz błąd lub problem w istniejącym oprogramowaniu, Twoim i zespołu zadaniem będzie znalezienie rozwiązania."
to projekt, w ramach którego doświadczeni trenerzy i trenerki z Software Development Academy przeszkolą i przygotują do pracy Software Developera 20 entuzjastek nowych technologii.
Ps. to nie kurs dla mnie jak wspomniałem w opisie - pracuję w teamie z kobietami (akutalnie dwiema), programujemy sobie w C++,
@hawat: Nie będę się wypowiadał o wszystkich ale ja mam takie doświadczenie - kobiety, z którymi pracuję radzą sobie bardzo dobrze, są ogarnięte, dostały pracę po normalny procesie rekrutacyjnym. Często wręcz dają z siebie 150%. Obie w wieku wieku <30 więc raczej można powiedzieć, że młodszej daty.
@marilyn92: Wiesz co ja nie neguję dyskrymninacji kobiet w kontekście zawodowym - pod względem płac, czy równego traktowania. Mężczyźni z natury są bardziej pewni siebie dlatego zwyczajnie łatwiej jest im wynegocjować podwyżki, postawić się szefowi itp. - i na tym powinna się skupić walka z nierównością. Nauczyć kobiet technik negocjacji, być może pomóc im zwiększyć pewność siebie, a nie robić kursy TECHNICZNE skierowane tylko dla kobiet. Pod względem wiedzy technicznej
Czy to zdanie jest prawidłowe gramatycznie i ma sens? Chodzi o wyrażenie czegoś w stylu: Gdyby nie wytrwała praca / wysiłek zespołu nie udało by się nam zakończyć tego zadania. Słówko unstinting musi zostać użyte.
Hadn't been for the unstinting, team's effort, we wouldn't have managed to complete this task.
Nie do końca rozumiem tą inwersję z Had na początku. Zrobiłem to bardziej na czuja korzystając z innych przykładów, w stylu:
Hej dzisiaj kolejne pytanie - zacząłem przenosić projekt z płytki prototypowej na uniwersalną płytkę drukowaną i co chwile pojawiają się jakieś problemy. Ale do rzeczy - mam sensor - kontraktron. W momencie kiedy przyłoży się do niego tą drugą część, obwód się zamyka i powinien się zmienić stan na gpio.
Zmienia się i owszem problem w tym, że wygląda jakby tam był straszny bałagan, zmiana stanu na sensorze wykrywana jest jakby wydarzyła
@bielu000: Eh póki co nie ma co się spieszyć z podpowiedziami bo i tak nie sprawdzę. Przez przypadek zwarłem, któryś PIN Rpi do 12V, dioda z płytki zgasła i już nie wstaje, grzeje się w okolicach zasilania więc pewnie uwaliłem.
Aczkolwiek sam problem, który opisałem wyżej jest dość dziwny.
@Jarek_P: Jak według Ciebie miałby wyglądać schemat podłaczenia tego sensora? Rozwiązanie wziałem to od Kardasia gdzie twierdził, że według niego to "najlepszy" sposób na filtrowanie digital input-u.
@Jarek_P: Czy ja dobrze rozumiem, że w takim razie miałbym wywalić całkowicie połączenie przez rezystor 10k? W takim razie o co temu Kardasiowi chodziło, bo w takim razie całkowicie niepotrzebne wrzuciłem na płytkę przetownice - ona była tylko do tych kontaktronów.... Odległość to max 1,5m.
@Jarek_P: Jak tylko znajdę to Ci podrzucę, bo ten filmik to miał jakąś taką dziwną nazwę nie związaną z tematem, ale w filmiku właśnie wszedł na temat drgań styków. Poszukam i wrzucę.
A co do schematu - bo generalnie chyba nie do końca Cię rozumiem - w sensie nie do końca wiem co do czego mam podpiać, co najciekawsze to jest ostatnia część schematu, która wydawała mi się, że będzie
@Jarek_P: Tak teraz jasne, w poprzednim poście zrozumiałem, że ten 10K ma zostac, co się kłóciło z wywaleniem tej linii 3.3V, teraz jasne. Niestety Raspbbery spalone, ale do czasu aż przyjdzie następne to przetestuje to na STM.
@Jarek_P: Jeszcze jedno czy odległość pomiędzy sensorem a GPIO ma znaczenie? Tj. załóżmy, że zamiast PB1 na obrazku, PB1 jest w odległości 20cm. Czy tranzystor oraz rezystor powinien być jak najbliżej pinu?
@Jarek_P: Dzięki wielkie. Powiedzmy, że działa, dodałem chamski debouncing w postaci delay 50ms w przerwaniu, ale w Linuxie to sobie jakoś inaczej ogarne.
@Jarek_P: Mam jeszcze jedno pytanie, bo kończę układ i dla pewności dodałbym jeszcze te diody. Na płytce jest tylko linia 12V, po której płynie prąd z natężeniem nawet 1,5A. Czy mogę tą diodę (1N4004 max 1A) idącą od sensora podpiąc bezpiecznie do tej linii?
Parametr odnosi się do maksymalnego prądu przewodzenia, a nie ma opcji aby od strony sensora taki prąd mógł płynąć, zastanawiam się czy jednak prąd płynący przez
Hej mam prawdopodobnie trochę głupie pytanie ale nie do końca rozumiem dlaczego dzieje się tak a inaczej. Mam wentylator sterowany przez mosfet IRL540N. Próbuję tym sterować przez pin mikrokontrolera. Jest to część większego schematu, reszta działa ale z tym cholerstwem mam problem.
1) Działa na płytce stykowej, nie działa na polutowanej płytce uniwersalnej. 2) Działą na płytce stykowej, działa na polutowanej płytce uniwersalnej.
@bielu000: Nie napisałeś jakim napięciem steruje mikrokontroler na wyjściach i ile prądu potrzebuje ten wentylator. Tranzystor IRL540 ma napięcie sterujące bramką określone na "od 2V do 4V". W większości przypadków pewnie się otworzy przy napięciach bliższych tych 2V, szczególnie dla niskich prądów drenu, jednak może ci się trafić egzemplarz który będzie miał napięcie Ugs bliższe tym górnym widełkom, a jeśli dodatkowo ten wentylator potrzebuje trochę więcej prądu to już prawie
Mirki brałem udział w dwóch semestrach języka ang na poziomie B2+/C1. O ile materiał jako tako ogarniałem o tyle jeżeli chodzi o gadanie to tak powiedzmy, że średnio bym powiedział, tzn. na 6 osób postawiłbym się tam na 3 miejscu jeżeli chodzi o rozmowy. Zaproponowano mi kontynuację + rozgrzewkę na kursie konwersacyjnym w wakacje na poziomie C1+, a następnie 2 semestry na C1+. I pojawił się problem. Jestem teraz na tym kursie
Mam problem, chce sterować tranzystorem przez GPIO. Tranzystor to IRL540N Logic level. Połączenie jak na schemacie poniżej nie działa. Tzn. działa jak zamiast GPIO podepnę 3.3V. Co ciekawe GPIO skonfigurowane jako out, ale w momencie kiedy podpinam je w bramkę transytora to cat value pokazuje 0, a jak odepnę pin to wskazuje tak jak ustawiłem: 1.
@Loperamid: Naryswałem jakieś dziadostwo w paincie bo jak na złośc narzędzie, z którego korzystam wywala jakiś error i nie mogę się zalogować, więc rysunek wziałem pierwszy z brzegu i go tylko lekko zmieniłem. Wiem, słabo wrzucę normalny jak to cholerstwo zacznie działać bo tam mam wszystkie schematy.
Udało mi się zalogować, tak to wygląda. Ma to służyć do sterowania przekaźnikiem. Bardzo mnie zastanawia dlaczego jak podpnę 3.3V to jest ok, a wysterowanie pinem nic nie daje. Czy może być jakiś problem z masą? Ewentualnie zepsuty tranzystor?
@atehxx: Wystawiam 1 na GPIO. Tyle, że po wystawieniu value z /sysfs/gpio/gpioX wskzuje mi 0. Po odpieciu pinu od bramki tranzystora nagle pojawia się 1
@atehxx: Zdrutowałem na szybko inny tranzystor. Wydaje się działać. Jakim sposobem ten tranzystor sie zepsuł? Trzymałem go przez cały czas w woreczku tym anytelektrostatycznym czy jakoś tak. Sprawdzałem czy działa na płyce prototypowej. Co tu się stało?
Hej mam pytanie co do RS485. Załóżmy, że z poziomu RaspberryPi chciałbym komunikować się z wieloma urządzeniami podłączonymi do tej samej magistrali. RPI byłoby masterem i to ono inicjowałoby komunikację z innymi urządzeniami. Niemniej jednak nie do końca rozumiem jak te urządzenia powinno się łaczyć. Czy ja dobrze rozumiem, że do każdego urządzenia musiałbym dokupić taki konwerter: klik a następnie stworzyć coś w rodzaju huba? Przygotowałem też schemat jak to sobie wyrobarażam.
@Tymian: Ale czy generalnie to co ja narysowałem to nie jest to samo? Wszystkie porty na hubie są spięte razem, hub to tylko po to, żeby mieć możliwość wygodnego wpięcia urządzeń do głównej linii. Jeżeli się mylę to proszę o wyjaśnienie :)
@HamRadioOp: Możesz coś wiecej napisać dlaczego to by nie zadziałało? Absolutnie nie upieram się przy tym co mam, chciałbym wiedzieć dlaczego to nie ma sensu.
@zarowka12: @atehxx: a czy np zakładając że zrobiłbym sobie taki prosty hub jak wyżej czy miałoby to sens jeżeli dodatkowo oprócz tych linii do danych puściłbym dodatkowo zasilanie? Np hub podpięty do zasilania i dodatkowo każde urządzenie podpięte przez RJ11mialoby zapewnione zasilanie. Ma to sens czy raczej nie?
@zarowka12: tak dokładnie, aczkolwiek po tym co tutaj piszecie rozwiązanie z hubem wygląda na słabe i zrobie to tak jak sugerujecie czyli normalne rozgałęzienia na magistrali.
Cześć, patrząc po poradnikach pisania driverów do Linuxa, zauważyłem, że np. w przykładzie jakiegoś drivera, który korzysta z GPIO, numer GPIO jest hardcodowany w źródle drivera. A co jeżeli mam board A, na którym chce wykorzystać GPIO10, oraz board B, na którym ten sam driver chce użyć ale z GPIO25?
@Rosly: Hej dzięki za informacje . Właśnie tak przeglądając przykładowe pliki device tree, wyglada na to, że to dobre miejsce aby wrzucić np. id gpio, których miałby używać mój driver. O ACPI totalnie nic nie wiem, ale strzelam, że to pewnie robi to samo co DTS ale w inny sposób. Zobacze na to dokładniej.
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
@zarowka12: Czy przy -O0 też by mogło coś takiego wystąpić? Przekopiowałem procedurę czyszczenia flag z implementacji w LL od STM i nadal to samo. Breakpoint mi łapie bezpośrednio w miejscach gdzie przypisywane są zmienne więc wydaje mi się, że nie zostały wywalone podczas kompilacji.
Dodałem parę linijek kodu, tak aby wartość DR na pewno była brana pod uwagę - więc dorzuciłem ifa, który w zależności od wartości DR zmienia wartość innej zmiennej volatile, ale nic to nie dało. Cały czas widzę, że bit IDLE w SR jest zapalony.
@bielu000: Zastanawiam się jeszcze nad jednym - w libopencm3 nie w przypadku usart1 dla STM32F103 nie ma żadnej funkcji, która włączałaby przerwanie po wykryciu IDLE. W api jest tylko funkcja, w której ciało wygląda tak: USARTCR1(usart) |= USARTCR1_RXNEIE; Ale z drugiej strony są definicje, pozwalające ustawić w CR przerwanie na to zdarzenie. Już się zastanawiam czy może to coś jest nie tak w przypadku tego MCU, ale nie
@zarowka12: Chcę właczyć przerwanie opisane dokładnie jako: "Idle line detected" na USART1, żadne inne mnie nie interesuje aktualnie. Nie wdając się zbytnio w szczegóły - potrzebuję tego do wywołania procedury przetwarzania danych, które zostaną przesłane przez USART i które DMA skopiuje do mi bufora. Dane te mogą być zmiennej długości więc przerwania HT oraz TC z DMA nie do końca mi leżą.
@zarowka12: Właśnie trafiłem na ten artykuł, prześledzę go i spróbuję zrobić tak jak tam jest. [[maybeunused]] to po prostu atrybut, który mówi kompilatorowi aby mimo, że zmienna jest nieużywana to nie wywalał błędu przy kompilacji. Aktualnie w usart1isr mam skopiowany kod z procedury z LLUSARTClearFlag_IDLE. Niestety nic to nie zmienia. To raczej niemożliwe, aby z chipem było coś nie tak prawda?
@zarowka12: Tak aktualnie wygląda moja procedura obsługi przerwania klik - zwykły kod - przpuszczony przez preprocesor, więc widać na co się rozwijają makra
Muszę to porównać z adresami ze struktur z CMSIS.
Funkcję LLUSARTClearFlag_IDLE wziąłem z kodu źródłowego HAL od STM, tak aby mieć u siebie dokładnie to co oni w tej procedurze.
@zarowka12: Właśnie w tym momencie skończyłem przeglądać kod HAL i też podliczylem te wartości i wyszło mi to samo. UART jest podpięty do konwertera FTDI FT232RL i nic czego jestem świadom nie jest przez niego aktualnie wysyłane.
@zarowka12: Assembler też wygląda ok, jest read zarówno z SR jak i DR. Nie mam pomysłu co to może być. Jutro spróbuje szukać dalej. Mógłbym pewnie wymyślić jakiś workaround na to, ale bez sensu skoro powinno to działać.
@zarowka12: Wywiązałem pewną dyskusję na stacku odnośnie tego tematu. Ale czegoś nie rozumiem - czy jeżeli nie wysyłam żadnych danych przez UART, czy flaga IDLE w SR powinna być cały czas zapalona, czy nie?
@zarowka12 Bo jeżeli tak to zastanawiam się jeszcze nad jedną rzeczą - wyłaczyć przerwanie IDLE - włączyć przerwanie RX - po pierwszym otrzymanym bajcie w isr właczyć przerwanie IDLE, wyłaczyć RX - po przerwaniu IDLE wyłaczyć... przerwanie IDLE i włączyć ponownie RX.
@zarowka12: Dlatego też nie chce go robić, to tylko takie moje przemyślenie było. Ale wracając jeszcze do pytania, tak aby miał pewność, że dobrze rozumiem. Wlączam przerwanie na IDLE Line Detected, nie wysyłam żadnych danych - czy w tej sytuacji procedura obsługi tego przerawnia powinna być wywoływana (raz, cały czas), czy to przerwanie powinno zostać dopiero wywołane w momencie po otrzymaniu jakichś danych, gdzie nic już więcej nie jest otrzymywane
@zarowka12: Tak, prosto z aliexpres.. mam gdzieś drugi taki sam, to najpierw spróbuje z nim, może ten w jakiś sposób uszkodziłem - aczkolwiek nie mam pojęcia jak, bo póki co to ma podpięty jedynie konwerter pod uart i nic więcej.
@zarowka12: Jeszcze jedno - dodałem w isr kawałek kodu, który sprawdza czy bit IDLE w SR is ustawiony, jeżeli tak to inkrementowany jest pewien licznik.
I teraz dzieją się dwie rzeczy: - nie ustawiam breakpointa - wysyłam 20 bajtów -
@zarowka12: Uruchomiłem kod od msalamon, breakpoint na UARTDMA_UartIrqHandler i jestem cały czas wrzucany w ową procedurę... Oczywiście nie wysyłam żadnych danych poprzez UART. Jakieś pomysły? Może to ten konwerter coś w ciula gra?
@zarowka12: Podpiąłem dwa MCU. Master -> Skonfigurowałem USART (bez przewań), zapaliłem LED, zostawiłem w pętli gdzie wykonują się nop-y. Slave - Skonfigurowałem USART, ustawiłem przerwania na IDLE state, w ISR mrugam diodą w momencie gdy licznik osiąga wartość 3000 (podbijana przy każdym przerwaniu). Efekt jest taki, że wspomniana dioda mruga... czyli przerwania wywołują się cały czas.
@zarowka12: Możesz coś więcej na ten temat napisać? W sensie co można by osiągnać przez to? Przychodzi mi do głowy jeszcze jedynie to, że coś z tymi płytkami jest nie tak. Bo to nie jest do końca ten tzw. blue pill, bo ta płytka ma złącze JTAG. Standardowy blue pill tego nie ma. Aczkolwiek nie wiem co to może zmieniać. Co by tam musiało być namieszane. Mam jeszcze kilka tych
@zarowka12: Rozumiem - póki co odpuściłem temat - tzn. sprawdzę to jeszcze na tym blue pillu (ale to po powrocie do krk, bo pracuje teraz zdalnie poza miastem) - bo tak jak pisałem to co mam ja to troszkę inna płytka - a w międzyczasie kupiłem STM32F4 - i tak miałem się na to przerzucić to lepiej teraz gdy mam mniej kodu do przepisania. Tak w ogóle czy kupienie gołego
@zarowka12: Swoją drogą co sądzisz o tych wszystkich (rt)osach, typu FreeRTOS, TNKernel, TNeo, mbed ect... Pełno tego jest. Z jedej strony wydaje mi się, że fajnie by było się z tym zaznajomić, ale z drugiej strony czułbym się trochę.. "upoźledzony" zdając się na "magię" os-a nie wiedząc co tam się pod spodem dzieje.
@zarowka12: Abstrahują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
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ę servertask(), 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.
@zarowka12: Szlag, oczywiście, że nie widzisz bo takiego nie ma. Tutaj jest repo -> https://gitlab.com/bielu000/stm32-libopencm3 chodziło mi oczywiście o branche. Wybacz ale robiłem przy okazji jeszcze coś innego i się zakręciłem :)
@zarowka12: Tak sprawdzę to jeszcze raz, tylko używając bezpośrednio GDB, bo akutalnie korzystam z VSCdeo i pluginu Cortex-M Debug. Nie miałem z nim póki co problemu, aczkolwiek w tym NIEdziałającym przypadku - sytuacja się trochę zmieniła, bo mimo, że stawiam breakpoint na wywołaniu capacity(), w momencie wysłania danych z PC, owszem breakpoint jest łapany przez debugger, ale przerzuca mnie do usart1_isr(), gdzie w ogóle breakpointa nie mam. Dodatkowo wyłączenie przerwań
@zarowka12: Interesujące, w read_rb, mam capacity = 64 bajty, czyli otrzymane dane faktycznie wleciały do bufora. W związku z tym powineinem wejść w blok ifa, ale nie wchodzę. Próbowałem innych warunków typu >=, lub 54 zamiast 64 i nic. Inwestyguję dalej.
@zarowka12: Testuję jeszcze w vscode. Nie mam pojęcia dlaczego, ale ten drugi breakpoint (x = 100), nie jest łapany, mimo, że wartość zmiennej xsize == 64.
Może coś przez to, że ten ring buffer jest akutalizowany zarówno z przerwania jak i z pętli głównej?
@zarowka12: Zgadza się, kiedy chcę odesłać dane z powrotem, nic już do tego bufora nie jest ładowane, więc też mi to nie pasuje. Kompiluję z -O0 więc raczej żądnych agresywnych optymalizacji nie ma.
@zarowka12: Niestety nie. W ogóle jakby nie chciał wskoczyć do tego bloku. Jutro jeszcze to sparwdzę bezpośrednio w gdb i rzuce okiem na assembly, choć wątpię, że będzie tam coś ciekawego. Jak dla mnie bardzo dziwna sprawa. Jak wspomniałem wcześniej - jeżeli dane wpiszę na stałe do bufora, np. w wywołaniu serverinit(), to po otrzymaniu 64 bajtów, dane odsyłane są bez problemu (oczywiście te zahardcodowane), bo w tym przypadku
Zmieniłem warunek na >= ale nic to nie daje. Podglądałem zawartość zmiennej xsize, tej która trzyma capacity bufora i zwiększa się odpowiednio do otrzymanych danych. Tj. najpierw 0 -> 64 -> 128 - 192 etc.
@zarowka12: Ciekawe, dodaje screena. Po lewej używałem -O1, a do funkcji serverrun dodałem attribute_((optimize("-O0"))). I to działa. Po prawej również -O1 ale bez atrybutu, jednak tu nie działa.
@zarowka12: Ostatni raz wołam bo wiem, że już trochę dupę zawracam :D Nie do końca widzę, aby gdzieś w kodzie było UB, które mogłoby się uaktywnić przy agresywniejszej optymalizacji. A teraz moje pytanie - czy jest opcja, aby kompilator zrobił rozwinął inline kilka wywołań funkcji, przez co kod nie działał poprawnie? Przerzuciłem implementację Ring buffera z .hpp do .cpp i teraz działa. Czy to raczej kolejne przykrycie buga?
@zarowka12: Muszę zobaczyć jak to wygląda w przypadku C++, bo z tego co wiem volatile ma być deprecated w cpp20. Ale chyba można skorzystać z std::atomic.
@zarowka12: Ale zostańmy na chwilę przy volatile. Skoro mam obiekt reprezentujący ringbuffer, na którym wywołuję metody write(w przerwaniu), read w pętli programu - to co właściwie powinno być volatile? Deklaracja zmiennej reprezentującej ten bufor, czy może indexy nawigujące w buforze? Mam na myśli tail oraz head.
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
@elfo: Nie sprawdzałem, natomiast nie chce nic tykać przy ESP8266. Oczywiście zdaję sobie sprawę, że są lepsze rozwiązania (zapewne to o którym wspomniałeś), natomaist możemy założyć że ze względów edukacyjnych chce się skupić na implementacji rozwiązania na STM. ESP8266 nie ruszam.
@elfo: Bez RTOS-a. Tzn. może sprecyzuję - nie chce gotowego rozwiązania na tacy. Przypuszczam, że RTOS i scheduling rozwiązałoby wiele problemów. Bardziej chodzi mi o ideę i dlaczego będę miał problem nie korzystając z RTOS-a, oraz na jakie inne problemy mogę natrafić próbując coś takiego zaimplementować.
Zastanawiam się nad czymś takim: Pomijając już protokół http. Myślałem, żeby ustawić stałą długośc ramki, np. 48 bajtów. Wykorzystałbym DMA do kopiowania danych UART -> memory. Za każdym razem kiedy otrzymam 48 bajtów, parsuję sobie ramkę, jeżeli wszystko jest ok, handluję wiadomość itp, później odsyłam. Czy muszę mieć dwie kolejki fifo? Jedna do odbierania, druga
@elfo: @elfo: W sumie racja, całkiem sensowne. W ogóle mam wrażenie, że ciężko znaleźć jakieś fajne przykłady jak to wszystko wykrzystać w praktyce, więc zapewne będę trochę improwizowal :)
@anuar2k: Dzięki jak coś to odezwę się :) Robiłem już coś kiedyś podobnego ale po USB i wszystko działało, tyle, że tamto było dużo prostsze. Tutaj mimo wszystko chciałbym odspearować trochę warstw. Tzn. mam na
W ogóle - tak przy okazji - współpracuje teraz w pracy z gośćmi, którzy u nas w fimie zajmują się właśnie rzeczmi bardzo blisko systemu operacyjnego i właśnie jest problem z handlowaniem danych przez UART. Ja supportuje ich z warstwy wyżej, gdzie kodzimy już faktyczną logikę biznesową i korzystamy z interfejsów jakie nam udostępniają. Cholera zazdroszczę im, bo tam zajebiste rzeczy muszą robić :D Szkoda, że to zagraczny zespól, bo ciężko bedzie
Korzystał ktoś z transmitera xiaomi w połączeniu z oryginalnym radiem z e46? Nie jestem audiofilem, ale z tego co kojarzę to zazwyczaj transmitery, które używałem z 10 lat temu to się do niczego nie nadawały.
Dzięki, coś czytałem już wcześniej opinie na necie i właśnie słyszałem, że jest w miarę okej. W sumie za tą cenę to wart przetestować.
@kipowrot: auxa już dawno miałem zrobić ale w sumie przyzwyczaiłem się już, że nie muszę nic wpinać do telefonu - ostatnio słucham muzyki na słuchawkach bezprzewodowych. Z tego co tutaj wyżej pisali to jest już wersja 3s,
@kipowrot: Nie znałem tego, brzmi to całkiem dobrze, a czy jest możliwość zasilenia tego jakoś inaczej, tak żebym miał dalej napięcie w zapalniczce? Mimo wszystko coś jakiś czas ładuje sobie telefon podczas jazdy.
Spędzam codziennie dużo czasu przy kompie - w pracy i w domu więc chciałbym trochę zadbać o oczy bo mam wrażenie że trochę pogorszył mi się wzrok. Prawdopodobnie za jakiś czas będę musiał skorzystać z okularów korekcyjnych, natomiast zastanawiam się czy korzystanie z tzw. okularów do komputera, które rzekomo chronią przed szkodliwym niebieskim światlem ma w ogóle jakiś sens? Ktoś korzysta i może coś na ten temat napisać?
@Rst00: Dzięki, o tych ćwiczeniach słyszałem, ale jakoś się nie stosowałem...to chyba dobry moment, aby zacząć :) Zapewne wzroku to nie poprawi, ale może wpłynie na mniejsze "zużycie" :)