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...
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...
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...
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...
Zobacz [url=https://stackoverflow.com/questions... Overflow: 'Failed to execute MI command:(...)'.
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.
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...
OpenOCD zaktualizowanie tak jak kompilator wcześniej. Przerabiam przykład od początku teraz na bazie tego o którym mówiłeś LPC Będe wklejał tutaj co dokładnie przerabiam. Jeśli coś robię źle to mam nadzieje że mnie poprawicie. Jeśli dobrze to mam nadzieje że komuś się przyda. 1.Import projektu lpc1114_blink_led i rename na stm32f0_blink_led 2. Zmiany...
Info o różnych stosach jest całkiem niedaleko - w pewnych przykładach /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode can use main stack (default) or process stack - selected in CONTROL special register */ __main_stack_size = 0; __process_stack_size = 1024; 4\/3!!
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...
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 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)...
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...
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);...
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!!
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...
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...
ja odpalam tak: -f interface/jtag-lock-pick_tiny_2.cfg -f target/stm32f1x.cfg -c "adapter_khz 1000; reset_config trst_and_srst separate; $_TARGETNAME configure -rtos auto" A w Zylinie w init commands mam to: target remote localhost:3333 monitor reset halt symbol-file out/project.elf thbreak main continue i działa. Aczkolwiek nie wiem na ile to jest...
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.
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 =...
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...
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....
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...
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 ========================================...
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
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 ;)
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);//...
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ć...
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;...
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 ****************************************...
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...
Tak. Możesz to tak ustawić. Przykłady Freddiego korzystają z obu stosów. Process stack -> kontekst aplikacji, main stack - > kontekst przerwania.
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...
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...
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
Przeglądałem skrypty Freddiego i w Keilu rzeczywiście jest trochę inaczej. Co do stosu to działanie nie różni się to nic od ogólnie znanych mi zasad. Startup w Keil wygląda tak ; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs ; <h> Stack Configuration ; <o> Stack Size (in Bytes)...
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 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) "...
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...
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...
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...
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...
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, //...
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 +---------------------------------------...
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...
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ąś...
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...
Funkcja SystemInit jest wywoływana w obu przypadkach na początku main. Podałem ją w kodzie. Może tutaj faktycznie jest problem. Pliki startup.s Keila i Cube się różnią. Zauważyłem, że funkcja SystemInit jest wywołana w pliku dla Cube. Niestety te pliki to dla mnie czarna magia. Czytałem o nim artykuł waszego kolegi z elektrody. https://www.elektroda.pl/rtvforum/topic3...
SimpleMAC ma możliwośc obsługi do 10 węzłów, Ja bym nie był taki pewny :) Panowie z EP napisali coś, o czym nie mają pojęcia. Każde urządzenie (każdy MCU) ma własny, unikalny numer (wykorzystywany w przykładowej aplikacji jako long address) - 8 Bajtów. Dodatkowo (w przykładowej aplikacji solar-system.c) adres tzw. krótki programiści ustalili na UINT16....
Prewencyjnie ustawiłem oba stosy, bez tego SysTick nawet nie działał :) [syntax=asm]/* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode...
Co znaczy zbyt mały, czy 1024 bajty to za mało? Używam twojego (jakiegoś może nie najnowszego) skryptu linkera... [syntax=c] /***************************************... * author: Freddie Chopin * file: stm32f103rb_rom.ld * last change: 2009-09-19 * * chip: STM32F103RB * compiler: arm-none-eabi-gcc 4.3.3 * * description:...
michalko12: Zmieniłem xHandleTaskLED1, xHandleTaskLED2 na static, ale nic to nie pomogło. xLastFlashTime nie można: error "initializer element is not constant". W keilu żadnej tej zmiennej nie miałem jako static a program działał więc podejrzewam, że nie tu jest problem. Dodano po 4 Smashing: Jak wrzucam Twój program do Eclipsa to się nawet nie kompiluje...
Cześć, 1) Co RMII to pełno jest wskazówek w każdym "application note" dostawcy PHY'a. Generalnie linie różnicowe dobrze zagrzebać pomiędzy warstwami stabilnego potencjału (przeważnie GND), co w przypadku Twojej dwu warstwowej płytki wydaje się być trudne. Przelotki, 0R itp. są odradzane na każdym kroku, łamanie ścieżek pod innym kątem niż 90 stopni...
Witam, Mam następujący problem z biblioteką HAL do zapisu danych w pamięci flash. Posiadam dwie tablice 160 elementowe tabX oraz tabY (typ int16). Chciałbym zapisać dane te w pamięci nieulotnej flash, a dokładnie w adresach 0x08080xxx oraz 0x08090xxx. Cały mój problem pojawia się przy dokonywaniu polecenia EARSE przy zapisie drugiej tablicy. Aby poprawnie...
Patrzę na skrypty linkera udostępnione np. przez Freddiego i widzę tam takie cuś: [syntax=c] .stab 0 (NOLOAD) : { *(.stab) } .stabstr 0 (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. * Symbols in the DWARF debugging sections are relative to the beginning * of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 :...
lbo dlatego, że zwiększyłem STACK_SIZE z 64 do 128 Chodzi o rozmiar stosu dla taska, czy dla całej aplikacji? <: 4\/3!!
A czy uważasz że wszystko jest linkowane? Twoje pytanie sporo sugeruje. Jakoś bylem zafiksowany na to, że w ten sposób dołączany kod musi być "wrzucony" w całości, ale cóż błądzenie to rzecz ludzka, sporo wody jeszcze upłynie zanim takie mechanizmy będą dla mnie zrozumiałe :) Cały czas mam przed oczami ten goły kod, który do STM32F103VCTx się nie mieścił,...
Witam Po jednodniowej radości związanej z prawidłową pracą klona amonteca od Freddiego nadszedł kryzys... Aktualnie IAR nie jest w stanie wgrać nawet programu do flasha. W oknie konsoli IAR-a głownie jest Verify error at address.. W gdb: http://obrazki.elektroda.net/3_126701690... Wyrocznia podpowiada: "...I suspect some interrupt routine or...
Tak wygląda skrypt linkera po poprawach [syntax=c] /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/ * file: STM32F4xxxG_rom.ld * last change: 2012-03-15 * * chip: STM32F4xxxG * compiler: arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.6.2 * 20110921 (release)...
Freddie Chopin dzięki za odpowiedź! Czy mógłbyś podzielić się fragmentami skryptu linkera z poprawnie zdefiniowanymi symbolami __heap_start i __heap_end ? Aktualnie Twój skrypt którego używam wygląda tak: [syntax=c] /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/...
Dobra po lekturze częściowej manuala dla linkera. Zaczynam powoli przerabiać swój skrypt: Dodano po 14 PROVIDE(__stack_end = __stack_end); } > ccm_ram AT > ccm_ram chyba dopiero teraz udało mi się przenieść stos.
Kod: [syntax=c]#include <string.h> //Return copy of str string from index position and len length char *StrCpy2(char *str, unsigned short index, unsigned char len) { char *text; text = (char *)malloc(sizeof(char)*(len+1)); if (text == NULL) return text; strncpy(text, str + index, len); text[len] = '\0'; return text; }[/syntax] Odnoszący się do...
stm32 stack bluetooth stack stack toshiba
telewizor przesycone kolory odkurzacz zabezpieczenie silnik simsona
kierunkowskazy motocykl inżynieria środków transportu
Funkcje podzespołów aparatu CB 30 Odtwarzacz DVD Regent sam się wyłącza - przyczyny i rozwiązania