To chyba nie wina stosów. Jest różnica nazewnictwa funkcji obsługi przerwań pomiędzy FreeRTOS a biblioteką CMSIS. U mnie w identycznej sytuacji pomogło dodanie do pliku port.h (z katalogu SOURCE/portable/gcc/ARM_CM3) tych linijek: // To be complaint to CMSIS and ST standard peripherals library name convention. #define vPortSVCHandler SVC_Handler #define...
Dlaczego w zasadzie nie wolno wykonać skoku do adresu resetu(a sprzęt wykonuje tą operację w przypadku startu z drugiego Flasha), skoro chcę w zasadzie zasymulować takie zdarzenie? Dlaczego musi to być skok do samej procedury RESETU? Bo to nie jest AVR. Rdzeń robi tak samo, sprzętowo pobiera wektor procedury startowej i skacze do niej! Zarówno w urządzeniu...
Gdzie trafi zmienna lokalna w main zainicjowana i nie niezainicjowana ? Zależy co rozumiesz przez "lokalna". Generalnie do celu tej dyskusji proponuję się ograniczyć do podziału na "statyczne" (m.in. globalne) i "automatyczne" (czyli zmienne "w" funkcjach, oczywiście bez "static"). Te pierwsze lądują w .data lub .bss (zależnie od tego czy są zainicjalizowane...
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!!
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...
Ustawiłeś odpowiednio piny BOOT0 i BOOT1? Po tym: target halted due to breakpoint, current mode: Handler HardFault xPSR: 0x20000003 pc: 0x20000004 msp: 0x20004fe0 wydaje mi się, że Twój układ próbuje wykonywać kod z RAMu. 4\/3!!
A masz gdzieś w programie zdefiniowany HardFault handler? Bo mi w truestudio program też niby leciał w WWDG handler ale to przez to, że nie miałem właśnie obsługi hardfault.
Problem w tym, że gdy HardFault występuje (aktualnie aplikację zmodyfikowałem sobie na siłę aby za każdym razem waliła) procesor wydaje się utykać na wejściu do tej funkcji. Debuger wisi na samym wejściu i przy użyciu step over czy step nie idzie w ogóle dalej. Całkiem możliwe, że pierwsza instrukcja z Twojego handlera wywołuje znów Hard Fault, więc...
Sprawdź czy przypadkiem nie lądujesz w obsłudze HardFault (HardFault_Handler, w pliku stm32F4xx_it.c) Wstaw tam np. zapalenie jakiegoś LEDa. JarekC
Pomiar linii 3,3V przed dodaniem kondensatorów wskazał na szpilki sięgające do 3,6V przy wyższych prądach co w zasadzie łapie się w granicach, w których producent deklaruje poprawną pracę urządzenia: 2-3,6V. Pytanie co jeszcze mogę poprawić jeśli chodzi o filtrację linii 3,3V bo wszystko obecnie wskazuje, że tu leży problem? Może koralik ferrytowy...
Bzdura. Wystapienie dowolnego wyjatku pod rozbiegowkami z Keila (nie wiem jak z innymi) powoduje wpadniecie w nieskonczona petle bedaca napisana w asmie dokladnie pod adresem tego wektora. HardFault_Handler: B HardFault_Handler - dotyczy glownie wyjatkow niemaskowalnych. Przerwanie od DMA jest maskowalne wiec jest obslugiwany przez handler defaultowy...
Witam, od jakiegoś czasu walczę z uruchomieniem stosu wraz z obsługą FreeRTOSa niestety bezskutecznie. Procesor zaraz po odebraniu ramki ląduje w HardFault handler. W sieci znalazłem dosyć sporo przykładów projektów opartych na tym stosie choćby przykład z książki Pana Peczarskiego , niestety większość z nich to projekty standalone bez OS. Może ktoś...
Ja próbowałem wyłączać zegar, resetować rejestry i nic się nie udało standardowymi metodami. Więc napisałem protezę WG: - SysTick z najniższym priorytetem, - funkcja typu: void COMMON_softwareWatchdogReload()&... g_watchdogCount = 0; } - w przerwaniu od SysTick jest coś takiego: if(g_watchdogCount>WATCHDOG_RELOA...
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...
Witam Niestety do tych funkcji w których mialem wstawić breakpoint nie dochodzi, bo wywala się już przy LCD_Init(). A dokładniej przy odczycie rejestru przez FSMC wyzwalany jest HardFault_Handler. A ten adres jest dobry.. [syntax=c]#define LCD_BASE ((uint32_t)(0x60000000 | 0x08000000))[/syntax] jeśli FSMC_Bank1_NORSRAM1 =0 to ja używam 0x60000000 Pozdrawiam
Ekhem, mój błąd ;] Przysięgam, że widziałem HardFault_Handler zamiast Reset_Handler... Co nie zmienia faktu, że spacerek do reset handlera nie powinien występować na dowolny zonk z serii hardfault, a jeszcze tym bardziej, przy wyłączonym watchdogu. Najwidoczniej, występujący tutaj fault jest jeszcze bardziej 'hard' niż standardowy hardfault. Chyba że...
0. Kod umieść w znacznikach syntax. W takiej postaci to się koszmarnie czyta. 1. Jeżeli już musisz używać SPL/HAL, to rób to tak jak należy. - Żądanie transferów DMA dla UART należy włączyć po skonfigurowaniu kanału DMA. Gdybyś użył debugera, to od razu widziałbyś Transfer Error po włączeniu DMA, ponieważ żądanie z UART pojawiło się jeszcze przed konfiguracją....
Najpewniej Nie Zerujesz Flag Przerwań . To, że NVIC automatycznie zeruje flagę pending po wejsciu w przerwanie (pending->active) nie znaczy, że peryferia robią to samo - nie robią , więc musisz tego dopilnować sam. W DMA musisz w ISRrze ręcznie gasić flagę która wywołuje przerwanie, najpewniej w twoim przypadki TCIF. Możliwe oczywiście jest również,...
Po naciśnięciu pause dzieje się tylko tyle, że opcja pause znika z toolbara. Przed naciśnięciem pause: https://obrazki.elektroda.pl/8441403200_... Po naciśnięciu pause: https://obrazki.elektroda.pl/6289089500_... Lampka STlinka miga cały czas na zielono/czerwono, naprzemiennie. Edit. Postawiłem breakpointa w HardFault_Handler()....
Może coś takiego: [syntax=C]//****************************... // +--+ // | ++----+ // +-++ | // | | // +-+--+ | // | +--+--+ // +----+ Copyright (c) 2009 Code Red Technologies Ltd. // // Microcontroller Startup code for use with Red Suite // // Software License Agreement // // The software is owned by Code...
Mogę wpisać max 1.5kB - #define STACK_SIZE 0x00000600, kiedy wpiszę - #define STACK_SIZE 0x00000800, to dostaje błąd - region `ram' overflowed by 1096 bytes. Ale nawet z 0x00000600 dalej to samo. Dodano po 15 Nie wiem czy to jakieś znaczenie, ale kiedy wchodzi do log10(a) i natychmiast wskakuje do HardFault_Handler, to jest też komunikat - signal handler...
Dzięki za szybką odpowiedź. Ściągnąłem odpowiednią wersję vectors.c Ale nadal wchodzi mi w HardFault_Handler w szczególnym miejscu w kodzie. Jeśli debuguje krokowo, linijka po linijce w c, to wchodzi w HardFault_Handler (chodzi o miejsce w którym skacze do innej funkcji) Jeśli to samo miejsce debuguje krokowo, linijka po linijka w asemblerze, to przechodzi...
[syntax=armasm]g_pfnVectors: .word _estack .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler /* External Interrupts */ .word WWDG_IRQHandler /*...
Nie ma "przerwań synchronicznych", jest tylko błędna terminologia. O! I to lubię - jasno, konkretnie i bezkompromisowo :) Informację o tym, że SVC to "software interrupt" znalazłem na stronie ARMa. Denerwujący jest ten bałagan :/ Od jutra biorę się za lekturę i zgłębianie tematu ;) Kurczę... wychodzi na to, że priorytet błędów to już w ogóle błędnie...
Skrypt linkera definiuje sekcję .isr_vector. Jej zawartość jest zdefiniowana w asemblerowym pliku startupu. Jest to zrobione w typowy sposób. Z resztą hard fault następuje przed włączeniem systicka, więc nie widzę związku tabelą wektorów przerwań. Na to, że jest ona w porządku wskazuje też fakt, że wykonywana jest funkcja void HardFault_Handler(void),...
Hej, No nie mam HardFault_Handler :( Jak wrócę jutro do domu to dorobię.... A jakie masz podejrzenia? Pozdrawiam Krzysiek
Kod jest ok, pamięć nadpisywana jest w zarezerwowanym obszarze. To chyba złe miejsce na ten temat, bo program ląduje w HardFault_Handler - to bardziej sprzętowy problem tego procesora, muszę temat wstawić w kontrolery ARM.
Może problem jest w innym miejscu, gdy przesuwam się za pomocą Debuggera to wszystko jest teoretycznie poprawnie, jednak gdy puszczam kod swobodnie wyskakuje błąd "void HardFault_Handler(void)" teraz pytanie czy sprzęt jest wadliwy, czy jednak te ustawienia?
Masz problem? - pokaż startup i procedurę. Skoro jesteś pewny, że wszystko ok, to o co chodzi? Może na początku procedury wylatujesz na HardFault albo czymś podobnym?
witam posiadam STM32F103RET6 i jeśli ustawię PLL mnożnik na więcej niż 6 razy (co odpowiada 48MHz) to procek wysypuje się, przechodzi do HardFault_Handler, jesli konfiguracje przeprowadziłem w THUMBie to jeszcze na 56MHz pracuje. czy ktoś miał taki problem?
SysTick_Handler - nie znam programu, który by nie używał tych przerwań, no chyba, ze chodzi o miganie diodą. EXTI15_10_IRQHandler - nie zaznaczyłeś w Cube jakiegoś przerwania od GPIO? Nie przypominam sobie aby Cube generował to niepotrzebnie. HardFault_Handler - nie było czy wywaliłeś? BusFault_Handler - to samo pytanie UsageFault_Handler - to też?
Jeszcze jeden ciekawy przypadek (wg mnie). Jeżeli mógłby mi ktoś wytłumaczyć jak to działa. Przykład pochodzi z http://olimex.com/dev/soft/arm/STR/STM32... (Nie kompilowałem ale zakładam że działa) W przykładzie tym nie ma pliku startup'a. Jest skrypt linkera jeszcze krótszy! Skrypt linkera: MEMORY { ram (rwx)...
Kabel zmieniłem i dalej to samo. Ciągłe wywalenie HardFault_Handler() http://obrazki.elektroda.pl/3213801300_1...
Jak jade krok po kroku debugerem to wkoncu zawiesza się mi w tym miejscu: /* Initilaize the LwIP stack */ LwIP_Init(); a potem ląduje : void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } } Wcześniej bez RTOSa działało.
Czyli przez moje patrzenie od złej strony dochodzę do banalnego wniosku, że nie mam tablicy wektorów. Do pliku port.c mam dołączony plik stm32f10x_it.h, w którym to mamy definicje: void NMI_Handler(void); void HardFault_Handler(void); void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void SVC_Handler(void); void...
Witam, piszę program na STM32 F100RB(Discovery), który ma za zadanie dane odebrane od GPS(USART2) wysłać przez moduł radiowy(USART1). Nie wiem dlaczego, ale po przyjściu przerwania od odbioru USART2 program ucieka do przerwania HardFault_Handler(void) . W debuggerze całość działa poprawnie, natomiast w trybie "run" problem ten sie pojawia. Dodatkowo...
idzie w krzaki przy sprawdzeniu tego warunku [syntax=c]if (LCD_GetSwapXY()) { LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS); LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS); } else { LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS); }[/syntax] w debug natomiast mam cos takiego GDB Hardware Debugger...
(at)Piotrus_999 , tutaj nie doszedłem gdzie dokładnie, ale gdzieś na próbie obsługi przerwania. Debug'owanie nie działa mi do końca (jeszcze z tym walczę) i staram się znaleźć przyczynę trochę po omacku. Wrzuciłem w przerwaniu na początku wyplucie jakiejś informacji po USART która się nie pojawia, tak więc przypuszczam że próba wywołania powoduje "coś",...
Przypisania są w FreeRTOSConf.h zrobione tak jak było to w poprzednich wersjach FreeRTOSa: [syntax=c] #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler [/syntax] W port.c są zaimplementowane powyższe funkcje. Kawałek tablicy wektorów przerwań z startup_LPC17xx.c [syntax=c] /** *(at)brief...
Tabela wektorów jest niekompletna, brakuje kilku zarezerwowanych pozycji między wyjątkami HardFault a SVCall i SVCall a PendSV [syntax=c] ( void ( * )( void )) &__main_stack_end, // 0 Reset_Handler, // 4 NMI_Handler, // 8 HardFault_Handler, // C 0, // 10 0, // 14 0, // 18 0, // 1c 0, // 20 0, // 24 0, // 28 SVC_Handler, // 2C 0, // 30 0, // 34 PendSV_Handler,...
(at)Freddie: problem występował nadal, przy kolejnych próbach debugowania. (at)Krauser: faktycznie przerwanie nazywało się USB_LP_CAN1_RX0_IRQHandler, i USB_LP_CAN_RX0_IRQHandler w pliku vector.c Dopisałem 1 w pliku vector.c i coś ruszyło - PC rozpoznał wirtualny COM. Natomiast teraz (w mniej więcej losowych momentach - przeważnie niedługo po inicjalizacji...
Czy plik wygenerowany przez nowy projekt ale z dołączonymi bibliotekami HAL będzie dobry? W nim znajdują się już te przerwania. Dodaj tylko to co Ci napisałem. Znajdz w dokumentacji procesora gdzie w tablicy przyrwan jest ten EXTI15_10 - i tam zamiast zera wstaw nazwe seojego handlera. I to wszystko. Tu masz zresztą tę tablicę - policz sobie gdzie...
Witam, Znowu małe pytanie... Działa Ci operator new, czy coś trzeba jeszcze dodać ? U mnie procesror wchodzi w HardFault_Handler jak próbuje go użyć : [syntax=c]int Mutex::lock() { architecture::InterruptMaskingLock interruptMaskingLock; int ret; // break the loop when one of following conditions is true: // - lock successful, recursive lock not possible...
Witam, Ustawiłem reset_config na "separate". "monitor halt reset" jest. Po dodaniu monitor mwb 0x400FC040 0x01 lub monitor mww 0x400FC040 0x01 Debug ląduje momentalnie w HardFault_Handler. Bez tej linii coś się jednak ruszyło.. ale nie chce zapeszać ;) EDIT: Nadal są jakieś problemy. Nie mogę zrobić stabilnego środowiska do debugowania.. raz działa...
Pełny kod ( nie wiem w jaki sposób wysłać, wiec wklejam zwyczajnie) : #include "stm32f1xx_it.h" extern __IO uint8_t BlinkSpeed; void NMI_Handler(void) { } void HardFault_Handler(void) { while (1) { } } void MemManage_Handler(void) { while (1) { } } void BusFault_Handler(void) { while (1) { } } void UsageFault_Handler(void) { while (1) { } } void SVC_Handler(void)...
Działa!!! :D - Dziękuje Wam przeogromnie. Rzeczywiście dodanie "const" rozwiązało problem. przy okazji: po załadowaniu pełnego obrazu 320*240 miałem dziwny błąd, bo obraz na wyświetlaczu ładował się tylko w "połowie". Okazało się, że wewnątrz funkcji rysującej obraz miałem zmienną "licznik_pikseli", która uległa przepełnieniu - mikrokontroler ponownie...
Witam, Wykonuje projekt w którym za pomocą kontrolera magistrali CAN MCP2515 łączę się z magistralą CAN mojego pojazdu i dostaje ramki danych. Następnie chcę je zapisywać na karcie SD. Obydwie operacje tj. odbieranie ramek danych z sieci CAN pojazdu oraz zapis danych (jakichkolwiek na chwilę obecną) na karcie SD udaje mi się wykonać z sukcesem ale w...
W jaki sposób debugujesz? Po wystąpieniu błędu wykonanie programu nie ląduje u Ciebie w HardFault_Handler? To standardowa funkcja z HALa. Gdyby lądowało to wtedy w oknie podglądu debuggera widać byłoby "skoki". Nie dam głowy, że zawsze tak musi być przy błędzie, ale parę razy korzystałem z tej "naturalnej" pułapki. W niektórych miejscach zaczynasz kopiowanie...
Witam, Mam podpięte ZL26ARM z STM32F107 do OpenOCD i Eclipse Dodałem now procesor i platformę do Contiki. Chcę odpalić ethernet. Sprzęt zainicjalizował się dobrze bo w buforze mam ramki ARP od komputera. Problem jest natomiast taki że po kilku sekundach od puszczenia kodu, program ląduje mi z HardFault Handler. Nie bardzo wiem jak podejrzeć skąd on...
Witajcie, Mam taki problem, w moim hobbystycznym projekcie, ze kilka razy program zaliczył hard fault sygnalizowany na razie tylko zaświeceniem leda. Całość to kontroler lotu quadrocoptera, na razie w locie takie coś się jeszcze nie zdarzyło, niemniej chciałbym tego uniknąć. Generalnie trudno jest z powtarzalnością błędu, dzisiaj kontroler był włączony...
Witajcie, Pracuję na STM32 CL i do końca nie rozumiem zachowania się openocd. Plik mam poprawnie skompilowany (z przkładów freddiego ). W eclipsie sekcje GDB_Hardware Debugging mam ustawiona następująco: main->C/C++ Application: {wkazanie pliku: stm32_blink_led.elf} Debugger -> GDB command -> arm-none-eabi-gdb.exe Debugger...
Witam Pisze programy w programie TrueStudio firmy Atollic i mam dziwne objawy. Program się kompiluje jednak przy debugowaniu czasami wchodzi w przerwanie void HardFault_Handler(void) Korzystam z bibliotek CMSIS. Problemy występują głównie gdy chcę skorzystać z funkcji sprintf. Darmowa wersja programu ma niby działać z programatorem ST-Link ja korzystam...
Od kilku dni próbuję uruchomić FreeRTOS i zamigać diodami na zestawie Hymini z procesorem STM32F103VCT6. Używam Eclipse Juno oraz Sourcery G++ Lite 4.6.3. Projekt kompiluje się poprawnie. Wcześniej program zatrzymywał się na przerwaniu HardFault_Handler. W pliku FreeRTOSConfig.h dodałem więc linie #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler...
Używam obszaru pamięci podtrzymywanej z baterii. Jeżeli mam coś takiego: [syntax=c] uint32_t adr; adr=*(ram+CONF_BASE+XSAMPLE); [/syntax] to jest ok, ale jeżeli zrobię tak: [syntax=c] uint32_t adr; adr=*(ram+CONF_BASE+XSAMPLE); if(adr>31 || adr==0) adr=1; zm1=*(ram+CONF_BASE+XSAMPLE+adr+1); [/syntax] to w ostatniej linijce program ląduje w HardFault_Handler...
Dzięki za szybką odpowiedź. Ja niestety dopiero teraz miałem okazję zajrzeć. zakładce startup na samym dole - "Set breakpoint at" i doklikujesz pod tym "Resume" - u mnie takie opcje są normalnie dostępne. No w moim eclipsie tego nie ma. Na dole mam Run Commands, pod tym przycisk Variables i Apply i Reset -nic więcej Zmieniłem initialization command...
jak chce regulować PID i mam podgląd w debuggerze na program to zawiesza mi sie i pokazuje, że jest to funkcja: [syntax=c] void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } } [/syntax] wydaje mi sie ze problem lezy w PID bo jak to wykomentuje to wszystko dziala jak nalezy. czyli wywolywać PID np...
Witam W nowym linaro odblokowana jest opcja -flto (link time optimization), chciałem wypróbować jak to działa, no i właśnie projekt się nie kompiluje :( bez lto oczywiście działa. Błędy to NMI_Handler' referenced in section `.isr_vector' of out/startup_stm32f40xx.o: defined in discarded section `.text' of out/stm32f4xx_it.o (symbol from plugin) dla...
Działa. Wystarczyło zmienić szukany znak z backslasha na '\n'. Ostatecznie modyfikacja wygląda nastepująco: if (character == '\n') { __fputc_('\n', stream); __fputc_('\r', stream); continue; } Dopracowałem rownież funkcje usart_put_char, zamiast wprowadzać delaya sprawdzam flage czy UART zakończył poprzednią transmisję....
Cześć, Platforma: STM32F769I-DISCO OS: FreeRTOS Środowisko: System Workbench for STM32 Próbuję zaimplementować PTP na podanej platformie, jednak od dłuższego czasu męczę się z regularnie pojawiającym się Hard Faultem. Jak zdołałem wybadać, błąd pojawia się prawdopodobnie, gdy upłynie czas jednego z timerów programowych, które są tworzone. Tworzonych...
Tak jak piszesz dodałem zmiane pinu który pierwotnie jest w stanie wysokim do: [syntax=c]void HardFault_Handler(void){ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); }[/syntax] i się nie zmienia. Oto co się wykona : [syntax=c]void SysTick_Handler(void){ HAL_SYSTICK_IRQHandler(); } void HAL_SYSTICK_IRQHandler(void){ HAL_SYSTICK_Callback(); }[/syntax]...
Witam. Od paru godzin próbuję ujarzmić programowanie STMa (konkretniej motyl - STM32F107). Postanowiłem zaprogramować go telnetem przez OpenOCD. Ściągnąłem Keila, wrzuciłem mu bezpośrednio projekt migającej diody z www.stm32.eu (żeby było, że na pewno działa binarka :) ) odpaliłem OpenOCD Open On-Chip Debugger 0.4.0 (2010-02-22-19:05) Licensed...
Witam Jak wyliczyć coś takiego za pomocą preprocesora ? Criterion for valid user code: The reserved Cortex-M0 exception vector location 7 (offset 0x 0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The bootloader code checksums...
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...
Witam. Mam dziwny problem z typami float na Stm32f4 pod keilem. Mianowicie poniższa funkcja w zależności od ustawienia "Use FPU" w ustawieniach działa lub nie(tzn. z ustawionym przechodzi do "HardFault_Handler"). [syntax=c] static void fpu_enable(void) { #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL...
Cześć, void dupa() { ; } int main() { dupa(); int test; //FILINFO Info[1000]; while(1) { ; } return 0; } Jeśli odkomentuję deklarację tablicy FILINFO Info , to przy wejściu do funkcji dupa(); wyskoczy wyjątek, który przenosi sterowanie do HardFault_Handler() . Dzieje się tak niezależnie...
Handler: [syntax=c] void HardFault_Handler(void) { HAL_DbgUartInit(); // __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" ); while(1); } [/syntax] UART Init: [syntax=c] void HAL_DbgUartInit()...
Korzystam z przykładowych projektów dostarczonych przez ST w programie IAR. Po lewej stronie okna programu znajduje się okienko z drzewem folderów i pośród nich znajdują się dwa pliki ze 'startup' w nazwie: startup_stm32f10x_md.o i startup_stm32f10x_md.s (zawartość plików znajduje się poniżej). To o te pliki chodziło? Zawartość dość znacznie się różni....
Program się tam nie zaczyna. Tam programator ładuje Twoją binarke i tam zaczyna się tablica wektorów. Ale zdecydowanie nie program :) Taki trochę skrót myślowy ;) Jeżeli chcesz tablica wektorów była zgodna z wpisami w elf-ie to musisz (przykład ze startupu STM-a gdzie tablica jest w pliku asemblerowym) Skrypt linkera: /* ENTRY(Reset_Handler)...
Trzeba było dodać ';' przed wklejeniem. Otrzymany plik rozmiary.txt. 00000428 d impure_data 000000e0 t SetSysClock 000000d4 T __register_exitproc 0000008c T SystemInit 00000048 T __libc_init_array 00000034 W Reset_Handler 00000034 T __libc_fini_array 00000018 t register_fini 00000010 T atexit 00000006 T main 00000004 R _global_impure_ptr 00000002 W...
Rejestry: r02100437 r10 r20 r32097609 r41 r52100624 r62 r7536871932 r80 r90 r100 r110 r120 sp0x200003fc lr-3 pc0x200476 <HardFault_Handler()+4> xPSR16777219 d00 d10 d20 d30 d40 d50 d60 d7-nan(0xfffff00000000) d80 d90 d100 d110 d120 d130 d140 d15-nan(0xfffff00000000) fpscr0 msp0x200003fc psp0x2004ffd0 primask0 basepri0 faultmask0 control0 s00 s10...
Nie da rady (brak połączenia do sprzętowego RESET) - mogę najwyżej "soft_reset_halt". Da radę bez sprzętowego połączenia reset. Jeśli nie da, to przestań grzebać w skryptach których nie rozumiesz i zmieniać domyślne opcje. Zresztą - tak naprawdę istotne jest tylko samo "halt". Generalnie widzę że niektórzy nigdy się nie zmienią i naprawdę lubią sobie...
Program zachowuje się gdyby chciał a nie mógł skorzystać z SysTick_Handler. Najpierw kod: http://obrazki.elektroda.pl/6717645500_1... Przy zmniejszeniu ilości taktów na przerwanie w systicku i debugowaniu po kroku przerwanie w ogóle nie występuje. A gdy przy w/w kodzie ma być wywołane przerwane (via step to line) program wiesza się w...
W końcu przysiadłem do tematu i freeRTOS śmiga.. Odnośnie przerwań to w pliku stm32f10x_it.c dodałem po prostu odnośniki do fukncji FreeRTOS'a: - SVC_Handler, - PendSV_Handler, - SysTick_Handler. Ale mam teraz problem bo nie mogę tu dojść ze stosem.. Często wchodzi mi w HardFault_Handler.. Ciężko to zdebugować ale chodzi zapewne o stos.. Jak coś zmienię...
Wydaje mi się że mnie plik wygląda okay [syntax=c] /** ****************************************... * (at)file startup_stm32f030xc.s * (at)author MCD Application Team * (at)version V2.3.0 * (at)date 27-May-2016 * (at)brief STM32F030xc/STM32F030xb devices vector table for Atollic TrueSTUDIO toolchain. * This module performs:...
Fakt są tam nazwy funkcji - jakoś na plik cr_startup_lpc11xx.c nie zwracałem uwagi :) void MOJA_OBSLUGA_INT3_IRQHandler (void) ALIAS(IntDefaultHandler); oraz w main obsługa przerwania na: [syntax=c] // obsluga przerwania od portu GPIO3 void MOJA_OBSLUGA_INT3_IRQHandler (void) { // kod obsługi przerwania... } [/syntax] ale podczas kompilacji nadal dobija...
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
1. Rozumiem że celowo startujesz transmisję 1000 razy na sekundę - o ile nie zminiłeś ustawień systicka? 2. Dlaczego nie właczysz przerwania funkcjami CMSISowym NVIC_EnableIRQ(I2C1_EV_IRQn); Te funkcje w HALu są mi nieznane (nigdy nie korzstałem) 3. Czy masz zdefiniowany wektor w tablicy? Zależy jaki masz startup w toolchainie (może to oczywiście być...
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. *...
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...
Problem wynika z tego, że w Cortexach jeden ze stosów jest inicjalizowany SPRZĘTOWO, po resecie, tak samo pobierany jest adres funkcji Reset_Handler(). Problem o którym piszesz jest znany i polega na tym, że procka resetujesz, on w tym momencie wczytuje sobie SP oraz adres funkcji Reset_Handler(), a następnie programujesz do niego coś nowego, zupełnie...
Zwiększyłem pojemność stosu, lecz jednak nic to nie dało.. Program wiesza się w tej funkcji, a dokładniej, w momencie wyjścia z niej wchodzi do HardFault_Handler. Dziwna sprawa dzieje się przy pętli for. W momencie, gdy debugger wchodzi w linijkę "for(i=0; i<=((dim_x*dim_x)-1); i++)" od razu uzupełnia tablice "K_Data" bez inkrementowania w pętli...później...
Zmieniłem : 2. change The initial stack pointer in the vector table: (void *)&pulStack[STACK_SIZE-1]... to (void (*)(void))((... long)pulStack + sizeof(pulStack)), w startup_stm32f10x_md_vl.c Dalej to samo. [syntax=c]/** ****************************************...
Witam. Aktualnie walczę z kompilatorem GCC non-eabi. Chcę utwożyć projekt w C++ używając własnego skryptu linkera, jednak po długiej walce nie mam już pomysłu na rozwiązanie. W jaki sposób skonfigurować kompilator, linkera oraz skrypt linkera tak abym mógł własne tablice zdefiniowane w plikach .cpp wstawić w wybrane prze zemnie miejsce w pamięci? Wersja:...
Rzeczywiście wystarczyło to zaznaczyć i jest już lepiej, przynajmniej próbuje coś kompilować :) Niestety pojawił się kolejny problem, tym razem chyba trudniejszy do rozwiązania. GCC strasznie nie podoba się plik startup... [syntax=c];******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s...
Czołem! Chyba znowu utknąłem w bojach z STM32F2. Wysyłam taką komendę: openocd -f interface/jtagkey.cfg -f target/stm32f2x.cfg -c "init; reset halt; flash write_image erase out/test.hex; reset run; shutdown" i dostaję odpowiedź: Open On-Chip Debugger 0.5.0 (2011-12-03-10:15) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxyge...
Więc tak: _BOOT_START = 0x20001C00 _BOOT_END = 0x200022E8 Boot_load_start = 0x080197D8 próbowałem także memcpy() efekt jak poprzednio. zapełniałem także pamięć wartościami [syntax=c] uint32_t zmlicz = (uint16_t*)ex_end - (uint16_t*)ex_begin; do { *ex_begin = 0x55aa; ex_begin++; zmlicz--; } while(zmlicz); [/syntax] Efekt: [syntax=c] 0x20001FD0 55AA55AA...
W skrypcie linkera zmieniłem rozmiary stosów : __main_stack_size = 2048; __process_stack_size = 2048; Do projektu dołączyłem biblioteki gcc: #include <errno.h> #include <sys/types.h> oraz funkcję _sbark: caddr_t _sbrk (int size) { extern char __heap_start; extern char __heap_end; static char *current_heap_end = &__heap_start;...
MCBSTM32C\emWin\Template i sterowniku LCD_X_SPI_STM32.c......już to przerabiałem i chyba wszelakie pomysły co do plików template również. Dzięki za pliki. Mianowicie w pliku LCDConf.c jest taka definicja [syntax=c]extern void LCD_X_Write00_16(U16 c); extern void LCD_X_Write01_16(U16 c); extern U16 LCD_X_Read01_16 (void); extern void LCD_X_WriteM01_16(U16...
Witam wszystkich. Od jakiegoś czasu ćwiczę STMy. Przyszedł czas na bootloader, ale stanąłem w zasadzie na początku drogi. Mój zestaw to: - ARM GCC (Linaro) w wersji 4.7 2012q4 - CooCox - STM32F4 Discovery - przykład AN3965 "STM32F40x/STM32F41x in-application programming using the USART" Po kolei: - istniejący i działający program zlinkowałem z użyciem...
Cześć, Mam problem z uruchomieniem USB w Eclipse niestety mam również problem z debugowaniem pod OpenOCD więc na razie diody ;/.. Na razie chcę jedynie migać diodą i próbuję do tego dołączyć przerwania od USB. Wszystkie przerwania i konfigurację wziełem z programu który działał mi pod uVision jednak ze względu na ograniczenie w rozmiarze kodu postanowiłem...
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 ****************************************...
Debugger coś mieszał. Podłączyłem ulinka i zaczelo śmigać... Ale mniejsza - teraz trafilem na znacznie gorszy error ;/ Mianowicie napisałem sobie ISRa który daje semafor funkcją xSemaphoreGiveFromISR(). Konfiguracja priorytetów 4:4. configMAX_SYSCALL_INTERRUPT_PRIORITY = 9 ISR ma priorytet 10 Grzebanie w NVICu jest w sekcji critical. Niestety funkcja...
Dzięki freedi miałeś racje. Patrzyłem na kolejność przerwań w tabeli f0 ale nie na adresy. Aby zapełnić luki i poprzesuwać adresy dodałem brakujące reserved handler Dodano po 11 Teraz tylko muszę rozwiązać skąd mi przerwań multum nadchodzi i w nierównych odstępach od timera. Bo pwm wyprowadzone jest na jedną diodę a przerwanie zmienia stan innej diody....
Bawienie się we wlasne tablice to zawracenie wody w Wiśle i proszenie się o kłopoty już na początku masz błedy [syntax=armasm] .word _estack (void*) STACKEND,// adres stosu .word Reset_Handler main, // reset .word NMI_Handler 0, // NMI .word HardFault_Handler 0, // Hard Fault .word MemManage_Handler 0, // Mem manage .word BusFault_Handler 0, // Bus...
Witam Uruchomiłem na STM32F107 stos LWIP korzystajacz z przykladu z ksiązki stm32 w sieci ethernet, natepnie dodałem serwer http z paczki contrib LWIP. Wygląda na to, że wszytsko dziła, pingi lecą, strony www sie ładują. Nastepnie uruchomiłęm bootloader ethernet z przykałdów od ST. Tak wyglądą start Dodano po 56 okazła sie że procerk ląduje w HardFault_Handler,...
Domyślne, nie zmieniałem niczego. Skrypt linkera: [syntax=asm] /* Entry Point */ ENTRY(Reset_Handler) /* Highest address of the user mode stack */ _estack = 0x20004000; /* end of 16K RAM */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0; /* required amount of heap */ _Min_Stack_Size = 0x80; /* required amount of...
Witam, Mam problem z biblioteką USB-FS od STM32. Jako punkt wyjścia wybrałem sobie ich przykład z biblioteki dla Device Firmware Upgrade (wcześniej bezproblemowo pracowałem z USB HID). Przerobiłem ich projekt pod swoją płytkę (korzystam z ZL31ARM + własna płytka przyłączeniowa z obsługą USB). Wszystko się już ładnie kompiluje, sprzęt jest wykrywany...
Cześć, walczę od jakiegoś czasu z resetami mikrokontrolera. Generalnie historia jest ciekawa, bo mam sterownik, w którym siedzi STM32F103, mam poprzedni bootloader i firmware, na którym resetów nie ma, dodałem trochę swoich zmian, posprzątałem kilka rzeczy, które wypadły z użytku i coś zaczęło się sypać :-/ Na moje oko nie widzę z czym może być problem,...
Używam sobie takiej chińskiej płytki: http://obrazki.elektroda.pl/8610848000_1... aby ten mikrokontroler zadziałał z zewnętrzną pamięcią RAM jako pamięcią danych programu?
Poczytałem manuala do JTAga i spróbowałem wgrać kod przez OCD. Wywołuje go z parametrami: -f scripts/interface/ftdi/jtag-lock-pick_ti... -f target/stm32f1x.cfg -c "adapter_khz 1000; reset_config trst_and_srst; init; reset init; flash write_image erase C:/ARM/project_eclipse/stm32_timer/out/s... reset run; shutdown;" Otrzymuje błędy:...
stm32 hardfault except handler error handler
sterowanie kątem zapłonu programowanie lenze kable lustra
aktualizacja radio 7018b 7018b firmware
Chrysler Sebring nie kręci rozrusznikiem - przyczyny Aktualizacja map w nawigacji Modecom MX4