Skocz do zawartości

Elvis

Nowy
  • Zawartość

    2694
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    198

Posty napisane przez Elvis

  1. Niby tak, chociaż to bardzo górnolotne określenie w przypadku większości z tych czujników. Przykładowo moduł z diodą, to pod względem elektrycznym po prostu dioda i rezystor - można to podłączyć na płytce stykowej samemu. Oczywiście grove daje do tego płytkę pcb, gniazdko, wtyczkę i kabelek - więc jest znacznie solidniejsze niż stykówka. Ale to nadal tylko dioda i rezystor...

    Natomiast fizycznie ta dioda nie jest połączona z Raspberry, po drodze masz na shieldzie dodatkowy mikrokontroler, który faktycznie steruje tą diodą - więc właściwie raspberry jest niepotrzebne. Program na raspberry nie ma nic wspólnego ze sterowaniem pinami jak pokazywaliśmy podczas kursu, on po prostu przesyła do mikrokontrolera polecenie, co tamten ma wykonać.

    To jak z arduino - możesz je podłączyć do PC, arduino będzie sterowało diodą, a nie PC. Więc takie przykłady oczywiście będą fajne, ale nauczą Cię tylko jak korzystać z biblioteki Groove, nie dowiesz się z nich nic o tym jak działa Raspberry, ani jak sterować samemu nawet diodą. Jeśli jesteś miłośnikiem gotowych bibliotek, czy "warstw abstrakcji" to pewnie takie rozwiązanie będzie całkiem sensowne. Ale jeśli chciałeś dowiedzieć się czegoś o Raspberry, to obawiam się że mało przydatne.

    • Lubię! 1
  2. Może mi się pomyliło, w każdym razie na stronie gcc jest:

    "On ARMv7-M the interrupt type is ignored, and the attribute means the function may be called with a word-aligned stack pointer."

    https://gcc.gnu.org/onlinedocs/gcc/ARM-Function-Attributes.html

    A na ARM muszę poszukać, bo tam było chyba więcej sprzeczności (raz że potrzebny, innym razem że nie)

    Na stronie ARM: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0774g/vvi1465810473505.html

    "In ARMv6-M, ARMv7-M, and ARMv8-M, the architectural exception handling mechanism preserves all processor registers, and a standard function return can cause an exception return. Therefore, specifying the interrupt attribute does not affect the behavior of the compiled output. However, ARM recommends using the interrupt attribute on exception handlers for clarity and easier software porting."

    Chociaż z tym gcc to chyba zły fragment - nie da się na szybko odpowiadać 🙂 W każdym razie wpisanie w google attribute interrupt zwraca dość rozbieżne wyniki. Natomiast zgodnie z opisem np. w programming manual, na cortex-m3 sprzęt powinien obsługiwać wyrównywanie do 8.

    • Lubię! 1
    • Pomogłeś! 1
  3. Jak nie wyrówna to mogą być błędy, bo kompilator zakłada zgodnie ze standardem że stos przy wywołaniu funkcji jest wyrównany do 8. Więc jeśli nie jest to może (ale nie musi) się coś popsuć. Nie wiem na której rewizji bazuje f103, trzeba sprawdzić, ale wątpię żeby to wyrównywanie było potrzebne - nawet na stronach ARM-a piszą że nie jest i atrybut nie ma znaczenia.

    • Lubię! 1
  4. Wyrównywanie oznacza, że wszystkie dane mają adresy podzielne przez pewną liczbę np. przez 4, albo przez 8. Dlaczego w AAPCS wybrano 8 tego nie wiem, bo dla 32-bitowego układu teoretycznie powinno wystarczyć 4. Możliwe że chodzi o to że niektóre instrukcje działają szybciej jeśli adres jest podzielny przez 8, a może o zgodność z 64-bitowymi układami? Nie znam dokładnego wyjaśnienia, ale ze standardami jest tak, że trzeba przestrzegać, nawet jeśli nie wszystko się o nich wie.

    Co do tego kodu generowanego przez kompilator to prawdopodobnie jest niepotrzebny, bo już sam sprzęt zapewni odpowiednie wyrównywanie - ale wyrównanie już wyrównanego stosu nic nie popsuje, chociaż zmarnuje trochę czasu i pamięci. W sumie nawet ciekawe co ten kod robi, możesz go przeanalizować i opisać, zawsze się czegoś nowego dowiemy.

    • Lubię! 1
  5. Nie wiem, czy wybrany zestaw groove to akurat najlepszy pomysł - w przypadku kursu na Forbocie, chcieliśmy pokazać jak za pomocą samej Malinki można komunikować się z (prostymi) peryferiami. Więc np. miganie diodą odbywa się bezpośrednio z poziomu Linux-a (i stąd te problemy z bibliotekami). Takie podejście wydawało nam się sensowne, bo pozwala poznać jak działa Linux na systemach wbudowanych.

    Natomiast zestaw groove posiada shield z mikrokontrolerem... czyli jest to po prostu Arduino podłączone do Raspberry. Oczywiście można się nim świetnie bawić i mieć dużo radości, ale to nie nauczy praktycznie niczego związanego z Raspberry, prawdopodobnie wygodniej byłoby kupić Arduino i podłączyć do PC.

    • Lubię! 2
  6. A tak z ciekawości zapytam - w czy napisany został Linux? Czy jego złożoność nie jest aby większa niż wielu aplikacji w pythonie? Bo jeśli przypadkiem napisany jest w C, działa całkiem wydajnie, ma ponad 20 lat, a pracowało nad nim więcej niż kilka osób to o czym cała ta dyskusja? Są banalne projekty w C i całkiem zaawansowane w pythonie, ale są i o wiele bardziej zaawansowane w C, czy asemblerze. Leczenie własnych kompleksów na forach internetowych chyba nie ma chyba sensu - niech każdy pisze mega fajne programy w jęzku, który zna i lubi oraz pozwoli innym wybierać inne rozwiązania.

  7. Proponuję zacząć od początku, czyli jaki mikrokontroler, która wersja CubeMX. Wbrew pozorom różne błędy pojawiają się w oprogramowaniu dla różnych modeli z rodziny STM32, w każdej wersji Cube niektóre są poprawiane, a pojawiają się nowe. Więc może zamiast zgadywać warto ustalić o czym piszemy.

    Druga sprawa to "wygląda to tak że program wychodzi z funkcji HAL_I2C_Master_Transmit ( zwraca HAL_BUSY lub HAL_ERROR ) i dopiero potem następuje zwis i nie wiem co w tym momencie procesor robi." - możesz to nieco rozwinąć? Piszesz że używasz debuggera, a później nie wiesz co procesor robi - czyli nie możesz zatrzymać wykonywania, nastąpił reset, program jest w miejscu gdzie się nie spodziewałeś czy o co chodzi? Przy okazji warto sprawdzić czy nie jest winne to co pojawia się w programie po wywołaniu HAL_I2C_Master_Transmit - może wstaw tam nieskończoną pętlę i zobacz czy wtedy wszystko działa. Bo może błąd jest w zupełnie innym miejscu kodu?

    Edit: pisaliśmy w tej samej chwili - w każdym razie warto ustalić o którym modelu mikrokontrolera piszemy. Natomiast odnośnie zawieszenia - wygląda jakby wykonywany był reset, stąd następne pytania: czy używasz watchdoga, z jakiej płytki korzystasz?

  8. EEPROM jest adresowany bajtowo, czyli można zarówno zapisywać, jak i odczytywać pojedyncze bajty. W jednym bajcie nie można zapisać "dużej" wartości, do tego wykorzystuje się po prostu kilka bajtów. Działa to dokładnie jak w przypadku pamięci RAM - przykładowo zmienna typu uint32_t zajmuje 4 bajty i dzięki temu może przechowywać wartości większe niż 255. Można ją zapisać w pamięci eeprom również wykorzystując 4 bajty, ale w jednym się po prostu nie zmieści.

    • Lubię! 1
  9. Zaawansowany projekt... ambitnie

    W każdym razie proponuję powrót do początków i podstaw, przykładowo do metody read:
     

    Cytat

     

    "Description

    Reads incoming serial data.

    Serial.read() inherits from the Stream utility class.

    Syntax

    Serial.read()

    Parameters

    Serial: serial port object. See the list of available serial ports for each board on the Serial main page.

    Returns

    The first byte of incoming serial data available (or -1 if no data is available). Data type: int."

     

     

  10. Ok, czyli arduino, albo lepiej raspberry jako sposób na naukę, a później w pracy niska pensja oraz nuda - to brzmi sensownie.

    A może ktoś znalazł pracę, albo chociaż słyszał o pracy gdzie faktycznie Arduino albo Raspberry Pi się używa? Nie tylko doświadczenie przy tym zdobyte, ale same platformy - albo chociaż podobne?

    • Lubię! 1
  11. A tak wracając do pierwotnego tematu:

    "Co myślicie o zmianie zawodu po mimo wszystko tak krótkim czasie pracy? Jak najszybciej złapać pracę w zawodzie? Raspberry, adruino?"

     

    No właśnie bardzo ciekawe jak wygląda sytuacja ze znalezieniem pierwszej pracy przy takich założeniach - czyli znając trochę Raspberry lub Arduino? Ktoś ma jakieś doświadczenia, którymi może się podzielić? Czy dużo jest ofert pracy, ewentualnie jakie są wymagania, gdzie warto pracy szukać, na jakie stawki można liczyć?

     

    Jak chodzi o pracę front-end developera, to google zwraca np. takie informacje o zarobkach:

    "Wśród technologii frontendowych, zdecydowanie najbardziej dochodowy jest Angular. Mediana widełek oferowanego wynagrodzenia, w przypadku osób specjalizujących się w tym frameworku wynosi od 9 000 do 15 000 zł na umowie o pracę oraz od 11 000 zł do 15 000 zł na B2B*.

    W przypadku technologii React mediana oferowanych płac – zarówno na UoP, jak i B2B kształtuje się na poziomie od 9000 do 14000 zł*.

    Specjaliści aplikujący na stanowisko JavaScript Developera mogą liczyć na zarobki, których mediana wynosi od 9000 do 14000 zł na B2B oraz od 8000 do 13000 zł na umowę o pracę*." (źródło: https://nofluffjobs.com/blog/czym-sie-zajmuje-i-ile-zarabia-frontend-developer/)

  12. Nie wiem o co chodzi z tym "certyfikatem dopuszczenia do obrotu". Deklarację CE w większości przypadków wystawia producent i to producent dopuszcza swój wyrób do obrotu: https://www.ce-polska.pl/deklaracja-zgodnosci-ue

    Natomiast na podstawie jakich przesłanek wystawia deklarację - to sprawa i odpowiedzialność producenta. Ale każdy kto jest odważny może taki papierek podpisać i oznaczyć wyrób jako zgodny z CE. Natomiast jeśli będzie to poświadczenie nieprawdy to już sprawa tego kto nieprawdę napisał.

    Są dziedziny, np. sprzęt medyczny, gdzie konieczny jest zewnętrzny audyt oraz udział jednostki notyfikowanej. Przykład takiej deklaracji: http://ascor.pl/certyfikaty_2020/pl/Dyrektywa 93_42_EEC.pdf

    W przypadku kalkulatora nie ma raczej takiego wymogu. Przykład jak wygląda deklaracja zgodności dla Raspberry Pi: https://www.raspberrypi.org/documentation/hardware/raspberrypi/compliance/rpi_DOC_4b_EU_RED.pdf

    edit: Jeszcze dla ułatwienia deklaracja dla starszego RaspberryPi https://www.raspberrypi.org/documentation/hardware/raspberrypi/compliance/rpi_DOC_bplus_CE.pdf Jest tutaj o tyle łatwiej, że nie ma WiFi czy BT - ale jak widać do badania EMC nie wystarczy stare radio.

     

  13. Nie sprawdzałem jak jest w najnowszych wersjach, ale dawniej takiej opcji nie było - i nie był to błąd, ale raczej założenie projektowe (it's not bug, it's a feature).

    Problemem w przypadku tak skomplikowanych układów jak STM32MP1 jest konieczność współdzielenia peryferiów między równolegle działające rdzenie i systemy. GPIO są dobrym przykładem - projektant musi zadecydować, które piny przydzielić dla Linux-a, a którymi ma sterować rdzeń M4. Ponieważ w wersji "produkcyjnej" najpierw startuje Linux i to on jest głównym systemem, za konfigurację GPIO odpowiada ten system. Dlatego CubeMX nie generuje kodu inicjalizującego GPIO dla M4 - po prostu ma to zrobić A7. CubeMX generuje za to plik konfiguracyjny, czyli device-tree, który należy dodać do jądra linuxa - dzięki czemu piny zostaną skonfigurowane poprawnie jeszcze zanim kod na M4 zacznie działać.

    Niestety takie podejście nie sprawdza się w przypadku trybu inżynierskiego i w nim trzeba konfigurację GPIO napisać samemu. Ale to chyba nie jest zbyt skomplikowane zadanie 🙂

     

    • Lubię! 2
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.