Wszystko fajnie, pod warunkiem, że chce się używać STM32. Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę...
Zapewne w większości aplikacji tak jest, ale w często na to trzeba uważać. Przecież nikt nie pisze tutaj o filtrach cyfrowych czy FFT. Niemniej jednak widać na forum tendencję, że nawet JEDNORAZOWE obliczenie czegoś na float to ogromny problem, bo "przecież można to zrobić na liczbach całkowitych, przez co program uruchomi się o 13 mikrosekund szybciej"....
Dziwna rzecz z tym delay'iem. O ile proste miganie ledem nieznacznie przyspiesza po optymalizacji o tyle taki delay w funkcjach obsługi LCD jest "na oko" 20-30 razy szybszy. Nawet jeśli te dwie rzeczy występują w tym samym programie. Przy włączonej optymalizacji ten delay sprowadza się do wywołania PUSTEJ funkcji, bo cały "środek" zostanie zoptymalizowany....
Witam znalazłem bardzo mało informacji na temat assemblera. Od razu zaznaczę, że nie znam go. Potrzebuję maksymalnie skrócić czas wykonywania się takiej funkcji: Dodano po 4 Gdzieś znalazłem, że poszczególne argumenty przypisują się po kolei do rejestrów ogólnego przeznaczenia od r0, r1, ... Jednak gdy tak próbuję zrobić to kompilator wyrzuca warning...
Jakim cudem zmiany kodu wykonywanego w pętli głównej mogą mieć wpływ na działanie tego co jest przed nią ?! Może jest coś wspólnego np. funkcja delay_ms() jest także wykorzystywana przed pętlą główną? ;) A jak wygląda delay_ms(): zwykła pętla for czy użyłeś timera?
A, masz rację. Raczej kompilator (; Teraz powinieneś go oficjalnie przeprosić za "głupi" (; Uwierz, że algorytmy jakie pracują w kompilatorze żeby wykrywać m.in. takie rzeczy (generalnie algorytmy optymalizacji) są poza naszymi możliwościami pojmowania, bo to jest wyższa matematyka (; Np. http://en.wikipedia.org/wiki/Polytope_mo... 4\/3!!
Po to, żeby "schować" funkcję w pliku, w którym jest zadeklarowana i jednocześnie zwiększyć kompilatorowi możliwości optymalizacji i diagnostyki błędów.
RCC_CFGR_PPRE2_DIV1 Chyba kolega coś pomylił: Ustawiam RCC_CFGR_ PPRE1 _DIV2 , a nie drugi raz rejetr PPRE2 _DIV1 Właśnie się odnosiłem do tego, żeby w ogóle nie "ustawiać" RCC_CFGR_PPRE2_DIV1 więc się nie pomyliłem. Jak zmienna i będzie volatile to też tyle samo trwa ? Masz tam wpisane wartości opóźnień na sztywno i optymalizator mógł stwierdzić,...
Z tego co wymieniłeś wszystko jest OK (zakładam, że 3. to wskaźnik na funkcję, a nie jakieś dziwne rzutowanie). Ja bym się jednak początkowo skupił na zainicjalizowaniu w main() wszystkiego co inicjalizuje Keil w startupie, czyli po prostu wywołaniem SystemInit() - jeśli to zrobiłeś to następnym krokiem będzie zastanowienie się, czemu kod w Keilu generuje...
Po co funkcja? - wystarczy prosty zapis do rejestrów BSRR / BRR - krótszy zapis w kodzie, szybsze wykonanie.
Instrukcja BKPT jest ciężka w użyciu pod Keilem, bo nie obsługuje on inline asemblera T2. Wstawka asemblerowa T2 jest musi być osobną funkcją __asm, tak są napisane funkcje arm_intrinsics z bibliotek ;] Ale oczywiście można ją wykorzystywać wywołując odpowiednią funkcję.
Jeżeli funkcja nie jest zadeklarowana jako static, to usunąć niepotrzebną funkcję może jedynie konsolidator, POD WARUNKIEM, że wywołując kompilator uaktywnisz opcję generowania oddzielnych sekcji dla poszczególnych funkcji - to b.ważne dla optymalizacji rozmiaru kodu. Kompilator nie "analizuje całego projektu", chyba, że używamy LTO.
Zaraz będzie, że krytykuję albo się naśmiewam, ale widzę tutaj poważne braki w wiedzy. Zacznę od końca: SSD1289 to jakieś nieporozumienie. Nawet jeżeli uzyskasz dobre wyniki przy wypełnianiu całego ekranu, to wszystko się wysypie przy malowaniu ikon czy dowolnego obszaru innego niż cały ekran. Ten kontroler potrafi w jednej transmisji wypełnić tylko...
Witam Wiem ze to nie rozwiązanie ale jak miałem ten problem co ty postanowiłem przesiąść się na coś z większą ilością pamięci... Mega2560. Jednak teraz wybrał bym STM32 (można programować w arduino). Chodziło o to by najpierw poznać "jak to działa" dopiero później kombinować z optymalizacją. Sporo zasobów zajmują biblioteki... nie zawsze się z wszystkich...
Skoro nasz sygnał muzyki jako już zedytowany, znormalizowany materiał to faktycznie 16 bitów wystarczy w zupełności bez kompromisu jakościowego. Zauważ zresztą że ... Cieszę sie z tego głosu. Co do konwersji próbek między różnymi rozdzielczościami (będącymi wielokrotnością 8 bitów), to szybką metodą nie wymagającą żadnych operacji arytmetycznych ani...
Nie przeszkadza nic. Pytanie czysto filozoficzne Chodzi o to, że jak się jednak okaże, że któryś z tych wektorów zostanie wywołany (bo np. w tablicy wektorów jest błąd), to wtedy od razu wiesz który, a jak masz jeden do wszystkich zarezerwowanych funkcji, to już nie wiesz tego od razu. Generalnie taka jedna funkcja zajmuje 2-4 bajty (zależnie od optymalizacji),...
O adresy kodu chodzi, a nie danych. Adresy kodu mają wpływ na akcelerację dostępu do Flash. Pętla zaczynająca się od adresu podzielnego przez 16 ma szansę wykonywać się szybciej, niż taka od adresu np. 16x + 14. Nie sądzisz chyba, że kompilator przy wyłączonej optymalizacji zrobił dwie różne wersje tej samej funkcji, a linker umieścił je w zupełnie...
Zmodyfikowałem delikatnie bibliotekę, zamiast korzystać z funkcji microdelay z dodanej biblioteki używam HAL_Delay(). Czyli zmieniłeś delay z MIKROsekund na MILIsekundy. Zapewne w bibliotece był potrzebny ten dokładniejszy, więc nawet jeśli przeliczyłeś argumenty, to pewnie po zmianie nie działa jak należy. Swoją drogą ta funkcja delay która tam była...
1. Przyjmij że kompilator działa jak należy i przekazuje parametry do funkcji poprawnie. Gdzie pokaż jeszcze wywołanie funkcji. Optymalizacja -O0 nie zawsze Ci pokaże wszystkie zmienne lokalne. Przy debugwaniu w takiej sytuacji lepiej -Og. Ale wtedy różnica w szybkości prgramu może być 2-3 krotna.
Wciąż więc debatujemy nad funkcją dla jednego tylko układu, czyli dla STM32F0, w którym to faktycznie opóźnienie może mieć tylko dwie wartości. Co z układem w którym opóźnienie to może mieć więcej możliwych ustawień (STM32F4)? Tylko dla optymalizacji kilku linii i kilku cykli mam zrezygnować z faktu, że dla większości układów ST funkcja wygląda praktycznie...
Ok już wszystko się wyrabia jak zwykle problemem był "cudowny" TrueStudio... Ehh gdyby tylko OpenOCD obsługiwał SWD :( Mimo zmiany z debug na release (teoretycznie włącza to optymalizację) TrueStudio dalej dzielnie ładuje wersję debug bez optymalizacji i wtedy się nam wszystko przepięknie sypie. Pozostaje mi się tylko modlić o jak najszybsze dodanie...
Małe nieporozumienie się wkradło. Ten kod który wkleiłem działa tylko gdy nie ma włączonej optymalizacji w opcjach kompilatora. Po włączeniu jakiejkolwiek optymalizacji nie działa interfejs SPI. A z tym "tylko tak działa" chodziło mi o to, że funkcja nadawania i odbierania danych przez SPI nie może być cała zbudowana z bezpośrednich wpisów do rejestrów...
http://obrazki.elektroda.pl/8034957300_1... Z racji iż były święta i było kilka dni luzu postanowiłem w ramach rozruszania szarych komórek pobawić się płytką HY-MiniSTM3V. Znawcy procesorów ARM doskonale znają tę płytkę więc znają jej możliwości. Samo mruganie diodą mnie nudzi, więc wymyśliłem projekt bardziej ambitny :D i tak powstał...
Szukasz w jakichś szczegółach typu kolejność linii assemblera, a one kompletnie nie mają znaczenia... Kod który Ci podesłałem działa "od lat" na dowolnym poziomie optymalizacji na różnych układach - z drobnymi modyfikacjami działa w zasadzie dla wszystkich rodzajów STM32 (w STM32F4 są nieco inne bity w rejestrach, ale różnice są kosmetyczne). Jeśli...
Ewentualnie zmiana poziomu optymalizacji - zależnie od kompilatora pomoże lub nie. Bez volatile kompilator na podstawie samego kodu stwierdza ze "run" nie ma szans zmienić stanu bo niby jak ma wejść do funkcji TIM2_IRQHandler i olewa taki fragment kodu. Kompilator nie uwzględnia czynników sprzętowych (zewnętrznych) oddziałujących na kolejność wykonywania...
[syntax=c] fr = f_mount(&FatFs, "0:", 0); fr = f_open(&fil, "0:filea.txt", FA_CREATE_ALWAYS | FA_WRITE); fr = f_write(&fil, "towrite", 6, &bw); [/syntax] Niestety, write zwraca FR_INVALID_OBJECT. Problem jest chyba z ścieżkami które podaje, wewnątrz f_open funkcja follow_path(&dj, path); zwraca FR_NO_FILE. Niestety glebszy debug się sypie bo nie mogę...
Zrobiłem tak: Błąd występował. Hard Fault. 1. Włączyłem optymalizacje O1. 2. Próbowałem kompilować. Błędy "registers may not be the same" 3. Poczytałem o tych błędach w necie i znalazłem jakieś tam niby podmianki do tych funkcji. 4. Nic one nie dały. Teraz błędu nie było "registers may not be the same" ALE wywalało błąd Hard fault przy wszystkich optymalizacjach....
"Natomiast odczytanie wielu kanałów 200 kSPs co 5 us to banał," Na mikrokontrolerze STM32 nie mam pojęcia jak to zrobić... Tak żeby DOKŁADNIE co 5us odczytywać 3 przerworniki 14-bitowe, z których dane odczytuje się szeregowo. Teoretycznie można to zrobić timerem z przerwaniami ale nawet wejście do funkcji obsługi przerwania zajmuje pewien czas, który...
Problem jest taki - po sygnale reset program się uruchamia ponownie. Natomiast po wyłączeniu i włączeniu zasilania program nie rusza. Dopiero po wydaniu komendy "reset and debug" program ponownie rusza. Ten sam projekcik wgrany za pomocą KEIL działa bez tego mankamentu. zapewne wgrywasz program do RAMu, skad ginie on po zaniku zasilania. Ustawiony...
Co do automatycznego "zwinięcia" to po prostu nie byłem pewien, czy tak się wykona automatycznie : ) ale jeśli kolega tak mówi, to pewnie tak jest. Co do funkcji sprawdzającej kanał, fakt, jest to strasznie nieoszczędne, ale pisałem to na szybko i chciałem żeby było w miarę widoczne co się dzieje, dlatego wrzuciłem to w funkcję. Optymalizacje planowałem...
Na koniec zaś przyjdzie tylko spytać - i co z tego (; Taki sam proces jak zachodzi w komputerach PC zachodzi w mikrokontrolerach - przecież teraz każdy program/gra wymaga 2GB RAMu i ze 2GHz częstotliwości procesora, a instalka czasem nie mieści się na normalnej płycie DVD... Nie wiem czemu się przejmujesz tym że Twój szkielet projektu zajmuje 30-40kB,...
Sama tablica wektorów przerwań w F103 to 200bajtów (ok. 50 wektorów * 32 bitowy adres). Nawet więcej, bo jest 16 wektorów rdzenia, a STM32F1 mają przynajmniej 60 swoich własnych (max 68 w connectivity) - razem więc jest 76-84, co daje przynajmniej 304 bajty. Do tego często dochodzą osobne handlery dla każdego przerwania (sam zacząłem tam jakiś czas...
Cześć. Proszę Was o poradę bo nie za bardzo wiem co jest grane. Mam program na STM2 pisany w C w środowisku Keil. Była to funkcja czyszczenia LCD od Nokii 3310. Zamieniłem w nij pętlę jak poniżej i program wiesza się na tej pętli, tzn wywoływana jest funkcja czyszczenia ale program jej nie opuszcza. Nie wiem co to może być. Kompilowane było z 0 poziomem...
Witam, problem i zarazem pytanie jak w temacie. Napisałem funkcję obsługi 1-wire z wykorzystaniem bibliotek API STM32 do komunikacji z czujnikiem temperatury DS1820. Funkcja wywoływana jest w przerwaniu od timera. Nie było z nią problemów gdy rdzeń STM-a pracował częstotliwością 168 MHz, przy niższych wstępowały błędy komunikacji. Podejrzewałem, że...
Ja póki co zostawiam jak jest ;) Trochę się kręcę wokół tego wszystkiego, bo z nowym toolchainem coś mi nie działa i szukam przyczyny ;) Udało mi się już stary projekt wciągnąć tak, by działało debugowanie, bo projekt jest eclipsowy, ale przy próbie wejścia w Debug Configurations ładnie się IDE wykrzaczało ;) Teraz działa. Czasami dziwnie się zachowuje,...
🔧 Poszukiwany programista C / Python do rozwoju sterownika turbiny wiatrowej 🔧 Cześć! 🚀 Szukam programisty do współpracy przy rozbudowie, optymalizacji i wprowadzaniu innowacji w sterowniku turbiny wiatrowej. 📌 Urządzenie jest już zbudowane i działa, ale chcemy je udoskonalać, poprawiać błędy oraz dodać nowe funkcjonalności. Zakres prac: ✅ Rozbudowa...
Proponuje dodać do ulubionych stron: [url=https://www.st.com/en/microcontroll... A tutaj więcej szczegółów. [url=https://www.st.com/content/st_com/e... [url=https://www.st.com/en/microcontroll...
Posty kolegi technics6 w temacie ARMów i programowania w C radzę ignorować, skoro widzi on jakieś istotne różnice w C i funkcjach standardowych dla PC i C dla mikrokontrolerów Faktem jest, że aby algorytm działał na PC i na mikrokontrolerze tak samo trzeba się trochę postarać i najlepiej zapoznać się z obydwoma platformami. Niemniej jednak, jeśli jest...
Witam, od kiedy zacząłem porządkować kod, korzystając z funkcji mój program zaczął się źle wykonywać. Dotychczas kod był nie wielki więc wszystko robiłem na if'ach, zaczął się rozrastać więc w systicku zostawiłem if'y ale całe obliczenia do wykonania oraz wysyłanie dałem do oddzielnej funkcji (wysyłanie jest też poprzez wywołanie następnej funkcji)....
1. Odpowiedź pytaniem - a dlaczego by nie? Równie dobrze mogę Cię spytać, czemu Twój program składa się z x plików zamiast z jednego i byłoby to nawet lepsze pytanie, bo taki program może być bardziej zoptymalizowany przez kompilator niż coś rozdzielonego na setkę plików (; 2. Jedyne miejsce gdzie kolejność ma znaczenie to sama tablica. W końcu w C...
Zgodnie z konwencją wołania ARM funkcja przy wejściu ma zapamiętać te rejestry spośród rejestrów r4..r8, r10, r11, lr, których używa. Nigdy nie musi zapamiętywać r0..3 ani r12, chyba, że w r0..r3 ma własne argumenty, które muszą przeżyć wywołanie przez nią innej procedury. Jeśli procedura z pustą listą argumentów zapamiętuje r0..r3 przed ich użyciem,...
Całość kodu jest dość spora:) Czekam na flagę na pewno, ale nawet jeżeli nie, to zauważ że pomiędzy wywolaniami odczytu adc są spore odcinki czasu. Ano, zazwyczaj w takich sytuacjach używam volatile, tyle że wtym przypadku optymalizacja jest wyłączona. Program w zasadzie skończony, a zajmuje 20kB ze 128, więc optymalizacji nie właczałem. Dodano po 4...
Widziałem ten watek i ustawiłem wszystko wg podanych wskazówek, za uwarzyłem jeszcze ze ten problem nie występuje wszędzie i na początku funkcji main() można ustawić breakpointa i działa problem zaczyna się przy po wejściu do pętli while albo jakiejś funkcji, dodam ze mam wylaczone optymalizacje kompilatora 3.1.13. (10.9, 15) Zabronione jest publikowanie...
RM0008, strona 294, rysunek 52. Widać tam wyraźnie jaka jest relacja między CNT i CCx. Zawartość rejestrów CCx jest stale porównywana z zawartością CNT i w zależności od wyniku sygnał OCxREF ma wartość 1 lub 0. Dodatkowo, podczas porównania, może zostać wygenerowane zdarzenie CCxI, np. przerwanie, start dla DMA, zdarzenie dla licznika podrzędnego. Bez...
Przygodę z Azure RTOS (dawnej ThreadX) zacząłem częściowo z konieczności dalszego rozwoju mojego projektu, a częściowo za sprawą decyzji STMicroelectronics o zastąpieniu FreeRTOS przez Azure RTOS i szkoleń prowadzonych przez ST, które polecam. Moje pytania w tym temacie dają wyobrażenie o poziomie mojej wiedzy w tej dziedzinie. Jestem na początku drogi....
Jest taki cały pierwszy wiersz zapełniony załączonymi pixelami (0XFF) a drugi jest pusty. Kontrast nie ma tu znaczenia. Kojarzę wzorek. Faktycznie to nie kwestia kontrastu. Wygląda po prostu jakby był nie zainicjowany. Kwestia z wrażliwością na napięcie wygląda mi raczej na jakiś efekt uboczny innej przyczyny. Testowałem kiedyś taki wyświetlacz na...
Każdy z nas widział lub korzystał kiedyś z Arduino. Wszyscy hobbyści bardzo je lubią i nie ma co się dziwić - moduły te bardzo łatwo jest opanować i nawet ktoś, kto nigdy nie miał do czynienia z systemami wbudowanymi, może w chwilę nauczyć się je programować i zbudować w oparciu o Arduino coś na prawdę ciekawego. Ekosystem Arduino pozwala w prosty i...
Zagmatwanie i bledne pisanie tez spowalnia... powiedz mi co sie dzieje przy wywolaniu jakiejs funkcji w C i powrocie z niej ? Jak ich da sie sporo co sie dzieje ? Zerknij od strony tego co masz po kompilacji... Czy nie lepiej jak cos przepisujesz czasem w pamieci uzyc np. DMA skoro je masz :) i tym podobne sprawy.... Dlaczego czasami warto dawac w C...
Po inicjalizacji HAL, dodaj sobie: FLASH->ACR |= FLASH_ACR_PRFTBE; Dziękuję za wskazówkę, jak na razie niestety nie spowodowało to przyspieszenia programu, będę próbował dalej. Dokumentu co sie nazywa reference manual. A optymalizowanie to sie zaczyna od algorytmu a nie opcji kompilatora, ktore sa "wisienka na torcie" Mam prośbę - nie pisz takich...
Mam zainstalowane Eclipse Która wersja? Czy masz zainstalowany GNU ARM Eclipse Plugin? Bez niego ten projekt nie zadziała. Problemów szukaj więc w konfiguracji Eclipse/CodeSourcery/GNUArmEclipsePlugin... Wczytałem ten "template" i się bezproblemowo kompiluje (w konfiguracji Debug). W konfiguracji Release (optymalizacja) występuje błąd: Jeśli podczas...
Czy może mi ktoś podpowiedzieć o co chodzi? Wczoraj w Eclipsie robiłem testy, i nagle dzisiaj już to nie chodzi. Nie zmieniałem nic, uruchomiłem po prostu od nowa Eclipsa. Problem dotyczy zmiennych zadeklarowanych w przerwaniu void USB_LP_CAN1_RX0_IRQHandler (void) { DWORD istr, num, val;....} Które po przypisaniu po chwili znikają i mają wartość optimized...
stm32 optymalizacja stm32 funkcji wklęsły jednej
naprawa szarpaka zmiana dekoder polsat ethernet zrywać połączenie
blaupunkt b32b148t2cshd przekladnik prądowy
Popychacze hydrauliczne i dźwigarki w Renault Laguna II 1.8 16V 2004 Jak zastąpić niedziałający system nawigacji w samochodzie?