(at)Piotrus_999 To nie Ty czasem stosujesz volatile dla tablic struktur? Chciałbym zaznaczyć, że taki zabieg również generuje średnio wydajny program. Bo niby jaką wartość merytoryczną niesie wypowiedź typu: No właśnie to było dziwne bo w strukturach packed nie było :). A kto włącza to globalnie? Pewnie w jakimś pluginie do eclipsa (at)qazpylades ładnie...
Po raz trzeci pytam, dlaczego przy ustawionej ZEROWEJ optymalizacji oczekujesz żeby kompilator coś zoptymalizował. Wychodzi na to, że próbowałeś na różnych poziomach optymalizacji i na zerowym wywołuje funkcję (tak właśnie jest u mnie i tak ma być), natomiast na innych wywala cały ten kod jako zbędny (również napisałem co z tym zrobić) - wniosek - "kompilator...
CMSIS jest dla każdego vendora kompatybilny. Na płytkach evaluacyjnych tak samo jak w przypadku st i ich stlinka jest J-Link. Wiele rzeczy narzuca ARM vendorom, np przestrzenie adresowe, vendor może tylko zdecydować ile tego tam upcha. Tak samo pisanie w C, jak klepie kod pod arm-none-eabi-gcc to vendor mnie mało interesuje, ba mogę na tym samym kompilatorze...
Rdzenie Cortex posługują się zestawem instrukcji Thumb2 i zapewne to jest przyczyną tego błędu. Nigdy tego nie robiłem, ale z tego co widzę kompilator GCC, ma trochę mniej ustawień włączanych za pomocą checkboxów. Większość zapewne musisz dopisać sam. Trzeba będzie chyba pogrzebać na necie jak to ludzie konfigurują i odpalają. Masz w opcjach kompilatora...
Problem rozwiązany. W przypadku narzędzia YAGARTO trzeba użyć opcji -mfpu=fpa (bez -msoft-float). Wtedy działa.
Pytanie 1: http://infocenter.arm.com/help/index.jsp... CORTEX nie koniecznie wykonuje czynności w spodziewanej kolejności czy w spodziewany sposób, przekonałem się o tym dobitnie po kilku dniach nieustającej próby napisania tego w c/c++ bez podglądu na wygenerowany kod (tzn algorytm działał jednak występowały jittery...
Nie prościej tak nie kombinować? Funkcje zdefiniowane wewnątrz definicji klasy (zwykle w nagłówku) są domyślnie traktowane jako z atrybutem "inline" i po co kombinować więcej? A już jakieś atrybuty "always_inline", to prosta droga to zabawy w assembler++, bo skoro kompilator uznał, że inline'owanie nie ma sensu, to zapewne tak właśnie jest.
Trzeba właczyć w opcjach kompilatora długie skoki. Ewentualnie trzeba skakać do funkcji w RAM przez wskaźnik, bo to zawsze wykorzystuje długie skoki. P.S. Na Cortex-M3 funkcje z RAM działają WOLNIEJ niż z flasha, to nie ARM7. 4\/3!!
Jeśli używasz kompilatora w wersji 5: --cpu=cortex-m4 --fpu=fpv4-sp Jeśli używasz kompilatora w wersji 6: -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffast-math IDE po wyklikaniu odpowiednich opcji samo powinno ustawić właściwe flagi kompilacji.
wstawki w asm potrafię robić - tyle jest w startup'ie. Napisałem funkcję w asm i ją skompilowałem. Mam plik .o i przygotowany .h. Teraz tylko stoję przed problemem jak połączyć przekazanie argumentów kodu w C. Jak nikt nie wie, to chyba zrobię to na piechotę. Zerknę do .lst kilku funkcji i wydedukuję jak to kompilator robi.
najlepiej poznac obydwa Obawiam się, że nie wystarczy mi zasobów czasowych, choć naprawdę chciałbym... Do MSP430 mam już nawet zestaw eZ430-RF2500, znalazłem kilka różnych IDE, kompilatorów. Do cortex-M3 mam procka stm32f103vb na uniwersalnej płytce, jakieś narzędzia. Do obu dużo dokumentacji - podstawa ;) BTW: jakie kompilatory/IDE, według Was były...
W jednym z nich nie ma makefile'a... Swoją drogą ta opcja "cross GCC" jak dla mnie mało sensowna - tyle rzeczy trzeba poustawiać w opcjach projektu że masakra... I nie są to opcje typu cortex czy arm7 tylko opcje kompilatorów w komendzie itd. Chyba że coś się już zmieniło [; 4\/3!!
Biblioteki czy plików nagłówkowych? Jak to drugie to: - www.st.com - Products → Microcontrollers → STM32 32-bit ARM Cortex MCUS → STM32F4 Series → STM32F407 - (po lewo) Software → STM32Cube -> (w nowo otwartym oknie) STM32CubeF4 - (na samym dole) Get Software → Download - w rozpakowanym archiwum: Drivers → CMSIS...
Jakoś nie bardzo łapie co trzeba ściągnąć z tej stronki, aby mieć kompletne środowisko dla STM32 (IDE, GCC - wersja obsługująca cortex'y)... Czy ten "plugin do wgrywania" to FlashBash? Zdaje się, ze obsługuje tylko rodzinę ST7... Można podłączyć zewnętrzny kompilator?
(at)urgon to dam tobie podpowiedź. To że napiszesz kod w c/cpp na cortex-m4, który ma delikatne zabarwienie DSP nie oznacza że kompilator użyje instrukcji dsp. Jeśli napiszesz 0.34 nie oznacza że używasz float To że układ ma fpu, nie oznacza że napisanie kodu gdzie używasz float odpala użycie fpu
(at)oscil, Jako że asembler to mój pierwszy 'język' od którego zaczęła się moja przygoda, to taki sposób dla łatwiej zrozumieć. Kod asm wklejany w kodzie programu c nie jest uniwersalny, kompilatory c mają ińne skladnie
Układ debuguje z poziomem -O0 (w keilu) Debugowanie na poziomie O0 (wyłączona optymalizacja) może dawać fałszywe przekonanie, że aplikacja działą ok. Ponieważ przy O0 nie ma żadnej optymalizacji, więc każde odwołanie do zmiennej powoduje jej przeładowanie z pamięci. W efekcie jeśli masz jakiś problem typu brak volatile, to na O0 aplikacja będzie działać...
Powiem Ci szczerze że myślałem iż po patach zmieniłeś toolchain, ale chyba sprawdzone tematy sa najlepsze (bo znam Twój wpis o tym toolchainie) A ten VS Code to aż muszę sprawdzić, ciekawe czy by mi to zadziałało. A weisz może jak to w ogóle wygląda tzn. rozumiem że wtyczka c/c++ jest do składni języka, a cortex-debug do debudowania, ale jak z wyborem...
Do włączenia FPU wystarczy: SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); Kompilator: -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math
UART0Buffer jest zle zadeklarowany bo nie powinno byc spacji miedzy nazwa a nawiasami kwadratowymi, co do reszty to podajesz jako argumenty unsigned char* podczas gdy funkcja oczekuje char* i dlatego kompilator sie drze.
Jej, ślepy jestem. Wyrzuć atrybut static z deklaracji SysTick_Handler !!! Ze static jej nazwa staje się prywatna dla modułu i niewidoczna dla linkera. Dodano po 15 Freddi: ty błądzisz :) Kompilator w obsłudze przerwania musi zapamiętać rejestry grupy saved, bo rejestry grupy temp są zapamiętywane automatycznie przez procesor. Tak samo każda inna procedura...
Jaki jest poprawny opis działania jaki ma spełniać ta funkcja ? Ta ? Link Czy ta ? Link Wg manuala dostarczonego z kompilatorem wynika że funkcja zwraca wartość 0 lub - 1 w zależności czy działanie się powiodło czy nie. Ale działanie innych funkcji wskazuje na wersję pierwszą , czyli zwrot wartości indeksu w strumieniu. Osobiście nie widzę sprzeczności...
To może zacznijmy od początku. Od samych mikrokontrolerów. Nieco wybiórczo i subiektywnie. 1. MCS-51 - Wielu z nas rozpoczynało od tego w latach '80 ubiegłego wieku. Prosta konstrukcja, niewiele peryferii: GPIO, liczniki, UART. Programowanie praktycznie tylko w kodzie maszynowym, potem ewentualnie w języku C dzięki raczkującemu jeszcze SDCC. Firma Atmel...
Czy do tych Cortex-M0 i Cortex-M4F jest jakieś darmowe pełne środowisko programistyczne z darmowym pełnym kompilatorem? Jeśli nie, to jako amator lub firma z małym budżetem wybieram AVR lub ARM7,ARM9, AVR32 w zależności od ich możliwości, łatwości, umiejętności programowania i zależności od zastosowania.
Opisy mikrokontrolerów z rdzeniami ARM są na ogół całkiem przyzwoite, tylko szukaj USER MANUAL albo REFERENCE MANUAL, a nie Data Sheet (chyba, że w TI). Procesory ARM programuje się niemal wyłącznie w C, a ARM Cortex daje się programować w c bez ani jednej instrukcji asemblerowej. Praktycznie nie ma potrzeby używania asemblera, zresztą kompilator C...
Wystarczy dołożyć funkcję, która zwróci wartość zmiennej. Tak jest zrobione - ta funkcja też nie ma dostępu do tej zmiennej, bo jest wywoływana przez wątek który ma taką a nie inną konfigurację MPU. Ja nie mówię o "dostępie" w znaczeniu widoczności zmiennej w kompilatorze, tylko o prawach dostępu w Memory Protection Unit. To jest specjalny port FreeRTOSa...
ARM7, Cortex-M3 to - powiedzmy - "handlowe nazwy" architektur, odpowiednio ARMv4 i ARMv7-M. Oczywiście nowsza jest ARMv7 czyli własnie Cortex. ARM7 jest już nieco przestarzały, a układ LPC2106 to w ogóle antyk - NXP od czasu tego układu wypuściło bardzo wiele fajnych układów z tym rdzeniem, dokładnie chodzi o rodziny LPC23xx i LPC24xx - LPC2106 to chyba...
Witam, Mam lamerskie pytanie. Zaczynam przygode z ARM Cortex-M3. Programuje plytke ewaluacyjna za pomoca JTAG'a. Uzywam kompilatora CrossStudio. Po zaladowaniu programu do pamieci flash program sie uruchamia, ale po resecie nic nie dziala. Co mam zrobic aby program uruchamial sie rowniez po resecie. Nie moge nigdzie znalezc tej informacji.
Łakomy kąsek dla tych, co wolą Delphi od C: dostępny jest kompilator Free Pascal dla ARM, w tym Cortex-M3. Jest jeszcze dość niestabilny, ma wciąż problemy z optymalizacją, wiele bibliotek trzeba pisać od podstaw, oficjalne wsparcie jest tylko dla kilku mikrokontrolerów. Kompilator da się zintegrować z Lazarusem, od pewnego czasu używam go z powodzeniem...
Czy MCUXpresso SDK może zostać użyty przez programistę do budowania programów, które będą uruchamiane na płytce Adafruit Metro M7? Jaki kompilator C/C++ jest wymagane przez to SDK? Tak, MCUXpresso SDK może zostać użyty przez programistę do budowania programów, które będą uruchamiane na płytce Adafruit Metro M7. Jednakże, aby poprawnie skompilować kod...
Tak się składa, że wiem, że R0 jest wolny a każdy inny zajęty. Dziś jest wolny, jutro jest zajęty - obyś się nie przejechał. No i coś takiego nie działa, bo zmienna StackPointer Działa - potem R4 będzie przepisane do R0 żeby prawidłowo zwrócić wynik. jest ładowana do R4, który to ma być zrzucony instrukcją STMDB Wstawki assemblerowe są dużo bardziej...
Chcesz powiedzieć, że nie działa nawet gdy są sprawdzane dwie flagi? Patrzyłem jak to mam zrobione u siebie. Zawsze sprawdzam dwa warunki i na TX i na RX. Do tego mam odpalony SPI na karcie SD zapis/odczyt z FATa z max prędkością SPI jak i z preskalerem /256. Oba działają. Spróbuj może innym kompilatorem to odpalić. A tak btw korzystasz z EVALB?
Głównie chodzi o wygodę pracy, dodatkowe biblioteki, symulatory, debugery i wsparcie dla nowych rdzeni np. cortex. Czy warto inwestować - głównym kryterium powinna być ilość i złożoność projektów.
Czemu akurat skryptowy ? Jak chcesz miec pelne wsparcie to skompiluj sobie kompilator pythona pod cm4... ale nie wiem jaki w tym sens.
Można. instrukcje są te same, różnice polegają na budowie jednostki wykonawczej i paru miłych rejestrach sterujących, ale dla kompilatora M0 i M0+ to dokładniuśko to samo.
Trzeba zrobić tak, żeby kompilator nie wypisywał ostrzeżeń. Jakiego typu jest DMA1_Channel1->CPAR?
1. GNU ARM to najzwyklejsza paczka taka jak CodeSourcery, WinARM czy Yagarto, więc po co tego używać i po co to w ogóle roztrząsać? 2. CodeSourcery Lite jest darmowe. Jeśli nie jest wystarczająco darmowe, to wystarczy ściągnąć sobie źródła GCC i skompilować samemu [; Jest to możliwe, skrypty z Codesourcery to znacząco ułatwiają. 3. Niczym 4. Bo kompilujesz...
A dlaczego nie zmierzysz czasu dzielenia timerem? Kompilator używa w miarę optymalnych procedur dzielenia, więc raczej nic nie przyspieszysz pisząc własne procedury.
Sprawa bierze się stąd, że adresy rejestrów są znane kompilatorowi, a adresy zmiennym przydzielane są dopiero na etapie linkowania. Stąd kompilator nie może optymalizować kodu. Można definiować zmienne globalne jak rejestry, lub zastosować wstawki assemblerowe. Albert
Chyba czegoś nie wiem w tym Keilu, albo mam inne przyzwyczajenia. Cokolwiek wpiszę w edytor np. "Ala ma kota" i dam Biuld, to nie pisze żadnego błędu a tylko że użył kompilatora. Moze ten Keil trzeba jakoś skonfigurować?
Tak to wygląda u mnie: -c --cpu Cortex-M3 -g -O3 -Otime --apcs=interwork -I..\..\INCLUDES -I "C:\Keil\ARM\INC" -I "C:\Keil\ARM\INC\ST\STM32F10x&q... -o "m3222_dziala2.o" --omf_browse "m3222_dziala2.crf" --depend "m3222_dziala2.d" Skoro zonk wziął się znikąd, może po prostu przeinstaluj Keila... Ciężko...
no to poza wachlowaniem opcjami kompilatora, zostaje Tobie debug diodowy i jemu podobne. Zobacz czy otrzymujesz znaki, czy możesz je nadawać... Przynajmniej ja bym tak robił. Pozdr
Dokładnie. Te wpisy to mapowanie opcji kompilacji na katalogi bibliotek Jak widzisz dla True studio masz biblioteki dla hard-float w katalogu: thumb/cortex-m4/hard/fpv4-sp-d16 A w CS nie. Zmiana kompilatora, lub kompilowanie go (i libc) ze źródeł. Ten sam bład bedziesz miał np dla big endian Albert
-mthumb-interwork jest o tyle bez sensu że cortex-m nie używają ARM ISA, więc o interworku nie ma co mówić. Spróbuj wywalić --specs=nano.specs lub zaciągnij najnowszy kompilator: https://developer.arm.com/tools-and-soft...
Jak masz ssd, to spokojnie dadzą radę dwa obok siebie. Zresztą chyba masz GB ramu, Znasz trochę linuxa od strony terminala? Jest program htop, który pokazuje aktualne obciążenie maszynki. Możesz sprawdzić ile ram i procka zjada domoticz, ale pewnie nie dużo. NodeRed u mnie zajmuje około 100MB a procent procesora poniżej 5 Dodano po 32 Przejrzałem też...
Witam! Mam nietypowy problem. Otóż postanowiłem wykorzystać w trakcie programowania biblioteki standardowe, głównie funkcję sprintf która bardzo przypadła mi do gustu. Mnóstwo problemów miałem, aby zostało skompilowane (problem z "_sbrk"), ale w końcu się udało. I tutaj kolejny poważny problem... którego niestety nie jestem w stanie przeskoczyć. Kiedy...
Flagi dla kompilatora gcc są takie: -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -D__weak="__attribute__((we... -D__packed="__attribute__((... -DUSE_HAL_DRIVER -DSTM32F103xB -I../Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Le... -I../Drivers/CMSIS/Device/ST/STM32F1xx/I...
W Cortex-M0 to raczej nie skorzystasz z BitBand. W Cortex-M3 trudno powiedzieć, co z tego wyjdzie, bo TIMx->SR jest typu volatile. Być może będzie ok - trzeba by się wgryźć w standard C i w bebechy kompilatora. Wiadomo za to, że z operatorem podstawienia zamiast &= na pewno będzie ok, więc po co komplikować?
Kamyczku, gdybyś wyjrzał ze swojej AVRowo-asemblerowej norki na świat, zobaczyłbyś, że jest on inny, niż Ci się wydaje. ARMa w asemblerze programować nie ma sensu, bo przeciętny kompilator generuje lepszy kod maszynowy od niezłego programisty, a tani Cortex programowany w C będzie min. 10x szybszy od droższego od niego 8-bitowca programowanego w asemblerze...
Ponieważ do zabawy z mikrokontrolerami mam oddzielny komputer ze stabilnym W98 SE a chciałbym sprawdzić w praktyce nową rodzinę LPC1100 szukam odpowiedniego kompilatora języka C oraz asemblera. Symulator i debugger niekonieczny. Polecane przez NXP LPCxpresso jak widzę w opisie jest przeznaczone od W2000 w górę i watpie czy da się je bez bólu zainstalować....
Wyłączenie optymalizacji to będzie raczej ficzer kompilatora, nie języka. W GCC jest jakiś atrybut, który pozwala zdefiniować poziom optymalizacji dla konkretnej funkcji - coś w stylu NOP does nothing. NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage. Please note that...
Nie chcę tu uruchamiać znów kłótni Cortex vs reszta świata. Jeśli chodzi o mnie powód jest prozaiczny. Po pierwsze mój kompilator obsługuje AVRy i ATXmegi. Po drugie mam książki Tomka Francuza i na nich bazuje. Po trzecie Atmel mnie nigdy nie zawiódł. Po czwarte - lenistwo , nie mam siły aby ruszać w tym momencie Army. Ale nie ukrywam że kto wie, może...
Cześć, potrzebuję mieć sekcję non-init w RAMie. Z racji tego że się średnio orientuję w skryptach linker, prosze o pomoc. Fragment yaml dla mojego STM32 wygląda tak: [syntax=bash]memories: flash: compatible: - on-chip-flash address: 134217728 size: 1048576 $labels: - flash SRAM: compatible: - on-chip-RAM address: 536870912 size: 131072 $labels: - SRAM...
Ale dlaczego stawiać się przed koniecznością wykluczającego się wyboru? Dlaczego nie "i PIC i Cortex"? Dlatego, że narzędzia typu programator/debugger oraz środowisko z kompilatorem trzeba zakupić, ewentualnie rzeźbić i składać samemu jakieś gcc (czas w firmie=pieniądze). Inwestycja w dwa rozwiązania jest droższa z tego powodu. Poza tym z doświadczenia...
https://obrazki.elektroda.pl/2198604800_... Skorzystaj z promocji na oprogramowanie Arm Keil MDK lub Arm Development Studio i kup licencję z 10% rabatem (nie dotyczy produktów S&M oraz licencji edukacyjnych). Oferta jest ważna do 31.10.2021 r. Szczegółowe warunki uzyskasz, kontaktując się z Computer Controls poprzez: >>...
BlueDraco pytał mnie o debuger, który tak jak wspominałem parokrotnie nie powiedział mi nic. Przy wszystkich ustawionych pułapkach (środowisko CoIDE) pojawia się wykrzyknik z komunikatem: "Multiple markers at this line - Line breakpoint: main.c [line: 13] - Unresolved breakpoint" Nie mam również dostępu do pliku .lss więc nie mam zielonego pojęcia co...
(at)tmf Z całym szacunkiem, ale kolejny raz zaśmiecasz temat Początkującego osobistymi wycieczkami z zamiarem udowodnienia swoich racji. Nie taki jest cel tego Forum, prawda? Z całym szacunkiem, ale nic nie udowadniam, tylko prostuję wypowiedź kolegi BlueDraco, która zawiera informacje nieprawdziwe, lub niepełne. Rozumiem, że pytanie o konkretne aplikacje...
Sam szukając prostych przykładów nie potrafiłem poskładać kilku komponentów, mianowicie, kompilatora, mikrokontrolera, bibliotek. http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... 4\/3!!
Witam raz jeszcze, Mi chodziło bardziej o porównanie tego samego bardziej zaawansowanego programu, z tą samą optymalizacją, z kodami wynikowymi z tego samego kompilatora - wykonanych dla dwóch rdzeni Cortex M3 i M4. Mnie ciekawi to zagadnienie, czy rzeczywiście STM32f4 będzie ponad 2 razy szybszy od M3, czy jednak jest jakieś wąskie gardło, które uniemożliwia...
1. Ten drugi (z "+ load") programuje układ przed rozpoczęciem debuggowania, a ten pierwszy debugguje to co zostało zaprogramowane inaczej/wcześniej/poprzednio. Jeśli chcesz w kółko debuggować ten sam kod, to raz odpalasz wersję z "+ load", a potem tylko tą "bez". 2. Nie ma takiej różnicy, choć oczywiście możesz sobie taką wprowadzić, bo np kiepsko debugguje...
Witam. Mam procka ARM Cortex-M3 LM3S6965 (z ethernetem). Chciałbym zrobić mu sterowanie przez SPI ekspanderem portów. Z tym nie będzie problemu, SPI znam. Do tego chciałbym móc sterować owym ekspanderem przez sieć ethenrnet. Muszę zastosować stos TCP/IP. Sterować chciałem z programu, który napisze w pythonie czy C++ na PC. Macie jakieś pomysły jak to...
Wszystkie te których używam (sqrtf(), powf(), acosf()) są liczone przez FPU? Niekoniecznie. W Newlib (czyli libm.a) nie ma implementacji specjalnie dla tego koprocesora, jednak jeśli masz włączoną optymalizację, skonfigurowane FPU (opcje kompilacji) i dodaną flagę -ffast-math, to kompilator niektóre z nich potraktuje jako funkcje inline i zastąpi odpowiednimi...
Widziałem zdjęcie tego urządzenia kilka miesięcy temu w jakimś temacie, czekałeś na jakiś konkurs, aby wrzucić projekt :) Dobra robota, sam mam na koncie generowanie VGA, na 8bitówcu jest trochę trudniej. Mam kilka pytań: 1. W jaki sposób zrealizowałeś rdzeń systemu, czyli aplikacje? Jest to natywny kod napisany w C wykonywany z Flasha? Aplikacje wczytywane...
Masz dla porównania. Pewnie będziesz musiał pozmieniać flagi kompilatora. [syntax=Bash] 42% 41) [0.277s] external/STM32F4xx_HAL_Driver/Src: arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -O2 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -Wshadow -std=gnu99 -g -ggdb3 -D STM32F401xE -I ../../../external/STM32F4xx_HAL_Driver/I... -I ../../../external/CMSIS...
Piszę sobie szczęśliwie kody baremetal na ARMy w RPi3 i RPi4. Nie wnikałem w szybkość pracy bo i tak była duża. Ale potrzebowałem mocno zoptymalizować jeden algorytm, i dodałem sobie licznik cykli. I się mocno zdziwiłem. Kod jest najprostszy z możliwych. Czysty baremetal, nawet bez przerwań. Wzorowany na tym: https://www.elektroda.pl/rtvforum/viewto...
Gdzieś jeszcze ktoś wspomniał o przenośności kodu... w takich prockach praktycznie jakikolwiek kod operujący na rejestrach nie da się sensownie przenieść. Uniwersalne fragmenty kodu to takie które nie odwołują się do hardware i w zasadzie czy na AVR czy na Cortex da się odpalić. W wszelkie HAL-e przestałem wierzyć - kiedyś chciałem coś takiego zrobić...
Hej, chciałem zaimplementować zbieranie statystyk w systemie FreeRTOS. Zrobiłem jak w opisie funkcji: 1.włączyłem flagę configGENERATE_RUN_TIME_STATS 2.portCONFIGURE_TIMER_FOR_RUN_TIME_STATS... skonfigurowałem counter. 3.portGET_RUN_TIME_COUNTER_VALUE() - obsłużyłem odczyt z countera. Przy kompilacji poszło ok. Jednak jeśli dodam funkcję vTaskGetRunTimeStats(...
Assembler jak każdy inny język programowania da się strawić. Problem jest z poprawnym i zwięzłym posługiwaniu się tym językiem w przypadku rdzenia Cortex M3 razem z tak bardzo rozbudowanymi (peryferia) uC jakimi są produkty firmy ST. Assembler ARMów został wymyślony dla kompilatorów, nie dla ludzi. W 99% przypadków człowiek nie stworzy lepszego kodu...
Dlaczego kapryśne? Ja używam dwóch gotowych środowisk bazujących na Eclipse i jestem z nich zadowolony. Kabel USB A-miniB kupisz w każdym sklepie z akcesoriami komputerowymi. Wiesz, że ten zestaw kosztuje więcej, niż płytka z Cortexem z 0.5 MiB Flash, 64 KiB RAM, Ethernetem, USB i kolorowym, graficznym wyświetlaczem LCD z panelem dotykowym? Tylko czy...
Pytanie drugie: jak to ładnie zaimplementować na wyższy od asemblera poziom? Nie implementować. Włączyć standard C11 w kompilatorze i użyć tego co tam jest. http://en.cppreference.com/w/c/atomic Ewentualnie C++11 i użyć nagłówka <atomic> - co kto lubi. GCC obsługuje te funkcjonalności. 4\/3!!
Niech będzie że kompilator działa, ale nic poza tym [; No jeszcze make też działa <: No a CodeSourcery nie jest "moje ukochane", bo ma niezbyt mikrokontrolerową bibliotekę niestety... 4\/3!!
Pamiętaj że każdy procek będzie miał inaczej zrealizowane przerwania, cortex-m zrzuca do rejestry automagicznie, cortex-A wymaga już zrobienia tego ręcznie. C51 nie znam, ale możliwe że tam tez przerwanie mogło być szybkie bez zrzucania rejestrów na stos. Tylko kilka rejestrów jest odkładanych na stos automatycznie; reszta - jeśli jest to konieczne...
Dlaczego personalna? Rzeczy techniczne są mierzalne, jeśli mówisz że: - ani nie jest wolniejszy od kodu w ASM; - nie jest większy od kodu w ASM ; Zwarzywszy że sam standard języka wymaga wprowadzenia dość sporo elementów przed wykonaniem głównego programu to już powoduje narzut względem ASM. Inie trzeba żadnych pomiarów ani badań robuć żeby wiedzieć,...
Witam! Do ARM7TDMI jest tego trochę, ale architektura przestarzała (ARMv4, 1993r.), i Cortex-M3 nie obsługuje trybu ARM, tylko Thumb-2. Do Cortex-M3 nie widzę nic, oprócz "The Definitive Guide To The ARM Cortex-M3", którą przeczytałem i jest tam wyjaśnienie tylko działania procesora i kompilacja przykładu właśnie do tej płytki. Człowieku, wszystko...
zieeeeew (OT, czyli kompletnie nie na temat)... O tym, że każdy przyzwoity komputer powinien mieć możliwość dynamicznej podmiany adresów procedur obsługi wyjątków, najlepiej przez zmianę zawartości rejestru wskazującego stosowną strukturę danych, wiadomo było już ok. 1970 roku i robiono to w dużych komputerach. Pierwszym mikroprocesorem, w którym zaimplementowano...
No tak, ale niektóre kompilatory umożliwiają podłączanie się do wyjątku w formie kodu C, np. __cs3_isr_dabort(). No i na pierwszej instrukcji assemblerowej tuż po wejściu do tej procedury wywala mi abort. To jest ta pierwsza instrukcja od tej procedury: push {r2-r3,r11} A więc nawet nie zdąrzam wejść głębiej by obsłużyć wyjątek.
Czym różni się dla kompilatora obliczenie zmiennej R przed warunkiem IF i takie samo działanie matematyczne ale w warunku IF? Jest to związane z promowaniem typów. W operacji if obydwie zmienne są promowane do typu int. Czyli jak Tim jest 5 a Poprzedni_tim jest 240 to wynik odejmowania jest -235 co oczywiście jest mniejsze od 10. Jak liczysz R to ten...
ale tu chodzi o całą funkcję matematyczną. VSQRT zrobi Ci sprzętowy pierwiastek, ale nijak nie zrobisz już jedną instrukcją sinusa. Jest to napisane w manualu do gcc. Fajnie że mnie tak lubisz ;-) Tylko naucz się jeszcze odróżniać kompilator od jego bibliotek. Funkcja sinus nie jest częścią składową kompilatora. Jest częścią standardowej biblioteki...
No skoro nagle wszystkie ARM7 mają jakiś VIC, no to faktycznie problem nie istnieje :] Ale z tego co pamiętam, to nie wszystkie procki ten VIC mają... Dwie najpopularniejsze rodziny - LPC2xxx i AT91SAM7 - mają takie kontrolery, a pytanie z tematu było dodatkowo o w miare popularny i rozbudowany układ, więc... Pewnie znajdzie się jakiś egzotyczny ARM7...
FPU w Cortex-M4 obsługuje TYLKO liczby float (32-bity). Pozatym - to jest KLUCZOWA sprawa - fpu_enable() musi być PRZED kodem który z FPU by korzystał, w przeciwnym wypadku HardFault. Być może dobrze by było fpu_enable() przypiąć do __low_level_init0/1(). 4\/3!!
że ARM jest elastyczny i bez problemu można przenosić programy między procesorami I tu jest kolegi błąd bo pomylił kolega rdzenie procesora z peryferiami. Te dość często są bardzo podobne i podobnie konfigurowane, ale czasem jednak mają różnice, a czasem różnica polega tylko na tym, że jest podpięte na inną szynę. "Elastyczny" program czy kompilator...
Dla kompilatora C jest to też przydatne rozwiązanie, jeden stos może służyć do przekazywania parametrów i tworzenia zmiennych lokalnych, a drugi do obsługi "retów" z podprogramów. Takie rozwiązanie może dać odrobinę mniejszy i szybszy kod. IAR dla MSP430 chyba coś takiego stosuje, bo tam każdy z ogólnie dostępnych rejestrów R może służyć jako wskaźnik...
Wracając do tematu. Aż dziwne, że nikt nie wspomniał o instrukcjach ldrex oraz strex, które są przydatne przy tego typu operacjach. Jak ktoś nie używa przedpotopowego kompilatora (to jest zgodnego z C11) to ma to wszystko zaimplementowane: http://en.cppreference.com/w/c/atomic Jest to oczywiście również fajna sprawa, ale... nie działa na ARM Cortex-M0,...
Zdecydowanie brałbym STM32. STM8 to już procki raczej u swojego schyłku i długo rozwijane chyba nie będą, Procesory STM8 są własnością ST i u innego producenta ich nie dostaniesz, a STM32 jest na rdzeniu ARM Cortex M-3 - bardzo popularny rdzeń wśród producentów. Do tego można kupić stm32 discovery kit bardzo tanio (ja sprzedaje po 50zł). Idealna zabawka...
I tu mam problem jak ustawić flagi kompilatora i linkiera nie korzystając z dodatkowych narzędzi jak STM32CubeMX . Ściągnij sobie z mojej strony przykład o nazwie stm32f4_blink_led (jest w dziale Download). Skompiluj go z wiersza poleceń (make all) i będziesz widział jakie flagi są potrzebne. Dla układu STM32F7 jedyne co musisz zmienić to "-mcpu=cortex-m4"...
No i przecież o tym pisałem: To co teraz robią jest naprawdę szybkie i wydajne. To juz nie 12 cykli zegara na jedno polecenie. Taki 1-cyklowy core '51 zajmuje kilka razy więcej krzemu niż cortex M0 pracujący przy tej samej częstotliwości... Dziwne, że jeszcze nikt nie napisał odpowiednika Bascoma na ARMy :) Niestety, od renesasa odstrasza głównie kompilator...
Cortex-m jest tak trywialnym procesorem, że nie rozumiem dlaczego ktoś uważa, że jest bardziej skomplikowany od 8 bitowego procesora. Odpadają przecież takie głupoty jak fusebity, problemy z adresowaniem, problemy z większymi liczbami, jest to architektura Von Neuman, zestaw instrukcji to raptem około 50 wliczając pseudo-instrukcje, kompilatory są ogólnodostępne...
to ja moze zadam tak zwane 'lamerskie pytanie': ktora rodzina ARMow jest najlepsza? Atmelowe SAMy, ST i ichnie STRy czy LPC od phillipsa. przez najlepsza rozumiem - latwo dostepna, dobrze opisana, duzo informacji (przyklady, dobre datasheety) w necie, ale tez i wydajna (bo STRy np maja tylko do ~60MIPSow, a STR9 ledwo 96 [; ) i z dobrymi peryferiami......
Dla mnie jako piszącego w C architektura nic nie znaczy w przypadku typowych programików. Bardziej liczy się co kompilatory wyprawiają z kodem ;) Zdarzyło mi się napisać sterownik na armie. Niestety mimo zabezpieczeń padł mi ten mikrokontroler, a ponieważ drugiego takiego nie miałem, przepisałem kod w części sprzętowej i całość poszła na atmedze. Natomiast...
Witam Obecnie programuję mikrokontrolery ARM Cortex M4 W projektach głównie chodzi o systemy akwizycji danych z ADC, magistrali CAN, UART itp... Przyszło mi do głowy aby zamiast używać zestawów ewaluacyjnych dla mikrokontrolerów w stylu STM Discovery potraktować Raspberry jak mikrokontroler a nie komputer lub SoC. Nie ukrywam że największą zaletą rpi...
Witam, chciałbym zastosować STM32F103RCT6 do sterowania przekształtnikiem napięcia zasilającym silnik indukcyjny. Program chcę pisać w C w Keilu. Stąd pewne pytania: Ponieważ będę operował na ułamkach chcę wydzielić np 10 lub więcej bitów na część ułamkową. Nie wiem jak w C załatwić kontrolę nad przepełnieniem czy konieczne są wstawki asm (chciałbym...
Kompilator umieszcza, bo mu są potrzebne (do czytania oczywiście ;-) ) A czy z naszą wiedzą czy nie to zależy tylko od tego jaką wiedzę posiadamy. Jeśli nie są mu potrzebne to nie umieści i nie będzie czytał. Jeśli natomiast są potrzebne Tobie to Ty je tam umieść. To przecież dane. Albert
Pisałem to w pokrewnym temacie założonym bodajże wczoraj, albo na dniach bynajmniej. Większość podręczników, jakie powstaje na temat programowania mikrokontrolerów (niezależnie od rdzenia) w języku polskim, jest tylko znakomitym uzupełnieniem User Manual'i do tych rdzeni. Książka w swej ogólności nie jest w stanie szczegółowo opisać danej rodziny mikrokontrolerów....
Ze względu na wiek, żebyś się nie na wabił frustracji oraz zniechęcił do świata embedded, to wybierz IDE, które już w pakiecie instalacyjnym zawiera w sobie wszystko co trzeba. Jeśli chcesz uniknąć tej całej magii, która kryje się pod takimi rzeczami jak Makefile, linker, czasem skrypt linkera, to proponuje ściągnąć takie oprogramowanie, które robi...
Procesory nie operują na liczbach rzeczywistych, nigdy. SIMD - single instruction multi data. To są instrukcje nie dostępne dla kompilatora i trzeba je samodzielnie wciskać w postaci intrinsics. http://infocenter.arm.com/help/index.jsp... Tutaj masz tabelę z cyklami dla cortex-A9 http://infocenter.arm.com/help/index.jsp...
Problem jest do obejścia, ale myślę, że lepiej zajrzeć w kod assemblera i zobaczyć po pierwsze jakie instrukcje zostały wygenerowane, a po drugie - jakie są wartości owych stałych _bss i _ebss. (hint: arm-none-eabi-objdump -S plik.o) Tak swoją drogą, to te stałe (_etext, _ebss, _bss itp.) to po prostu wartości, a traktowane są jak konkretne zmienne...
Co do printf() i tym podobnych, to u mnie działały jak należy bez dodatkowych zabiegów (oczywiście musi być trochę tej pamięci na heap, dużo pamięci na stos i jeszcze więcej na program Zmiana kompilatora to nie jest rozwiazanie :( Malloc i sbrk działają. Problem jest chyba w samej bibliotece, albo jest to wersja bez obsługi float'ów, albo potrzebny...
1. Jak jest zdefiniowane float32_t? 2. Literał 2.4567 jest domyślnie typu double. Użyj 2.4567f. 3. W jaki sposób odczytujesz wartość przekazywaną do funkcji? 4. W jaki sposób wykonujesz konwersję do stringa? 1. Próbowałem z float wynik taki jak poprzednio. 2. Próbowałem też tak. 3. Odczytuje w trybie debug 4. void floatToString(uint8_t *stringTab,...
W opcjach kompilatora mam to co mam:) Czyli co ustawione domyślnie. A wyświetlanie błedów dla wartości innych niż deklarowane w enum powinno być też domyślne, no bo po co byłby ten enum? Ok, znalazłem, jest -Wall. Dodano po 37 Compiler: -mcpu=cortex-m3 -mthumb -Wall -ffunction-sections -O0 -g
Tylu fachowców, a o narzędziach niezależnych od procesora jakoś nie słyszałem - także, ten.. Jak na wstępie: może komuś się przyda. Trollić umie każdy. Ciężko by było by narzędzie było całkowicie niezależne od układu. Sercem serii STM32 są rdzenie cortex-mx i to jest w sumie procesor, reszta to peryferia zależne od tego co już ST tam właduje a one...
cortex firmware cortex przerwania cortex assembler
wiertarka bosch wirnik zmywarka bosch schemat sharan czujniki
hewalex sterownik hewalex sterownik
ADB HMC 4120 – hard reset, format HDD, factory reset, test nagrywarki Vectra Ariston Velis Evo 80 EU – migający panel sterowania, brak grzania, diagnostyka i naprawa