Skocz do zawartości

Elvis

Użytkownicy
  • Zawartość

    2435
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    171

Wszystko napisane przez Elvis

  1. Trzy dni to krótko, wręcz standardowy czas na znalezienie błędu Oczywiście nie zawsze można pomijać czy zmienna jest ze znakiem, czy bez - chodziło mi o ten konkretny przypadek i napisy w 7-bitowym ASCII. A wyjaśniając - właśnie dlatego wprowadzono typy w rodzaju int8_t, uint8_t i podobne, żeby uniknąć różnic wynikających z wersji, czy parametrów kompilatora. Stare typy w C mają niestety taką cechę, że mogą mieć różną reprezentację w zależności od środowiska - przykładowo int może mieć 16, albo 32 bity, char może być ze znakiem lub bez itd.
  2. uint8_t to najzwyklejszy, w dodatku 8-bitowy bajt. W języku C odpowiada dokładnie unsigned char. Zarówno signed char i unsigned char zajmują 8-bitów, różnica polega na interpretacji najwyższego bitu, czyli liczby ze znakiem lub bez. Sam typ char niestety nie wiadomo czy jest signed, czy unsigned - ale ew. pomyłka nie jest krytyczna. Kompilator ostrzega że typ jest inny, ale nic złego się nie dzieje. Biblioteka HAL jest delikatnie mówiąc przeciętna, używanie uint8_t jako typu bufora jest marnym pomysłem, ale ST potrafi produkować dobre mikorokontrolery, z programowaniem u nich gorzej. Nie pozostaje więc nic innego jak rzutować typ wskaźnika (rzutowany jest typ wskaźnika, nie same dane). Odbieranie po jednym bajcie jest oczywiście mało wydajne, ale nie jest błędem. Tym co było najgorsze w programie to brak miejsca na znak końca napisu, czyli '\0' - trzeba o tym pamiętać, że w języku C napisy są przechowywane z zerem na końcu. Czyli żeby zapisać łańcuch o długości 4 znaków potrzebna jest tablica o długości 5.
  3. Naucz się chłopie czym się różni CubeMX od Cube - bo z cubemx raczej ciężko coś wycinać. To tylko aplikacja napisana w javie, jak Arduino IDE.
  4. Chyba pomyliło ci się Cube z CubeMX. Można używać Cube HAL nie dotykając CubeMX. Inna sprawa że TCP bazuje na lwIP, więc nie ma potrzeby nawet HAL dotykać. A co do USB to w przypadku device czemu nie zrobić samemu, to wcale nie takie trudne.
  5. Potwierdzam pierwszą część, ale nie zgadzam się że jest nieodzowny Nawet z zegarami lepiej sobie poradzić bez niego, chociaż może być pomocny jako kalkulator - o ile akurat działa. A przy okazji polecam przeczytać komentarz na początku wygenerowanego przez CubeMX kodu... Prawa autorskie do pliku z funkcją main ma ST.
  6. Czyli jednak piszesz głupoty, bo nie masz nic innego do roboty. W sumie to przykre.
  7. Skoro piszesz tylko banalne programiki sterujące diodami to nic dziwnego, że asember nie jest ci potrzebny. Ale skąd masz dane że 98% osób na tym forum nie używa debuggera to chyba napiszesz, bo przecież nie wymyśliłeś tych danych i głupot nie piszesz, prawda?
  8. Ja tylko wspomnę, że ARM to nie tylko Cortex-M więc to co zostało wcześniej napisane nie jest prawdą - w przypadku Cortex-M ogólnie się zgadza, ale już na Cortex-A nie. Natomiast znajomość asemblera bardzo się przydaje, chociażby podczas debugowania. Poza tym w Cortex-A jest potrzebna przy obsłudze przerwań, ale nawet na Cortex-M kod wykonywany przed wejściem do main jest napisany w asemblerze. Natomiast poleganie na tym co ST dostarcza nie zawsze wystarcza.
  9. To zmień księgowość i przestań wypisywać bzdury na forach internetowych.
  10. Jeśli wózek inwalidzki jest sprzętem medycznym to pisanie kodu od zera może nie być przejawem megalomanii, ale koniecznością. No chyba że biblioteki Arduino spełniają wymgania PN-EN 62304, w co akurat wątpię.
  11. Jak chodzi o moduły SOM, to ogólnie jest tak jak napisał kolega @msalamon, ich zastosowanie to głównie profesjonalne, komercyjne projekty. Nie znaczy to oczywiście, że w projekcie amatorskim na takie moduły nie ma miejsca - mogą się przydać chociażby do nauki, w końcu kiedyś możemy chcieć nie tylko bawić się w programowanie, ale może i coś na tym zarabiać. W każdym razie podejście nie powinno być takie - mam moduł i myślę do czego go mogę zastosować. Lepiej jest podejść odwrotnie - mam do rozwiązania pewien problem, przykładowo muszę zaprojektować urządzenie, które będzie zapewniało określoną funkcjonalność. Dopiero wtedy można zastanawiać się jak taki problem rozwiązać. I tutaj jest wiele możliwości, a wybór rozwiązania zależy od mnóstwa czynników. Jeśli mikrokontroler jest wystarczający, to często jest najlepszym wyborem. Są jednak problemy, przy których mikrokontrolery nie dają sobie rady - i tutaj znowu jest wiele możliwości: można zaprojektować własną płytkę, użyć gotowego komputera przemysłowego, taniego SBC, albo modułu SOM. Nie ma jednej odpowiedzi które rozwiązanie jest najlepsze (bo gdyby było, już dawno pozostałe by zniknęły z rynku).
  12. @Faramir Można też po prostu przestać pisać, w końcu każdy ma prawo zmienić zdanie i może konto jeszcze się przyda. A to że forum nie jest dla każdego... coś w tym jest. Ja tylko zacytuję powiedzenie "Jeśli jedna osoba mówi ci że jesteś osłem to ją zignoruj, jeśli dwie osoby mówią ci ze jesteś osłem to je zignoruj. Jednak jeśli pięć osób mówi ci że jesteś osłem to idź i kup sobie siodło..." - tak do przemyślenia
  13. masz na tej samej stronie, wystarczy kliknąć. A jak nie to poszukaj po autorze.
  14. Ale to jest wersja ethanaka, inne już niekoniecznie
  15. Ja zgaduję że tapper będzie wyglądał mniej więcej tak https://www.mobygames.com/game/tapper__
  16. Ja wolę nie wymyślać własnych przykładów, ani nie uczyć innych fizyki, bo nie czuję się w tym ekspertem. Natomiast wymyślanie złych przykładów jest gorsze niż milczenie. Opór, czy raczej rezystancja to stosunek napięcia do prądu - więc nie mając definicji napięcia w tym przykładzie ciężko jest podać analogię oporu. Mnożenie przez szerokości, długości itd jest absolutnie bez sensu, chociaż wydawało mi się, że ma to jakiś związek z rezystywnością i była to próba tłumaczenia rezystancji za pomocą rezystywności... Ale nie wiem, o co chodziło - i chyba nie chcę wiedzieć. Poponuję zamiast pisać głupoty na forum po prostu się douczyć. A może ktoś pokusi się o artykuł z podstawami fizyki dla początkujących? Może wtedy będzie łatwiej zrozumieć czym są te nieszczęsne samochodziki, pasy, czy inne cuda.
  17. Z mojej strony to był tylko apel o pisanie sensownych odpowiedzi, nie złośliwość. Po prostu nikt chyba nie zna się na wszystkim, więc może lepiej pomagać w tym na czym się znamy, niż wprowadzać w błąd początkujących pisząc na tematy o których nie mamy pojęcia.
  18. W sumie nic się nie zgadza, ale napięcie faktycznie najbardziej. Ilość samochodów odpowiada ładunkowi, nie ma nic wspólnego z napięciem. Natężenie to liczba samochodów przejeżdżających przez jedną "linię" (przekrój), czyli nieskończenie krótki (wąski?) odcinek. Podana definicja oporu zupełnie nie ma sensu - chyba powstała z nie do końca zrozumiałego pojęcia rezystywności i zamiany kierunków. Bo jeśli należałoby mnożyć to nie przez długość, ale przekrój poprzeczny (liczbę pasów na autostradzie?) Proponowałbym skupić się na pomaganiu w dziedzinach, które się jednak rozumie, a nie nabijaniu wpisów - ilość nie przechodzi w jakość.
  19. Skoro masz uwagi do czytelników, pozwól że ja będę miał uwagę do pisarzy. Alokowane zasoby należy zawsze zwalniać. Poleganie na systemie świadczy o słabej jakości programu i nawet jeśli nie doprowadzi do katastrofy, należałoby tego unikać. Jak dla mnie wystarczyłoby napisać - w przykładzie pojawił się błąd, każdemu się zdarza i koniec. Edit: Trochę przesadziłem ze złośliwością w pierwszej wersji, dokonałem autocenzury, przepraszam.
  20. Raczej chodziło mi o łatwość i wygodę. Używająć RPi nożna biblioteki instalować używając npm, co więcej gotowce mają większe szanse na działanie w pełnej wersji. Dlatego na początek radziłbym pełnego node.js, później można próbować sił z czymś innym, może ciekawszym.
  21. Skoro znasz JS to proponuję użyć node.js. Dokładnie jak zasugerował @FlyingDutch, tylko odradzałbym esp32. Okrojone wersje to nic dobrego i wymagają nieco więcej wiedzy. Najprościej użyć RPi, zainstalować node.js i można zaczynać programowanie.
  22. Najważniejszy jest plik .ucf, bo błąd w nim daje dokładnie takie efekty.
  23. Możliwe że błąd był w syntetyzowanym kodzie i to zblokowało płytkę. Niestety, ale niepoprawna konfiguracja pinów może zablokować generator zegara dla programatora - a objawy idealnie to potwierdzają. Miałem kiedyś taki problem z płytką ElbertV2, pomogło zablokowanie komunikacji z pamięcią SPI podczas załączania zasilania.
  24. Chyba błąd jest tutaj: INKL(); Numer = kod; Numer = 0; Miało być raczej: kod = Numer To samo jest dalej: INKL(); Numer = szt;
  25. Jeśli faktycznie generowane jest _estack = 0x20009FFF; to straszna bieda. Cały stos jest źle wyrównywany, aż dziwne że cokolwiek wtedy działa.
×
×
  • Utwórz nowe...