Witam, Kiedyś miałem bardzo podobny objaw i okazało się, że jedna zmienna nie była zainicjalizowana, w związku z czym przyjmowała losowe wartości, ktore zmieniały się w zależności od położenia zmiennej w pamięci mikrokontrolera - na skutek dopisywania dalszych częsci programu to miejsce zmieniało się. I raz program działał dobrze, a raz szedł w maliny...
Kod bez optymalizacji, który pokazałeś, jest bardzo "składny" i powiedziałbym nawet, że optymalny przy założeniu braku optymalizacji. Następne też wyglądają dobrze, -Os wręcz śliczny i optymalny. Czego więc się właściwie czepiasz? Swoją drogą, zwykle w GCC używa się -O2 jako opcji dobrej i bezpiecznej - ja tak kompiluję 90% programów (w pozostałych...
Standard C nic nie mówi o kolejności zmiennynch w pamięci. Przyzwoity kompilator i linker będzie rozmieszczał dane w kolejności malejącego rozmiaru, a nieupywane będzei eliminował całkowicie. Chcesz mień znany rozkład danych - użyj struktury - kompilator nie ma prawa jej zoptymalizować, ale będzei stosował wyrównanie naturalne, czyli np. int32_t będzie...
Wywal w jasną cholerę tą bibliotekę! Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __use_two_region_memory ;wlaczamy wszystkie zegary :] ldr r0,= 0x00000557 ;r0: data ldr r1,= 0x40021000 ;r1: base addr: rcc reg ldr r2,= 0x14 ;r2: offset: rcc_ahbenr str r0,[r1,r2] ldr r0,= 0x000059fd ;data ldr r2,=...
Jak się na tym breakpoincie zatrzyma to zobaczysz zmienne (zakładając oczywiście, że są widoczne dla fragmentu kodu w którym jesteś i że nie zostały wycięte przez optymalizację. 4\/3!!
Cześć, czy taka konfiguracja projektu jak na screenie jest optymalna? Korzystam z Keila gdzie ustawiłem dodanie do projektu w zakładce CMSIS Core i w Devices Startup. Używam płytki stm32f303vc Discovery i próbowałem też w czystym projekcie dodać tylko biblioteki core_cm4.h, cmsis_gcc.h i stm32f30x.h ale wyskakiwały mi błędy i nie potrafiłem tego ręcznie...
A jak daję w f_read & przed zmienną to nic nie zmienia? Zastanów się nad tym sam... Funkcji każesz odczytać 480 bajtów. Gdzie ona je niby ma zapisać, skoro podajesz jej adres zmiennej o rozmiarze 2 bajty? To że wpisujesz tam '&' nie sprawia że nagle zmienna uint16_t staje się workiem bez dna... 4\/3!!
Weź zobacz na amazonie np.. Pozycje znam dwie anglojęzyczne. Z serii definitive quide.. I coś o optymalizacji..
Atrybut "packed" - który to jest źródłem Twoich głównych problemów - jest tutaj zbędny, bo zarówno z nim, jak i bez niego będziesz miał wszystko ułożone tak samo.
(at)_lazor_ No niestety w tamtym temacie zaproponowali tylko pobranie "nowej" (ostatnia aktualizacja miała miejsce w 2015 roku) wersji biblioteki - niestety u mnie problemu to nie rozwiązało, nadal ładowane są wszystkie tablice i nagle brakuje 80k pamięci, nawet przy najwyższym poziomie optymalizacji :/
Ja zawsze kasuje bity żądania na koniec przerwania i nigdy nie maiłem takich problemów w STM32, niezależnie od poziomu optymalizacji przerwanie wykonywało się tylko raz.
Na AVR używałem AES z załącznika. Pamiętam, że jakaś z opcji optymalizacji nie działa.
Ps. wyłącz optymalizacje kodu jak możesz
Cześć. Bawię się ostatnio STM32F103, zacząłem od poradnika ( https://obrazki.elektroda.pl/5819782800_... Jak rozumiem jest tutaj za pomocą rozkazu ldr ładowana do rejestru r3 wartość z pod adresu 0x80001d8, i tutaj jest mój problem. W poradniku pod tym adresem (oczywiście adres jest inny, chodzi mi o to że dotyczy tego samego rozkazu)...
No w include mam link do bleeding edge w pathu tak samo więc jak mam dodać te biblioteki W ścieżce toolchaina znajdują się tylko nagłówki i skompilowane pliki. Jak chcesz debuggować biblioteki, to musisz mieć na dysku ŹRÓDŁA tychże bibliotek - gcc i newlib. Optymalizacja z tego co rozumiem jest wyłączona Ponownie więc pytam na jakiej podstawie twierdzisz,...
Witam, Jesli korzystasz z MPLABX, to opis wszystkich pragma config jest w...helpie :-) Help>c32 toolchain>C32 configuration settings.... Tez to niedawno przerabiałem :-))) Sporo informacji mozna wyciagnać z forum Microchipa - tylko kwestia zadania odp. pytania. Jak dla mnie to wlasnie PIC32 jest przyjazniejszy dla uzytkownika niz np. STM32 (własnie...
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ę...
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!!
Nie, bo sprawdzałem na wszystkie sposoby i nic to nie daje. Tak BTW to okazuje się że wyłączenie optymalizacji kodu w ustawieniach powoduje że całość w końcu zaczyna się kompilować tak jak powinna. Pomimo tego jestem ciekaw jak to trzeba zrobić aby przy włączonej optymalizacji całość działała...
Natomiast zdaje mi się że płytki z XMega są tak popularna jak Maple z ARM-ami - czyli jakiś margines. To kolega niech porówna ile jest tutków z STM32F103, a ile z Xmega, albo PIC. Jeszcze ewentualnie Teensy (kinetis) i różnorakie Feather są popularne, ale nie w PL. W Polsce to akurat albo klasyczne arduino na AVR, albo nadal same AVR w DIP. Choć i...
(at)oscil1 A powiedz mi jeszcze, czy włączenie optymalizacji jakoś wpłynie na te opóźnienia generowane przez asm volatile ("add r0,r0,1":::"memory");?
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ć,...
przy debugowaniu, warto zmniejszyć poziom optymalizacji, nawet do -O0 Ogólnie doczytałem, że masz rację. (ciekawy artykuł znalazłem np. tu: Ciekawie się zapowiada. Korzystam z Atollic TrueStudio (oparty na Eclipse). Jak zmniejszyć poziom optymalizacji? Bo chyba się jeszcze w tym gubię ;) Właściwości Projektu->Settings->Tool Settings->MCU GCC Compiler->Optimization->Optimization...
Witam, Czy jest jakaś różnica w objętości lub prędkości wykonywania kodu gdy mam możliwość uruchomienia uC w trybie Debugra czy nie? Na niektórych maszynach jest np tryb realase oraz debug, kompilacja w tym pierwszym powoduje krótszy kod wynikowy (oraz szybsze wykonywanie się kodu?). Czy jeśli pisze jakiś programik, a zależy mi na szybkości wykonywania...
Stawiam na różne adresy kodu w pamięci i wynikające z nich różnice w działaniu "akceleratora" dostępu do Flash. Puść MCU na 8 MHz i różnice (raczej) znikną. A może po prostu masz różnie ustawioną optymalizację w obu projektach?
To może tak będzie ok: #define data ((int)(&RCC->APB2ENR&... * 2) Innym rozwiązaniem może być użycie gcc do kompilacji tego pliku, a g++ do pozostałych plików.
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.
Przetestowałem u siebie 1. Kod oparty na przykładzie dla STM32. 2. Optymalizację ustawiłem na 0, wyrzucanie nieużywanych zmiennych wyłączyłem - tak dla przykładu, bo zmiennych nigdzie nie wykorzystuje i nie chce mi się kombinować... 3. Do skryptu linkera dodałem: ram2 (rwx) : org = 0x20000000 + 18k,len = 2k ... .data2 : { . = ALIGN(4);...
Udało mi się odpalić debugowanie przez st linka. Robiłem to wg. tego poradnika: [url=http://www.chibios.org/dokuwiki/dok... No ale okazało się, że niepotrzebnie przesiadałem się na eclipse'a ponieważ tak jak nie działała mi optymalizacja na truestudio tak też jest tutaj. :/.
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...
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...
Czy jest to w ogóle możliwe gdy napisze się ją w assemblerze? Aktualnie zajmuje ona ok. 15ms. O ile może się skrócić? Jeśli dobrze operujesz assmeblerem, to pewnie się trochę skróci. Generalnie sprawa wygląda wg mnie tak, że można napisać jeden z 4 kodów: - kiepski kod w C, - kiepski kod w assemblerze, - dobry kod w C, - dobry kod w assemblerze. Porównując...
Wreszcie udało się skonfigurować to wszystko i działa. Projekt kompiluje się poprawnie. Jednak jak wrzucę do projektu bibliotekę standardową od STM to kompilują mi się wszystkie C w obrębie projektu. Co gorsza nie istnieje optymalizacja na poziomie linkera i wszystkie punkcje nawet te nie wywołane lecą do pliku wynikowego przez co staje się ogromny....
Niegdyś w Nowym Elektroniku był falownik dla silnika jednofazowego na 4 MOSFETACH zdaje się IRF840 w mostku H. Ale silnik zasilany był i tak prostokątem, niby to działało, no ale... Firmą która produkuje falowniki 1faz/1faz jest Invertek. Modele Optidrive E2 przeznaczone są do silników jednofazowych z kondensatorem pracy (PSC) i uzwojeniem pomocniczym...
Zdaje się, że teraz mamy nowy swiatowy trend pt. "Po co się męczyć z jakąkolwiek optymalizacją kodu, jak wszystkie nasze niedbałości załatwi rosnąca moc obliczeniowa procesorów". Sooo, SPL is cool ;-) A niektórzy się denerwują, ze taki Microchip nie zezwala w swoim (nie do końca) darmowym GCC ustawienie poziomu optymalizacji większej niż -o1 :D
Kod mający kilkadziesiąt tysięcy linijek kodu :) Z pewnością ktoś chciałby go sprawdzać. Kod jest z pewnością dobry, bo kod działa jeśli ma domyślne mapowanie pamięci. Rozwiązałem problem - zmniejszyłem poziom optymalizacji obszarów odpowiedzialnych za USB...i działa.
Opcja optymalizacji jest. Domyślnie wyłączona ze względu na to że wydłuża to czas kompilacji. Chwilowo mam inne priorytety finansowe, ale kiedyś kupię od Pana Leona jedną płyteczkę z Xmegą i Wam pokaże jak się na nich jeździ pod Bascom`em :D ..a może i C bo z braku Xmegi bawię się STM32 w Keil
Witam. Mam następujący problem. mam zestaw ewaluacyjny z procesorem Stm32F103VC i wyświetlaczem opartym na SSD1289. Do obsługi wyświetlacza używam bibliotek GLCD od producenta zestawu. Wszystko było by ok gdyby nie jeden dziwny problem. mianowicie taka funkcja chodzi bez problemu: 3 ][240]" gdy to zrobię nie działają żadne funkcje . Ani funkcja malująca...
Nie chcę za dużo informacji dawać, żeby ktoś nie skojarzył faktów :D Mikrokontrolery to STM32, głównie U5, kwestia projektu, bo zdarzają się też projekty na C0. Szybkie magistrale (tylko jeden projekt kojarzę), radiówka, układy pomiarowe, sporo układów bateryjnych, więc mikro moce i optymalizacja prądu. Standardy światowe, niektóre urządzenia idą do...
warningi znikają po usunięciu volatile sprzed deklaracji zmiennej buf1, ale nic się nie pojawia w terminalu Może faktycznie przedobrzyłem z tym volatile ale po jego osunięciu program działa jak powinien. Co prawda było u mnie jakieś potknięcie z działaniem, gdy go pierwszy raz usunąłem ale nie jestem pewien czy to nie przypadek (kabelki, ustawienie...
Witam, Wydaje mi się, ze miałem podobny problem z najnowszym toolchainem i generował podobny błąd przy optymalizacji -Os. W każdym bądz razie używam obecnie tego najnowszego toolchaina i kompiluje się wszystko ok, więc jakoś musiałem rozwiazać ten problem ale nie pamiętam jak :) Nie jest to raczej wina systemu operacyjnego, u mnie jest Windows 7 32-bit....
Cześć wszystkim. Poradnik choć napisany w wielu miejscach nietechnicznym językiem, jednak wart uwagi. Autor zawarł w nim sporo ciekawych informacji na temat programowania STM32. Ogólnie w sprzedaży ubogo w literaturę o stm32, jest w zasadzie pozycja oparta o przestarzałe standard peripheral library, a zagłębiających się programowanie "po rejestrach"...
Czy jest sens dysponując 32bitową maszyną kopiować dane bajt po bajcie? Jakby programiści z Id Software tak myśleli, to Q1 by sie przycinał nawet na gigahertzowych procesorach... Przecież pisałem na początku, aby odpowiednim atrybutem wyrównywać bajtowe tablice do 32bitów. Jeśli ta operacja którą wykonuje autor będzie się odbywać chociażby 1k razy na...
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),...
Były dobrze skonfigurowane endpointy, działa tak jak miałem ustawione czyli wysyłam na 81. Nie zmieniłem ich. Pobawiłem się trochę optymalizacją i jest 770KBps. Jeszcze się kiedyś pobawię to może będzie więcej.
Zobacz kod asm - po optymalizacji została tylko pusta pętla nieskończona. Do debugowania ustaw optymalizację na -Og lub -O0 .
Te sekcje nie zajmują pamięci, bo w finalnym "obrazie" ich po prostu nie ma (; Nawet gdyby coś tam było, to --gc-sections i tak usunie te sekcje, bo przecież kod w żaden sposób się do nich nie odnosi, więc z punktu widzenia optymalizacji cokolwiek w nich jest, jest "dead". 4\/3!!
No właśnie tak myślałem, że im bardziej rozbudowany program (ma więcej co robić), to trzeba zwiększać częstotliwość przełączania kontekstu, więc i narzut rośnie. No, ale skoro nawet przy 1000 nie jest duży, to OK :-) Od jakiegoś czasu przymierzam się do przejścia na jakiś RTOS, bo te moje maszyny stanów działają, owszem, ale im więcej zadań, tym bardziej...
Jeśli pisałeś w C to jak wyglądała optymalizacja pamięci programu? Chodzi mi tu głównie o ograniczanie wielkości bibliotek standardowych, pisanie skryptu linkera itp. Znasz jakieś ciekawe sposoby albo możesz podrzucić parę linków czy tytuł książki?
Moim zdaniem nauka sama w sobie assemblera nie ma sensu, w czystym assemblerze już raczej nikt nie pisze, co innego intrinsics które są namiastką assemblera i bez nich nie da się wyciągnąć pełnych możliwości niektórych architektur (np cortexy m3 w górę). Inna sprawa analiza assemblera, to już warto znać gdyż kompilator (zwłaszcza przy optymalizacji)...
Wersja lite kompiluje z optymalizacją tylko gdy przestawisz ją z trybu debug na release, lecz wtedy nie dołącza żadnych danych do debugu - porażka.
[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ę...
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.
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...
Stary kompilator, nowy sposób podawania argumentów. W GCC, od wersji chyba 4.8, można właczyć optymalizację "przyjazną" dla debugingu (czyli "-Og"). W starszych wersjach GCC optymalizacja (parametr -O) przyjmuje wartości od 0 do 3 i dodatkowo s jak size . Makefile ręcznie pisany, czy generowany automatycznie?
Pytania, jakie postawiłem Autorowi wątku nie miały charakteru testowego, a miały skierować jego myślenie na pewne tory. Jak widać jak zwykle mi się nie udało. Autorze, bez podjęcia prób odpowiedzi na te pytania nie będziesz w stanie zaprojektować nic sensownego. Piotruś: gdyby procesor miał priorytet, żadna transmisja DMA nie doszłaby do skutku. ;)...
Kompilowane było z 0 poziomem optymalizacji więc nie powinno być nic po drodze upraszczane w pętli. Kolejny ciekawy przypadek optymalizacji O0 która leczy wszystkie rany. Spi korzysta z rejestrów które są volatile więc nie ma mowy o optymalizacji w takiej pętli. Zapewne jest źle skonfigurowana a Ty dałeś fragment kodu z którego nic nie wynika. I pamiętaj...
Cześć. Piszę sobie program na STM32 w środowisku Keil uVision. Proszę powiedzcie mi jak zrozumieć generowane liczby mówiące o zajętości (wielkości) programu w pamięci Flash oraz ile pamięci RAM zajmuje program? W Keil nie ma optymalizacji kodu znanego z WinAVR -Os. Co odpowiada temu poziomowi w Keilu lub na który poziom bezpiecznie jest ustawić bo są...
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...
Wtrącę swoje 2 gr. Używam STM32 w zasadzie od momentu jak pojawiły się na rynku w PL. Firmware piszę zawsze sam, bez SPL i bez HAL. Nigdy w życiu nie musiałem robić żadnego obejścia ze względu na jakieś problemy opisane w erracie. Nie mówię oczywiście o problemach typu "funkcjonalność X w układzie peryferyjnym Y nie działa i koniec", ale właśnie o jakichś...
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...
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.
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...
Proszę bardzo: Program jest taki prosty testowy: #include "stm32f1xx_hal.h" int main(void) { HAL_Init(); while (1) { }; } A oto Build Log: Komunikaty występują przy kompilacji plików: - stm32f1xx_hal.c - stm32f1xx_hal_cortex.c - stm32f1xx_hal_flash.c - stm32f1xx_hal_gpio.c - stm32f1xx_hal_rcc.c ----------------Make...
Nie chodzi o tuningowanie coocoxa tylko o ustawienia opcji kompilacji i optymalizacji. Tyle, że oba kompilatory sprawdzałem na tych samych programach opcjach - z wyłączoną optymalizacją. Jak znajdę trochę czasu to spróbuję Eclipse dla ARM. Póki co ładnie udało mi się zainstalować tylko Eclipse dla AVR'ów.
Witam Jeśli nie zależy Ci na żadnej optymalizacji, to porostu generuj wartość sinusa on-line w jakimś przerwaniu, skaluj jego wartość do wartości wypełnienia i masz już 3 fazowy PWM.
Jeśli kod skompilowałeś z optymalizacją i wiesz, że akurat tam wchodzi bo podglądasz krokowo JTAGiem, to wcale tak nie musi być? Instrukcje z bloku IT (Cortex-owy "if") jeśli warunek nie jest spełniony są niby wykonywane - PC przelatuje przez te adresy - ale faktycznie są realizowane NOPy. Jeśli to jest ten przypadek, to wyłącz optymalizację i/lub ustaw...
Rzeczony kontekst dotyczył obliczeń. Co część argumentów bierze w łeb. A poza tym np. latency to nadrabia w 4 cyklach. Ile mają twoje przerwania? Bo moje obliczenia często mają jednak więcej niż 16 bit Oczywiście możemy się przerzucać fjuczerami. Ale to bez sensu. Przecież się zgadzmy, że dsPIC ma lepsze peryferia, a CM3 jest szybszy. O ile i co zaważy...
Tak swoją drogą to te kombinacje są nieco błędne - jeśli ilość danych do zapisania nie jest podzielna przez 4, to wcale nie można sobie przeczytać "poza" koniec tablicy - undefined behavior. Nie mówiąc już o tym, że zasadniczo rzutowanie danych typu uint8_t na uint32_t bez zapewnienia w jakiś sposób wyrównania tych pierwszych jest również błędne (na...
Witam, pętla może być taka: while(1){ GPIOB_BSRR = 0x0000FFFF; GPIOB_BRR = 0x0000FFFF; } Czy ktoś z was potrafi zrobić to szybciej? oznaczało by, że robię coś nie tak... Taka pętla rozwija się bez optymalizacji na taki kod asm: GPIOB->BSRR = 0x0000FFFF; movw r3, #3072; 0xc00 movt r3, #16385; 0x4001 movw r2, #65535; 0xffff str r2,...
🔧 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...
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,...
gpio_pin_cfg(GPIOC,11,GPIO_IN_PULL_UP); // miso MISO na 99% też musi być jako AF6_PP Dodatkowo Twój proces transmisji jest nieco dziwny... Zrób tak: 1. Ustaw CS w stan niski 2. Poczekaj aż flaga TXE będzie równa 1 3. Zapisz coś do rejestru DR 4. Poczekaj aż flaga RXNE będzie równa 1 5. Odczytaj coś rejestru DR 6. Poczekaj aż flaga BSY będzie równa...
Nic nie zmieniałem od tego czasu. Jakieś tam pierdółki. Ale na 100% to byłą wina CMSISa. Wcześniej Hard fault latał na prawo i lewo. Od czasu zmiany na nową wersję nie było już żadnego problemu. A udało mi się uruchomić ADC i DAC'a od tego czasu. Wcześniej dla O0 nie było błędu kompilacji natomiast dla O1 i O2 były. Przeczytaj wcześniejsze posty tam...
To nie mikrokontroler "marnuje pamięć", a źle napisana biblioteka. Kod na uC 32-bitowy na ogół nie jest dłuższy niż odpowiadający mu kod na uC 8-bitowy, bo to samo da się zrobić mniejszą liczbą operacji. Za jakość bebechów biblioteki odpowiadają jej autorzy. Projekty, które na STM32 robią dużo więcej, niż da się zrobić na śrenim ATmega, na ogół zajmują...
o co chodzi z tą optymalizacją? Jeśli pętla zostanie wstawiona do kodu ale w środku nic nie będzie się działo, czyli pętla będzie iteracyjnie się zwiększała bez efektu to zostanie pominięta? Tak się zdarza. Można dodać asemblerowe NOP do środka, lub zwiększać zmienna typu volatile.
Machanie nogą oczywiście zajmuje czas, ale tutaj mamy przypadek czasów liczonych w dziesiątkach milisekund, czyli wieczność, więc ułamki mikrosekundy potrzebne na machnięcie nie grają tutaj akurat roli. Jeśli CMP wykonuje się w 1 takcie to i tak chyba powinna być różnica w czasie wykonania kodu w którym ten CMP jest i w którym go nie ma.
...a potem spróbuj to samo zrobić z plikiem lst. może jak ktoś w pamięci umie w hex dodawać skoki to ok Ale to nie jest tak. Na listingu skoki są dobrze zaznaczone, bądź przez etykiety tymczasowe, bądź nawet przez adres względny, ale dla każdej instrukcji adres względny jest podany. Tylko tak jak napisał octest1, dla ARM, przy obecnym zaawansowaniu...
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...
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...
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...
Podpowiem, że nie będę miał możliwości czytania 200 stron dokumentacji PDF To nie jest prosty AVR. Podstawowy dokument (Reference Manual) ma nie 200, a ponad 3 500 stron (ale szczęśliwie nie trzeba czytac "od deski do deski"). Do tego, jeśli ktoś chce poznać lepiej rdzenie i wbudowane w rdzeń peryferia, to dochodzą 2x Programming Manual po ok. 250...
Typy takie jak uint32_t wymyślono właśnie po to, żeby programista nie musiał się zastanawiać nad długością typu int w danym środowisku. I właściwie odkąd je wymyślono, należy je stosować, zwłaszcza w programwoaniu mikrokontroelrów. Od tej reguły jest tylko jeden wyjątek: jeśli piszemy kod, który ma działać na procesorach o różnych długściach słowa,...
Ta funkcja send receive to tez jakas perwersja. Musisz cos wyslac aby cokolwiek odebrac. (no chyba ze jest to jakies echo) Tak właśnie działa SPI. Co do oryginalnego problemu, to ten test jest bezsensu jeśli włączona jest jakakolwiek optymalizacja (zmienna "x" zostanie najprawdopodobniej wywalona).
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...
Witam, korzystam z Keil uvision 4, optymalizacja - O3 - optimize for time. Wysyłam dane do przetwornika DAC AD5724, ale przy tym poziomie optymalizacji krzaczy mi się jeden kanał, przy zerowym poziomie optymalizacji wszystko działa poprawnie. Pomyślałem żeby wstawić przed sprawdzaniem flag zajętości SPI rozkazy nop. W pliku core_cm3.h znalazłem, makro...
(at)BlueDraco idąc tymi kategoriami to wróćmy do asemblera. Poza tym jeżeli kod jest pisany zgodnie ze sztuką to mikrooptymalizacje na starcie mają sens? Imho nie. A kod czytam często bo pracuję bardziej przy utrzymaniu starego kodu i błogosławię naszych devów, że pisali czytelnie. Co nie znaczy, że uważam SPL za coś dobrego, można pisać źle i rozwlekle...
Cześć. Może mi pomożecie. Wykorzystując Keila, STM32 oraz MPL115A1 (z SPI) chciałem zobaczyć pracę takiego czujnika a zawłaszcza chodziło mi o pomiar ciśnienie. Jako przykładowy kod zastosowałem opisany w EP 01/2012 na stronie 76 opis użycia czujnika. Nie używa on obliczeń zmienno-przecinkowych zresztą jest on też w ostatniej książce BTC o STM32. Ale...
Jeśli program działa, a tylko po zmianie kompilatora już przestaje, to problem leży właśnie gdzieś po tej stronie. Nie do końca poprawne rozumowanie. Implikacja działa tylko w jedną stronę. Z poprawności działania w określonych warunkach nie wynika poprawność programu. Program może być niepoprawny i działać, bo np. pierwszy kompilator nie dokonuje...
Cześć Podejmę się zleceń typu fixed-price z dziedzin takich jak: - pisanie aplikacji na PC wszelkiej maści (bez grafiki i GUI) - sterowniki urządzeń np FPGA PCI - emulacja urządzeń na QEMU - projekty na uC ARM z rodziny Cortex: doświadczenie w STM32 i NRF52 - optymalizacja niskopoziomowa - wielowątkość i SIMD (SSE/AVX) - testy jednostkowe i funkcjonalne...
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...
ARM®v7-M Architecture Reference Manual, rozdział B1.5.7 Stack alignment on exception entry. Lepiej? Poprawiłem mój post w czasie, kiedy Ty pisałeś. Atrybut __interrupt nie jest ignorowany, ale znaczy on tyle, że procedura przy wejściu programowo wyrównuje stos. Moim zdaniem nie znaczy nic więcej, bo nie ma takiej potrzeby. Nie ma żadnej "optymalizacji...
Optymalizacja na 0, czyli wyłączona. W takim razie najprawdopodobniej tak jak poprzednicy wspominali kwestia związana z debuggerem.
Przyjrzyj się ciut dokładniej temu programowi. To nie te instrukcje, które pokazałeś, robią to, o co Ci chodzi. Jeśli będziesz kolejno wykonywał kilka operacji na porcie - kod będzie krótszy. Pamiętaj też o włączeniu optymalizacji, przynajmniej -O2. Przed dostępem do rejestru trzeba załadować jego adres - zwykle robi to instrukcja LDR z adresowaniem...
Ok, dzięki za wskazówki. Nie chce mi się układać kodu bo to i tak zupełnie przebudować muszę. Wyślę taką kaszanę jaką mam ale działającą: FLASH_Unlock(); //printf("\n\rSend the file\n\r"); /* Start address for flash programming */ sprintf(RxBuffer, "Przykladowy string"); FlashAddress = 0x08040000; if (FLASH_ErasePage(FlashAddress...
Jeżeli mam w projekcie ustawiony procesor STM32F100RB, to chyba kompilator powinien wiedzieć jakie pliki bin dołączyć. Zainstalowałem wersję 1.2 i co ciekawe z tego samego projektu źródłowego generuje sporo większe pliki, przy tych samych ustaiweniach optymalizacji itp. niestety, nie obsługuje ST-Link i nie moge zaprogramowac procesora. Jakim programem...
Nie bardzo rozumiem, w którym miejscu? W swoim kodzie. Przed pierwszym transferem TXE powinno być 1, RXNE powinno być 0. Poza tym każde podniesienie CS(nSEL) powinno resetować SPI. Ale nie mówimy o RFM tylko o STM32 - tam każda manipulacja CSem nie ma żadnego znaczenia, bo sterujesz nim programowo... Może coś nie tak z tym SPI. Przy innych konfiguracjach...
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...
Keil wygenerował identyczny kod dla obu przypadków (wariant po optymalizacji) i oczywiście w żadnym z przypadków nie użył instrukcji "Exclusive OR" tylko "MOVE NOT". Bez optymalizacji pojawiła się jedna instrukcja więcej. W sumie nie ma o czym dyskutować. Nie mniej stare przyzwyczajenia pozostają do końca życia. I tu okazało się, że zaawansowanie procesora...
Przykłady często pokazują "jak" używać API, ale nie "kiedy"; w dodatku są tak proste (jak to przykłady) że użycie danego API nie jest potrzebne. Pule to zwyczajne alokatory pamięci. Używa się ich gdy planuje się alokację oraz zwalnianie pamięci. Dwa trochę sztuczne przykłady: - aplikacja z wątkami tworzonymi przy starcie i nie kończącymi się - pamięć...
stm32 optymalizacja jednej funkcji optymalizacja laptop optymalizacja komputer
szybkozłączka pneumatyczna sterownik lm339 pendrive zniknął
galmet wyswietlacz galmet wyswietlacz
Lokalizacja czujnika ciśnienia powietrza w MAN TGL Szum w głośnikach po podłączeniu radia w VW Lupo 1.0