Dosyć sprawnie działający kod do debuggowania HFa: #include <cstdint> extern "C" { void getRegistersFromStackFrame(uint32_t* stack_frame) __attribute__ ((noreturn)); void getRegistersFromStackFrame(uint32_t* const stack_frame) { const volatile uint32_t r0 = stack_frame[0]; const volatile...
Możesz napisać dokładniej jak i gdzie to zrobić ? Otwórz plik startup.S (ewentualnie inna, zbliżona nazwa - nie wiem jaki dokładnie masz przykład i w której wersji), a następnie wywal z niego: ldr r0, =__process_stack_end msr PSP, r0 movsr0, #CONTROL_ALTERNATE_STACK msr CONTROL, r0 isb (to jest generalnie zawsze na samym początku wraz z odpowiednimi...
po co w niektórych implementacjach takich 'rozbiegówek' mamy kod assemblerowy który kopiuje adres stosu do rejestru SP procesora? STM32 może używać dwóch stosów - jednego dla przerwań (nazwanego wyjątkowo myląco "main stack") i drugiego dla wątków (nazwanego "process stack") - a więc i dla "main()". To co jest w tablicy wektorów ląduje w MSP ("main...
Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
w załączniku archiwum z kilkoma ciekawymi plikami dla STM32F0. 1. Cortex-M0.ld oraz STM32F051x8.ld Skrypty linkera - w projekcie używać należy bezpośrednio tylko tego drugiego, który zaś w środku dołącza ten pierwszy. Podział spowodowany jest tym, że "mapa" pamięci generalnie jest wspólna, więc wszystkie takie rzeczy są w tym Cortex-M0.ld, zaś w tym...
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Nagłówki od ST lub od ARM są tak walnięte, że najpierw trzeba dołączyć plik stm32f4xx.h, a dopiero potem można dołączać plik arm_math.h Wpisy parsera są normalnie widoczne w opcjach poszczególnych plików źródłowych projektu. Ręczne ustawianie ścieżki PATH przez Eclipse raczej jest średnim pomysłem... Przy okazji w odpowiedzi na stackoverflow podałem...
Można po prostu nie załączać do zródeł kompilowanych przez kompilator C, nagłówków zawierających składnię C++... Jeżeli chcesz używać generatora, po prostu cały kod używający konstrukcji C++, zamieszczasz w osobnym pliku, który będzie kompilowany przez kompilator C++ i wołasz z main.c jakąś funkcję, która została napisana w C++. Funkcja oczywiście musi...
W pliku linkera zastąp to co masz tam tymi wartościami /* Highest address of the user mode stack */ _estack = 0x20002800; /* end of RAM */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0x200; /* required amount of heap */ _Min_Stack_Size = 0x400; /* required amount of stack */ /* Specify the memory areas */ MEMORY...
Hard Fault może oznaczać włączenie przerwania do którego nie napisano obsługi. Mylisz się. Standardowa rozbiegówka definiuje "słabe" handlery przerwań zawierające puste nieskonczone pętle. To nie ma nic wspolnego z hardfault'em. Hardfault leci generalnie na 1) dostęp do nieistniejącej pamięci, 2) nierozpoznaną instrukcję rdzenia, 3) nad użycie magistral...
Ok, dziękuję za odpowiedź. A gdzie znajdują się informacje na temat stosu? Jego lokalizacji. I co oznacza main stack i process stack? U mnie ten drugi jest ustawiony na 0. Chciałbym wiedzieć co to oznacza.
Zobacz [url=https://stackoverflow.com/questions... Overflow: 'Failed to execute MI command:(...)'.
Chyba tak jest, tutaj plik startup_stm32f10x_md.c [syntax=c]/** ****************************************... * (at)file startup_stm32f10x_md.c * (at)author Coocox * (at)version V1.0 * (at)date 12/23/2009 * (at)brief STM32F10x Medium Density Devices Startup code. * This module performs: * - Set the initial SP * - Set...
Mam na schemacie np. silniki ale są na razie nie podłączone. Mam TB6612 ale niepodłączone (bez zasilania głównego). Mam CP2102. Jeszcze sekcja zasilania. Ale jak mówiłem sprawdziłem w Keilu - działało normalnie. Wklejam ustawienia debugera. http://obrazki.elektroda.pl/1495441700_1... http://obrazki.elektroda.pl/6369576600_1...
#define STACK_SIZE 0x00000100 Jakieś dalsze pomysły?
Witam Hmm, walczę od jakiegoś czasu z uruchomieniem toolchaina Eclipse + CodeSourcery itd dla STM32 (dokładnie STM32F107VCT) i mam pewien problem. Przejrzałem kilka różnych projektów, w których podpatrywałem pliki skryptowe linkera (*.ld) jak i pliki makefile. Na razie kompiluje mi się gdy przykładowo zrobię plik main.c z takim kodem: STM32F10x_StdPeriph_Lib_V3.5.0...
I co mam z tym zrobić? Stos zależy od modelu uc, czy jakoś się go ustawia w środowisku? edit: OK, szukam. Znalazłem takie pozycje: - Heap Size, - Main Stack Size, - Process Stack Size. Wartość każdej z nich zmieniłem na 4096 i niestety ciągle to samo.
Proszę o pomoc szczególnie freddiego chopina ponieważ jest autorem plików linkera, startup-a i wektora przerwać(vectors.c), które w innych projektach jak dotąd działałają mi niezawodnie. Zajrzyj do skryptu linkera, przeczytaj ze zrozumieniem jego początkowy fragment, ustaw tak jak trzeba i będzie działać. Kluczową sprawą jest przyswojenie sobie tego...
W skrypcie linkera. Kompilator tworzy jakieś sekcje (pewnie coś z obsługi wyjątków, takich sekcji jest kilka), które nie mają wpisów w skrypcie linkera, a więc domyślnie trafią one do RAM (tak jakbyś zrobił SECTIONS ... { ... } > RAM AT >RAM), ale zawartość tej sekcji jest inna niż same zera. Linker wypełnia więc obszar od flasha (adresy 0x8000000)...
Tak. Możesz to tak ustawić. Przykłady Freddiego korzystają z obu stosów. Process stack -> kontekst aplikacji, main stack - > kontekst przerwania.
Popatrz co ciekawego można przeczytać w skrypcie linkera /* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode can use main stack...
W yagarto się kompiluje pewnie przez to, że ma on "wbudowane" sbrk() (inna konfiguracja newlib), a do CodeSourcery musisz dodać je samodzielnie. Rozmiar jest na 99% spowodowany funkcjami do obsługi wyjątków - niestety jednak się dodały. Tak czy siak nie jest źle - dla STM32 obsługa wyjątków to około 50-60kB. 4\/3!!
Ta sama sytuacja na STM32F04. Na Linuxach (kernel 6.4.3), Windows 11, Android, działa. Na 10 nie działa. https://obrazki.elektroda.pl/8472800600_... Najnowsze CubeIDE + aktualizacje bibliotek. Heap 0x200 Stack 0x400 Kod wygenerowany, jeszcze nie zmieniany: utworzone 2 pliki hid.h i hid2.h, hid.c korzysta tylko z hid2.h.
To coś dynamicznego nazywa się sterta i korzystają z tego przecież takie funkcje jak malloc. Chyba, że chodzi Ci o to, żeby stos zmienial swój rozmiar podczas pracy programu? Dla RTOSów, to raczaj nie możliwe, każdy stack (dla oddzielnego taska) na sztywno zazwyczaj dostaje przydział miejsca dla siebie. No a bez RTOSa, to jak sobie w dobrym miejscu...
Opcja -S, o której pisałem to opcja kompilatora, do użycia w komendzie ...-gcc ..., Z tym, że tak wprost się tego raczej nie da dodać. Niestety, CubeIDE nie znam, więc od ręki nie odpowiem, jak tej opcji użyć. Dobra to po kolei :) To już znam odpowiedz na to co mnie interesowało( czyli że to jest po prostu jakiś śmieciowy rozkaz, którego procek nie...
Witam. Jestem w trakcie pisania bootloadera po magistrali CAN dla STM32F103VE. Opieram się głównie na publikacji AN2557 zamieszczonej na stronie ST. Potrafię przesłać aplikację użytkownika po magistrali CAN do uC i zaprogramować pamięć Flash od wybranego adresu w górę. Na wstępnie odblokowuje pamięć Flash (FLASH_Unlock(); ) następnie podgrywam aplikację...
No właśnie o priorytetach wiem, 15 top najniższy dlatego wszystkie przerwania mają Dodano po 2 Niestety zwiększenie do 4kB stosów (Stack Configuration i Heap Configuration) w niczym nie pomogło, program wchodzi do przerwania i zawiesza się przy sprawdzaniu flagi. Jak nie sprawdzam flagi to wszystko działa. Wychodzi na to, że musiałbym na te 4 klawisze...
Korzystam z przykładu od Freddiego stm32cl_blink_led-1.2.1-120107 i tam w vectors.c jest właśnie funkcja Default_Handler która kręci się w kółko... Poza tym zadeklarowanych jest dużo funkcji w tym: [syntax=c]// System tick timer void SysTick_Handler(void) __attribute__ ((interrupt, weak, alias("__Default_Handler")));[/syntax] oraz: [syntax=c] void Reset_Handler(void);...
To może faktycznie spróbuję z Twoim toolchainem i zamelduję co dalej. BTW - sbrk nie mogę sobie napisać od nowa/użyć Twoich syscallsów, bo ta funkcja już jest na stałe w librdimon zabudowana. Dobra, obejrzałem te syscallsy z newliba i faktycznie jest tam ten nieszczęsny warunek: [syntax=c] if (heap_end + incr > stack_ptr) { /* Some of the libstdc++-v3...
Przede wszystkim możliwość wrzucenia obsługi default'a. Oczywiście powinno się dać na samym końcu tego łańcuszka "if else" dodatkowy "else", który by był właśnie tym deafault value, ale jakoś programiści o tym zapominają a przy użyciu switch już nie (pewnie dlatego że pierwszy lepszy example na stack'u jest z default :P) Ponowię pytanie - no i co to...
Jak patrze co oni wewnątrz natworzyli to czasem się zastanawiam czy to żart Te wszystkie "niepotrzebne" LOCK, UNLOCK itp potrzebne są w RTOS ale tylko idea jest słuszna bo realizacja już nie i funkcja potrafi się zablokować i zawsze zwraca BUSY.
Cześć Mam jeszcze jedno pytanie dotyczace debugowania FreeRTOSa. Uzywam Ubuntu 12.04, Eclipse Juno, Zylin 4.18.1, openocd 0.7.0 i aktualnego gdb od linaro. Czy używając wtyczki "Zylin" (native), w momencie gdy analizowany task osiągnie breakpoint to domyslnie w okienku "Debug" (tam gdzie widać taski, "external tools" etc.) rozwija sie wam call stack...
Freddie - masz 342 strony postów ;p Znalazłem coś takiego (między innymi z Twoją uwagą na temat rzutowania (__IO uint32_t*) [syntax=c] typedef void (*pFunction)(void); pFunction Jump_To_Application; uint32_t JumpAddress; int main(void) { while(1) { /* Jump to user application */ JumpAddress = *(__IO uint32_t*)(0x080E0000 + 4); Jump_To_Application =...
Nie jestem pewien czy tak dasz radę (tzn na jednym SPI) o ile pamiętam to on (MP3) nie ma on bufora, w którym mógłby pamiętac odpowiednią ilość danych do grania, podczas gdy Ty czytasz nastepne z karty SD.
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
A więc tak: - dopisałem do syscall funkcję _exit() - usunąłem -march skopiowałem do flash.ld twoją definicję sekcji .bss. oto wynik: make ========================================... Build info: BOARD: maple MCU: STM32F103RB MEMORY_TARGET: flash See 'make help' for all possible targets ========================================...
To jest plik link.ld To jego zawartość: [syntax=c] OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") SEARCH_DIR(.) INCLUDE "memory.ld" /* Section Definitions */ SECTIONS { .text : { KEEP(*(.isr_vector .isr_vector.*)) *(.text .text.* .gnu.linkonce.t.*) *(.glue_7t) *(.glue_7) *(.rodata .rodata* .gnu.linkonce.r.*) } > rom .ARM.extab...
Witam. Jakie są różnice pomiędzy FreeRTOS 6.1.1 a 7.1.0? Prosty program mrugający diodą działa mi pod wersją 6.1.1 a pod 7.1.0 ląduje w default_handler. Przerwanie następuje po wykonaniu tego kodu freertos'a. void vPortStartFirstTask( void ) { __asm volatile( " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate...
Witam, Frieddie dzięki za odpowiedź. Mam kolejny problem. W eclipsie wyskakują mi takie błędy: http://obrazki.elektroda.net/65_12610988... http://obrazki.elektroda.net/14_12610988... W projekcie używam takich plików: startup.c /***************************************... * Copyright (c) 2009...
Nie ma jakiegoś sposobu na sprawdzenie co go kieruje na default handler? Pewnie że jest i to nie jeden (; Dorzuć do swojego projektu gdzieś coś takiego: w okolicy miejsca które spowodowało problem. Patrzysz wtedy do pliku .lss i patrzysz co znajduje się w zakresie +/- 3 instrukcje od tego miejsca. 4\/3!!
Jeszcze mam jeden problem. Chciałem przy okazji użyć Backup SRAMu, i tu problem z włączeniem go. Zgodnie z informacjami podanymi np. tutaj: http://stackoverflow.com/questions/20667... widać że trzeba włączyć taktowanie PWREN, BKPSRAM, odblokować zapis bitem PWR_CR_DBP oraz włączyć Backup regulator bitem PWR_CSR_BRE....
pomijając parę innych kwestii, chociażby możliwość deklarowania funkcji jako inline (tak, wiem, w przypadku zwykłego słówka "inline" jest to tylko sugerowanie kompilatorowi, żeby inline'ował, ale np. w przypadku gcc można funkcji nadać taki atrybut: __attribute__((always_inline)) i wtedy kompilator nie ma wyboru, nawet gdy ma optymalizacje ustawione...
Zaczynam z ARM i przeglądam sobie plik linkera jaki dostarcza ST w paczkach Cube. Np. taki do F103 zawiera coś takiego jak przydział stosu i sterty dla użytkownika. /* Set heap size, stack size and stack location according to application requirements. */ /* Highest address of the user mode stack */ _estack = 0x20004FFF; /* end of RAM */ /* Generate...
Spróbuj zwiększyć stos. Definicja STACK_SIZE w pliku startup_stm32f4xx.c
Napisałeś wcześniej, że sam określasz położenie stosu i sterty ..bo że rozmiar można definiować to już wiem. Mógłbyś pokazać jak to robisz? .. czy definicja rozmiaru służy tylko rezerwacji wymaganego miejsca w pamięci , czy może przekroczenie rozmiaru stosu wywołuje jakiś Fault_Handler ?? Generalnie większość znanych mi rozwiązań polega na tym iż definiuje...
1. Błędy o których piszesz (sticky error) są nieistotne i nie należy się nimi przejmować) 2. Jeżeli używasz mojego startupu, to tam układ przestawiany jest na używanie DWÓCH stosów - osobnego dla przerwań, osobnego dla reszty kodu. No i teraz masz ustawiony jeden z tych stosów na 0, więc w końcu się to sypnie. Jak ściągniesz nowszą wersję przykładu,...
Dzięki za odpowiedź! Udało się całość skompilować. Przykład jest dostarczany przez STM jako "STM32F107xx connectivity line Ethernet low-level driver and web server demonstration based on uIP TCP/IP stack". Co do podwójnego includowania tych plików. Należy przenieść dwie ostatnie definicje (z samego końca pliku) z fsdata.c do fs.c (zaraz po include)...
Sprawa wielokrotnie poruszana. Jak zajrzysz do skryptu linkera, to znajdziesz tam takie coś: /* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts) can use only main stack */ /*...
Ja bym to zrobił mniej wiecej tak. [syntax=c] typedef void (*function_ptr)(void); function_ptr firmware = (function_ptr)(firmware_entry);; const uint32_t stack_pointer = *(uint32_t*)0x08002000; const uint32_t firmware_entry = *(uint32_t*)(0x08002000 + 4); //Tutaj wyłącz przerwania !!! SCB->VTOR = (volatile uint32_t)(0x08002000);// set vector table __set_MSP(stack_pointer);//...
Aby podłączyć enc28j60 potrzebujesz spi mosi, miso, sck, cs, reset + stack tcp/ip. Zwykle używam uIP. Więc możesz go podłączyć do wszystkiego. Co najmniej 107, co najmniej 103, co najmniej atmega.
tak, robie obydwie te rzeczy, ale własnie zauwazylem ze moj bootloader funkcję __set_MSP(stackPointer); ma zdefiniowaną w pliku main jako Dodano po 1 problem rozwiazany Wskaźnik stosu był źle ustawiany po użyciu do ustawienia wskaxnika stosu takiej funkcji, działa ok [syntax=c] __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t...
watchpointa postawilem juz dluzszy czas temu, wnioski są bezużyteczne. Jakaś część RTOSa nadpisuje tamto miejsce. Problem jest raczej dlaczego nadpisuje; i dlaczego tylko w tej funkcji... Dodatkowym zonkiem jest fakt, ze nie da sie podczas pracy RTOSa zatrzymac rdzenia i go ponownie puścić - procek ląduje w hardfaultcie po puszczeniu; nawet jak jest...
Akurat zbyt mocna porada. Dlaczego? Nie chodzi mi o to, aby całkowicie wyłączyć statyczny analizator, tylko aby przy ocenie "powodzenia" kompilacji kierować się logiem z kompilatora a nie z "Problems". Ad. 2 - zaimportowaniu gotowca (z wiadomych przykładów) wszystko powinno działać poprawnie.
Ja bym sugerowował, żeby zmienić w tym przykładzie zerową wartość 'main stack size' na różną od zera, bo osoba przechodząca od migania LED'em (który działa) na obsługę przerwań, ma problem z ich poprawnym działaniem - przy zerowym stosie obsługa przerwania ląduje w Default Handler i człowiek się dziwi co nie tak zrobił. Osoba początkująca może mieć...
Próbuję znaleźć błąd w moim programie powodującym że w pewnym momencie rdzeń ląduje w HardFault. Prosiłbym o weryfikację czy moje rozumowanie jest poprawne :) Adres miejsca z którego "leci" HardFault to -> http://obrazki.elektroda.pl/5150504200_1... Czyli adres błędu jest w R1 -> http://obrazki.elektroda.pl/6638007900_1...
Dzięki za szybką odpowiedź. Poczytałem o tych flagach (jak by ktoś chciał podaje link: MEMORY { FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 256K RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K } _minimum_stack_and_heap_size = 8192; SECTIONS { .text : { KEEP(*(.isr_vector)) *(.text)...
Witam, podczas debuggowania aplikacji w ktorej (jak pewnie w wiekszosci) kazdy znak robi roznice. Zauwazylem w Watch 1 ze KEIL umieszcza rozne dane w miejscach okreslonych zmiennych. Np. mam w funkcji zmienna Nazwisko[30] po inicjacji zapisuje do niej 29 znakow i znak 30sty jest kreska pionowa '|'. Nastepnie program leci dalej, wykonuje cos w innej...
Wysypuje masę błędów w pliku asemblerowym. Oryginalny plik asemblerowy wygląda następująco: [syntax=asm] ;***************************************... ; uC/OS-II ; The Real-Time Kernel ; ; (c) Copyright 1992-2006, Micrium, Weston, FL ; All Rights Reserved ; ; Generic ARM Port ; ; File : OS_CPU_A.ASM...
Jedną z technik uzywanych jest wpisanie patternów do pamięci i sprawdzanie cykliczne czy nie zostały nadpisane - znany pattern to np. "0xDEADBEEF". Zakładam, że wiem jaki obszar nie powinien być przekroczony np. jeśli nie panujemy nad wywołaniami rekurencyjnymi to stack może za bardzo się powiększyć i nadpisze nam nasz pattern.
Obecne startupy w przykładach dla STM32 i LPC1114 używają dwóch stosów - jeśli chcesz to zmienić (czyli wszystko będzie używało tylko MS), to - poza ustawieniem odpowiedniego rozmiaru odpowiedniego stosu w skrypcie linkera - wystarczy zakomentować w startupie linijki odpowiedzialne za ustawienie PSP oraz przestawienie stosu, czyli ten fragment: /* +---------------------------------------...
Co do STM32 to sprawa wygląda tak: -biblioteki do USB-a są na stronie ST -Stos TCP/IP jest na stronie ST ( lwIP TCP/IP stack ) ilość RAM-u na obsługę zależna jest od Ciebie i od kryteriów transmisji. -Polecam FREE RTOS-a, który jest darmowy, pełno przykładów na ten i nie tylko uC. Jeżeli potrzebujesz czegoś bardziej wypasionego to możesz zawsze kupić...
Biblioteka przejrzysta? Dobry żart :) Masz ustawiony main stack? Jak tak to spróbuj tak (przerwanie przykładowo na opadające zbocze na PA3) [syntax=c]static void ExtIInit(){ RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // enable clock for alternate function AFIO->EXTICR[0] = AFIO_EXTICR1_EXTI3_PA; NVIC->ISER[0] = NVIC_ISER_SETENA_9; EXTI->IMR = EXTI_IMR_MR3;...
Tutaj o .AppendText vs .Text+= https://stackoverflow.com/questions/2063... Wychodzi na to, że zależy to od ustawień. Ale rich textbox chyba domyślnie jest multiline... Dodano po 4 Jeżeli wszystkie testowane terminale odbierają poprawnie, to znaczy, że MCU wysyła poprawnie. Zrób sobie jakiś krok pośredni....
Oczywiscie tak. Dodam ze uzywam programu System Workbench [syntax=c] /** ****************************************... * (at)file startup_stm32.s dedicated to STM32F103C8Tx device * (at)author Ac6 * (at)version V1.0.0 * (at)date 2018-04-06 ****************************************...
Jakby ktoś chciał poczytać to: If the stack is not eight-byte aligned the use of LDRD and STRD might cause an alignment fault, depending on the target and configuration used. Dziękuję za pomoc, temat zamykam ;)
Przydatne MACRA do zarządzania wieloma bitami naraz: [syntax=c]//https://stackoverflow.com/qu... #include <stdint.h> typedef __uint32_t uint; //======================================... #define STRINGIZE(arg) #arg #define...
Możesz spróbować przegryźć się przez USB Host Stack z pakietu Microchip Harmony for PIC32. Cytat z dokumentacji: The USB Host Layer in the MPLAB Harmony USB Host Stack performs the tasks of enumerating an attached device and interfacing the HCD. The following are the key features of the MPLAB Harmony USB Host Layer: Supports multi-configuration and...
Próbuję przesiąść się z bibliotek SPL na LL To nie bardzo ma sens. Bo to właśnie HAL jest bezpośrednim zamiennikiem SPL a sam w sobie LL według filozofii przedstawianej przez STM służy bardziej w sytuacjach kiedy koniecznie potrzeba kodu o mniejszej zajętości pamięci czy szczególnie szybkiego. Z tym że jak ostrzega STM, wymaga od programisty głębokiej...
Hmmm. Wgrałem oryginalny program z Stm32 MassStorage. vectors.c startup.S i .ld o kolegi Freddie Chopin. Mam obecnie dwa przerwania z Usb: USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler ( w vectors.c było bez jedynek kolo CAN ). Zrobiłem takie coś, orginalny program void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); }...
Racja - miałem optymalizacje ustawioną :) Co do stack'a - szukam i szukam w CooCoxie i w plikach możliwości zmiany rozmiaru i nie potrafie znaleźć ehh... czas przestawić się na inny kompilator
Hmm, jeszcze pomęczyłem bieżącą konfigurację, wspomniane przerzucenie do nowego projektu zrobię na dniach. Póki co użyłem w obrębie FreeRTOS narzędzi do sprawdzania wolnego miejsca na HEAPie oraz posprawdzałem watermarki dla poszczególnych stosów (używam heap_1.c). Wygląda na to, że niektóre taski zostały obdarowane zbyt hojnie, więc można im było zmniejszyć...
Witam Wiem że o __attribute__ ((interrupt)) jest dużo napisane na tym forum, i w sumie jak teraz patrzę na FreeRtos to oryginalnie jest tak: [syntax=c]void xPortPendSVHandler( void ) __attribute__ (( naked )); void xPortSysTickHandler( void ); void vPortSVCHandler( void ) __attribute__ (( naked )); [/syntax] I wszystko działa... jakoś, xPortSysTickHandler...
Cześć! Teoretycznie te bufory będą zwalniane. Ale to przyszłościowo. Natomiast co do STACK_SIZE... Wydaje mi się, że powinno wystarczyć, nie mam żadnych sprintf-ów i temu podobnych. Ale sprawdzę i dam znać co i jak. Pozdrawiam Krzysiek Dodano po 9 No sprawdzone. Zwiększony czterokrotnie stos dla wątku i dalej bez rezultatu. Pozdrawiam Krzysiek
Kod Reset_Handler przedstawia się tak: void Reset_Handler(void) { unsigned long *pulSrc, *pulDest; // Fill the stack with a known value. for(pulDest = pulStack; pulDest < pulStack + STACK_SIZE; ) { *pulDest++ = 0xA5A5; } // Copy the data segment initializers from flash to SRAM. pulSrc = &_flash_data; for(pulDest...
Mam na pewno sterownik WinUsb.sys. Poniżej cały skrypt linkera: Dodano po 10 Zapomniałem dodać, że używam zewnętrznego ST-linka dołączonego do płyty Nucleo-f103rb. Mam drugą taką płytkę i gdy teraz ją podłączyłem ale skorzystałem z wbudowanego ST-linka wszystko zaczęło działać prawidłowo. Co w takim razie może być nie tak?
a mógłbyś pokazać kod ? Załączam dwie paczki - całe projekty. IO-Rec_v1.zip - działający miga diodą IO-Rec_v1_n.zip - zawieszający się w HF po chwili. Zmianę jaką dokonałem to zamiast wielkości stack 100B tworząc task wpisałem 128B.. (wszystko w main). Ale wystarczy zrobić jakąkolwiek zmianę i takie jaja potrafią wyłazić.. Czasem zmiana wstecz i ponowna...
W celu uruchomienia kodu z pamięci RAM (aby pamięci FLASH nie nadwyrężać zbytnio..) użyłem skryptu linkera przeznaczonego dla Attolic TrueStudio, ze standardowej paczki firmware dla stm32 discovery. Jednakże po wgraniu programu, nie uruchamia się, w związku z tym pytanie, co trzeba jeszcze ustawić aby uruchomić kod z RAM'u ? poniżej wspomniany skrypt...
No właśnie nie do końca. Skrypt startowy jak i całą resztę wziąłem z bibliotek STM. Tak samo skrypt linkera jednak tutaj troszkę pogrzebałem i stąd problem (prawdopodobnie). Mam taki plik: /* Default linker script for STM32F10x_512K_64K Copyright RAISONANCE S.A.S. 2008 */ /* include the common STM32F10x sub-script */ /* Common part of the linker scripts...
No normalnie to ładujesz swojego bootloadera do flasha przy pomocy powiedzmy flash magic. A następnie generujesz sobie BIN swojej aplikacji w ofsetem i tego BINa podsuwasz bootloaderowi i on używając IAP powinien to wpisać do flasha. Ok, wszystko się zgadza, ale ja chciałem wgrać to bez użycia bootloadera - z wgraniem już sobie poradziłem. Pojawił...
Poprawiłem ale niestety nadal to samo: http://obrazki.elektroda.pl/1768235900_1... Dodano po 3 Jak wrzucam w designerze serialport to nic się nie dzieje
Dzięki za podpowiedzi. Pliki się kompilują jednak nie mogę wgrać programu - wywala mi coś takiego. 257-gdb-set confirm off 257^done (gdb) 258-gdb-set width 0 258^done (gdb) 259-gdb-set height 0 259^done 260-interpreter-exec console echo (gdb) 260^done 261-gdb-show prompt (gdb) 261^done,value="(gdb) "...
Nic nie trzeba specjalnie ustawiać, za to trzeba "ręcznie" ustawić stos, bo w przeciwnym wypadku będziesz miał stos skonfigurowany tak jak w bootloaderze. 4\/3!! Rozumiem że chodzi Ci o zrównoważenie stosu które realizowane jest w funkcji skoku do aplikacji? /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application...
Chwilowe zakomentowanie tych trzech tablic nadal powoduje, że nie mogę wejść do debuggera i nic podejrzeć. Może zapomnij o fft i tak jak Ci FCh radził wszystko małymi kroczkami - najpierw ustaw sobie pamięć tak aby wszystko działało - malloc i inne, później dopiero zajmuj się aplikacją. W ten sposób nic nie zrobisz. Dodano po 28 PS Przy okazji podejrzyj...
Witam, Zauważyłem dziwne zachowanie programatora STM32 ST-LINK oraz nie mogę poprawnie podłączyć debuggera gdb (połączonego z Eclipsem i OpenOCD) podczas użycia funkcji vTaskDelay z FreeRTOS. Używam płytki ewaluacyjnej STM32L-Discovery z układem STM32l152. Do projektu udało mi się zintegrować FreeRTOS'a (możliwe że mam źle skonfigurowaną pamięć w jakiś...
Najprościej wygenerować przez jakieś darmowe środowisko, np.: Atollic TrueSTUDIO. [syntax=asm] /* ****************************************... ** ** File : stm32_flash.ld ** ** Abstract : Linker script for STM32F373C8 Device with ** 64KByte FLASH, 32KByte RAM ** ** Set heap size, stack size and stack location according...
Witam! Od jakiegoś czasu usiłuję napisać aplikację obsługującą kilka wątków (taki wstęp do RTOS) i przełączającą kontekst między nimi. Problem tkwi w tym, że podczas wczytywania kontekstu (LoadContext()) wywala FaultHandler. Zdebugowałem ustrojstwo i wynikiem są dwa bity CFSR: IMPRECISERR oraz STKERR. Nie wiem co może być przyczyną, być może czegoś...
Dziękuję wszystkim za pomoc. Pomysł Freddiego działa, umiem debugować. Muszę najpierw raz wgrać softdevice poprzez openocd z cmd. A później już normalnie kompiluję, wgrywam mój program poprzez eclipsa i openocd i teraz muszę dać stop i włączyć same debugowanie bez ponownego ładowania programu. W pętli głównej mam miganie diodą i parę delay. No i jak...
Wielkie dzięki za projekt. Trochę czasu mi zajęło zanim się za niego zabrałem - pełno projektów na uczelni. Wielkie dzięki jeszcze raz! Przystosowałem projekt do swoich wcześniejszych wypocin ale dostaje dziwne błędy: uip\fs.o:(.rodata.file_404_html+0x0): multiple definition of `file_404_html' uip\fsdata.o:(.rodata.file_404_html+0x0)... first defined...
Jak to ta sama seria to nie musisz zmieniać wektora przerwań, ale w skrypcie linkera wypadało by pozmieniać rozmiary pamięci i powinno być ok. Rozmiary zmiemione na 512k i 64k. Zadnej roznicy w dzialaniu nie ma. Pomyslalem, ze warto jeszcze wstawic co pokazuje GDB (to jest przypadek, w ktorym uruchamiam load i mikrokontroler nie może się doczekać na...
Dzięki za odpowiedź ! Spróbowałem grafiki 10x10 przy zadeklarowanym stosie [syntax=c]#define STACK_SIZE 0x000800[/syntax] Problem w tym że działam na Coocoxie, i nie mam pojęcia gdzi mogę zmienić wartość sterty ( on nie generuje plików startup.s). Co mnie jeszcze bardziej dziwi nie mogę znaleźć funkcji odczytującej z pliku. Nie jestem pewien czy to...
Gdzie tablca jest zdefiniowana zależy od toolchaina. Możesz mieć np coś takiego w pliku vectors..... [syntax=c]__attribute__ ((section(".isr_vector"),used)) pHandler __isr_vectors[] = { // Cortex-M Core Handlers (pHandler) &_estack, // The initial stack pointer Reset_Handler, // The reset handler NMI_Handler, // The NMI handler HardFault_Handler, //...
Wygenerowany jest bezpośrednio z CooCoxa Linkera tutaj nie ma chyba jest zaszyty w środowisku. Wersja CoIDE to: Version: 1.7.8 [syntax=c] /** ****************************************... * (at)file startup_coide.c * (at)author Coocox * (at)version V1.0 * (at)date 20/07/2010 * (at)brief M0 M3 Devices Startup code. *...
Witam wiem ze temat wałkowany, czytając poprzednie posty jak zwykle mam mętlik. STM32F103ZET Używając: monitor reset halt (lub reset_halt ) load dla ram i flash program staje zawsze w startup.s: Reset_Handler: /* +---------------------------------------... | Initialize the process stack pointer +---------------------------------------...
Proponuję kol (at)R-MIK zapoznać się wpierw z tą "krótką lista prostych rozkazów" Cortex-ów a nie fantazjować. Jak bedę musiał to sie zapoznam. Jak pisałem wcześniej, kiedyś do startup dla LPC potrzebowałem, teraz nie muszę, ale lista nie jest obszerna, przynajmniej w THUMB: nstruction Type Instructions Move MOV Load/Store LDR, LDRB, LDRH, LDRSH, LDRSB,...
Bardzo dziękuję za dotychczasową pomoc:) A jeszcze jedno pytanie czy mogę połączyć pamięć ram z aux_ram i mieć 128k zamiast 112? W taki sposób: [syntax=c] /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/ * file: STM32F4xxxG_rom.ld * last change: 2012-03-15 * * chip:...
Faktycznie! Jeśli nie przekroczę 4 breakpointów to nic się złego nie dzieje. W kail-u wyświetla się okienko informujące że nie można dodać kolejnego breakpointu (max to 5). Dzięki Freddie! Mam jeszcze jedno pytanie. Chciałem użyć w projekcie kontenerów z biblioteki standardowej C++ (konkretnie vektora i kolejki) jednak gdy program chciał wykonać którąś...
Witam, Nie mogę rozwiązać jednego problemu, może będziecie w stanie mi pomóc. Próbuję na STM32F042 uruchomić biblioteki dla czujnika VL53L (biblioteki ULD), ale problem w sumie raczej nie w tym. Kompilacja przechodzi bez problemu, ale przy próbie wywołania funkcji wpada w HardFault i nie mam pojęcia czemu. https://obrazki.elektroda.pl/7548785900_...
Tak na szybko to powinieneś mieć plik prawdopodobnie o nazwie startup, w którym umieszcza się wektory obsłygi przerwań wyglądający jakoś tak: [syntax=c] //Interrupt vector table __attribute__ ((section(".isr_vector"))) void (* const exceptions_vectors[])(void) = { &_estack, // The initial stack pointer reset_handler, // The reset handler unused_vector,...
Witam, Od dłuższego czasu używam Eclipse Indigo wraz z CodeSourcery i GDB od Atollica do tworzenia i debugowania programów pod STM32. Taki "zestaw" działa bardzo dobrze przy klasycznej, jednowątkowej aplikacji. Jednak przy próbie uruchomienia FreeRTOS na STM32F103 program wchodzi w HardFault_Handler z komunikatem Suspended: Signal 'SIGTRAP' received....
Metoda "wszytko na raz" nie za bardzo się sprawdza. Jest to jedyna metoda przy cargo-cult i copy-paste programowaniu. Osoby te muszą zebrać wszystke poprzebne im "kody" (w fazie copy-paste), następnie (w fazie cargo-cult) wstawiają podpatrzone gdzieś framenty róznych aplikacji bez rozumienia o co chodzi. Kolejne fazy: 1. Faza zaprzeczenia i izolacji...
stack stm32 bluetooth stack stack toshiba
stabilizator magnetyczny readynas netgear crown japan
Błąd P1336 w Citroen C3 1.4 VTi - przyczyny i diagnostyka Montaż zaworu turbiny w VW CC 1.8 TSI 2012