(at)_lazor_ Reset Handler Raczej ciężko nazwać to przerwaniem.
Tak rzeczywiście zauważyłem właśnie, że main_stack_size był wyzerowany, więc przerwania nie miały prawa działać poprawnie. Jednak spróbowałem wpisywać jedną z kilku różnych wartości i w to miejsce i nie pomogło. Jak patrzę na tą tablicę wektorów w pliku vectors.c, to pierwszym elementem jest adres końca stosu, a potem jest reset handler itd. A jak patrzę...
No ale jak zrobisz takie przyporządkowanie o jakim piszesz (bez podziału) to funkcja Reset_Handler ma adres w RAM, więc w tablicy wektorów będzie adres w RAM. Oczywiście zanim ten Reset_Handler się uruchomi, to w RAM nic nie ma - tak więc to nie ma prawa działać... 4\/3!!
Mam problem z tym call i ret mam taki kod: ldi R16, 0x00 Co jest źle? W przypadku procesorów AVR zawsze na sam początek musisz ustawić stos w odpowiednim miejscu w pamięci programu. Praktycznie każdy program więc zaczyna się (dla atmega32) od rozkazów ustawiających stos. Za manualem str 45: Address Labels Code Comments $000 jmp RESET ; Reset Handler...
Ten fragment skryptu linkera jest "ciekawy": DISCARD : { libc.a(*) libm.a(*) libgcc.a(*) } Flagi na które zwrócił Ci uwagę (at)GrzegorzKostka nie są żadnym problemem, wiec możesz je zostawić. Dodaj do skryptu linkera (gdzieś na początku) coś takiego: OUTPUT_FORMAT("elf32-littlearm&... "elf32-bigarm",...
Tylko tak dla ścisłości... Wektory przerwań używają rozkazu jmp (nigdy rjmp)... The most typical and general program setup for the Reset and Interrupt Vector Addresses in ATtiny2313 is: ..... 0x0000 rjmp RESET ; Reset Handler 0x0001 rjmp INT0 ; External Interrupt0 Handler 0x0002 rjmp INT1 ; External Interrupt1 Handler ..... Tak więc RJMP czy JMP zależy...
[syntax=c]RCC->CFGR &= (uint32_t)0x88FFC00C; RCC->CR &= (uint32_t)0xEEFEFFFE; RCC->CR &= (uint32_t)0xFFFBFFFF; RCC->CFGR &= (uint32_t)0xFF02FFFF;[/syntax] Brawo i kto będzie to czytał? Ale mało ambitnie podszedłeś do tematu bo kopiuj wklej z HAL-a. Napisz sam, bo na razie to taki Twój "własny" szablon, jak cesarza Japonii. Gdzie jest reset handler?
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...
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...
Z całym szacunkiem ale jestem przeciwnego zdania. Zdarza mi się bowiem używać skoku na 'reset handler' np. przy błędach assercji. Wystarczy nie robić tak ryzykownych rzeczy, tylko po prostu zresetować układ za pomocą odpowiedniego rejestru w NVIC. Zajmie to dokładnie tyle samo pamięci, tyle że w odróżnieniu od takiego skoku na pewno będzie działać...
Ja myślę, że w skrypcie linkera nie masz nigdzie dyrektywy ENTRY(), która jako parametr zawiera nazwę funkcji wywoływanej po resecie (handler resetu). Bez tego w istocie kompilator stwierdza, że cały program jest zbędny. Zerknij tutaj - http://www.elektroda.pl/rtvforum/topic13... - i popatrz jak jest zrobiony skrypt linkera. Z nim naprawdę nie...
Problem udało się rozwiązać. Jest to program w tzw. "bare metal" tworzony w GNU Macro Assemblerze. Wygląda na to, że jako szablon wziąłem ustawienia z Blue Pill, a skoro działało z ST-LINK, to niczym się nie przejąłem. Dopiero teraz, gdy odłączyłem programator, okazało się, że to był błąd i Macro Assembler źle inicjował tablice wektorów dla STM32H7....
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...
Ok, wydaje mi się że przewalczyłem ten problem. Tzn teraz mam plik *.ld (sam zedytowałem jakiś znaleziony w bibliotekach STM32) i dodałem tablicę wektorów znajdującą się w w pliku stm32f10x_it.c. (chodzi mi o to by wykorzystać biblioteki bez przeróbek). Wszystko się teraz ładuje do Flasha z tym że jak debuguję to procesor skacze po programie. Tzn wchodzi...
(at)_lazor_ W tym wątku nie chodzi o to. Tłumaczyłem (at)PiotrLenarczyk że toolchain C musi robić wszytko to czego wymaga od niego standard wybranego języka - w tym przypadku C. Na pewno main jako reset handler nie spełnia tych wymogów. (at)PiotrLenarczyk mógł przez ten czas jak nie pisał poczytać trochę, uzupełnić wiedzę, zobaczyć dlaczego to co napisał...
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...
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. *...
1. ponieważ przycisków raczej się nie robi w przerwaniach zewnętrznych (mozesz dostać kilkadziesiąt przerwań przy jednym nacisnieciu), tylko w przerwaniu timera, lub w petli głównej (jezeli jest). 2. Jeżeli masz debuger to wstaw breakpoint do przerwania to zobaczysz czy wchodzi jak nie to tylko zapal diode a pozniej daj while(1); to zobaczysz czy wchodzi....
(at)Freddie Chopin lepiej więcej czytać i oglądać niż nic. Cały ten temat to skutek: https://www.elektroda.pl/rtvforum/topic3... gdzie Autor uznał że te wszystkie startupy są zbędne, a najlepszym Reset Handlerem jest "main"
Może za krótko czekasz po włączeniu zasilania i próbujesz komunikować się/inicjalizować zewnętrzne urządzenie zanim zdąży zakończyć sekwencję POR. Mogę tylko gdybać bo nie wiem co masz do tego uC podłączone, ale widać że jakieś magistrale szeregowe masz wyprowadzone. No ale koniec sekwencji POR oznacza wykonanie kodu z Reset Handler ? [syntax=c]int...
Wywal w jasną cholerę tą bibliotekę! Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __use_two_region_memory ;wlaczamy wszystkie zegary :] ldr r0,= 0x00000557 ;r0: data ldr r1,= 0x40021000 ;r1: base addr: rcc reg ldr r2,= 0x14 ;r2: offset: rcc_ahbenr str r0,[r1,r2] ldr r0,= 0x000059fd ;data ldr r2,=...
Twój program jest źle skompilowany, bo nie używasz skryptu linkera, który jest zasadniczo niezbędny. Jakbyś go zdezassemblował, to zapewne kod będzie pod jakimś abstrakcyjnym adresem. W przykładach masz dobry skrypt linkera i Makefile, który skompiluje również Twój plik assemblerowy - proponuję wtedy jednak nazwać funkcję "Reset_Handler". Poza tym przed...
No właśnie. Main de facto jest wywoływany ze startupu. Dokładniej z Reset Handlera. Żeby go mieć musisz mieć tablicę wektorów... błędne koło :) Wbrew pozorom main nigdy nie jest punktem startowym całego programu.
Build przebiega pomyślnie Raczej niezbyt: d:/codesourcery/bin/../lib/gcc/arm-n... warning: cannot find entry symbol Reset_Handler; defaulting to 08000000 W Twoim projekcie jest pełno plików, ale startupu to ja tam nigdzie nie widzę (przynajmniej w komendzie linkowania). Bez niego oczywiście...
w ISR - robię (robiłem): void DMA2_Channel3_IRQHandler(void) { DMA_ClearITPendingBit(DMA2_IT_GL3 | DMA2_IT_TC3); Switch_DAC_Tables(); } miałem złe przeczucia dot. stosu(ów) i faktycznie jeden z problemów był ze stosem. mianowicie źle został zainicjowany PSP. Ostatecznie zrezygnowałem z kombinowania z drugim stosem wrócę pewnie do tego jak więcej poczytam...
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...
Otwórz Notatnik i wklej: Task: {293DB03E-DAE9-433B-B6CA-455E738A97C4} - System32\Tasks\Microsoft\Windows\Mainten... => Rundll32.exe C:\PROGRA~1\COMMON~1\System\SysMenu.dll ,Command701 update2 <==== ATTENTION Task: {BE4CCC0B-4D91-4736-9B2E-34E0EB967F99} - System32\Tasks\Microsoft\Windows\Multime... => Rundll32.exe C:\PROGRA~1\COMMON~1\System\SysMenu.dll....
A będziesz z takowych korzystał? <: Jest inna opcja - tworzysz dwa osobne projekty. Jedyna zależność między nimi jest taka, że ten pierwszy ("zwyczajny") może uruchomić ten drugi ("bootloader") poprzez skok pod adres początku tamtego (lub jakiś inny znany i stały adres). Projekt bootloadera będzie miał po prostu skrypt linkera w którym pamięć flash...
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...
próbowałem wyłączyć MAM i nic nie pomogło. PLL mam włączone na 60MHz, timingi ustawione na 3, ale próbowałem nawet na 7 i też nic nie dało. Dodam że jak wgrywam program H-jtagiem bez debuggowania, to działa prawidłowo. Gdy zakomentuje konfigurację PLL to można debugować, ale to mnie nie urządza. Dziwną sprawą jest, że gdy CPU działa na 60 MHz to okienko...
Nie wiem jakiego procesora używasz. Ale w podręczniku użytkownika The boot loader code is executed every time the part is powered on or reset. The loader can execute the ISP command handler or the user application code. A a LOW level after reset at the P0.14 pin is considered as an external hardware request to start the ISP command handler. Wiec aby...
;sprobuj tak: .include "8535def.inc" .def temp = r16 ;bufor pomocniczy .def temp1 = r17 ;jak wyzej... .org 0x000 rjmp RESET;Reset Handler .org 0x006 rjmp TIM1_COMPA;Tmier/Counter 1 Interrupt handler .org 0x011 RESET: ldi temp, high(RAMEND) out SPH, temp ldi temp, low(RAMEND) out SPL, temp ;Ustawienie wskaznika stosu ser temp out DDRC, temp out PORTC,...
Jak uruchomić STM32 z FLASH by działał później w pamięci RAM. Dedykowane dla Keil: - plik startup_stm32f10x_xx.s Ułatwię niektórym czasu i szukania w necie rozwiązań flashowania z poziomu własnego bootloadera pamięci programu. Ja przyznam szczerze nie znalazłem żadnego opisu w necie, wobec czego napisałem własne rozwiązanie. Jako że asembler ARMów to...
Nie wiem z czym masz dokładnie problem, ale bawiąc się kiedyś w asm napisałem program zmieniający wypełnienie na PB1 (OC1A) w zależności od wartości odczytanej z przetwornika A/C. Może okaże się Tobie pomocny: #include "m8def.inc" .def acc = r16 .def result = r17 rjmp RESET ; Reset Handler reti ;EXT_INT0 ; IRQ0 Handler reti ;EXT_INT1 ; IRQ1...
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)...
Od trzech dni bawię się ARM AT91SAM7x256 i RTOS. O RTOS nie wiem nic. Analizując program z www.freertos.org doszedłem co gdzie zmienić żeby dane które chce pojawiały sie w przeglądarce na PC, może ktoś zna odpowiedzi na te pytania: 1. RTOS w AT91SAM i w ogóle "system czasu rzeczywistego" w mikrokontrolerach polega na wywoływaniu wewnętrznego przerwania...
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...
jeśli sniffujesz komunikaty UART, gdy PhoenixMC otwiera com i wysyła polecenie restartu / trybu pobierania: gif https://obrazki.elektroda.pl/6773669000_... w przypadku akceptowalnego oprogramowania sprzętowego urządzenie potwierdzi tę odpowiedź gif https://obrazki.elektroda.pl/3953698800_... https://github.com/openshwprojects/OpenX...
To jest startup: .section .vectors, "ax" .code 32 .align 0 .global _vectors .global reset_handler /***************************************... Exception Vectors ****************************************... _vectors: #ifdef STARTUP_FROM_RESET ldr pc, [pc, #reset_handler_address...
Więc - na przykłądzie przerwania zewnętrznego: 1. Musisz zdefiniować w wektorze przerwań skok do obsługi tego przerwania którego chcesz używać - np. przerwanie zewnętrzne INT0 .cseg .org $0000 rjmpstart ;Reset handler .org INT0addr rjmpext_int0 ;External interrupt handler 2. pod etykietą ext_int0 musisz napisać podprogram obsługi tego przerwania nie...
No cóż nie ma co iść na łatwiznę. Wyszukałem projekt MIDI Merger 2 IN do 1 OUT. Problem w tym że ma tylko 2 wejścia. Toteż trzeba go rozbudować. Wrzucam schemat (dorysowałem gdzie myślę zrobić kolejne wejścia. Jest też kod do PIC16F88 obsługujący 2 IN. ; $Id: main.asm 224 2008-03-27 19:53:03Z tk $ ; ; Source Code of MIDI Merger ; ========================================...
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...
Zauważyłem, że jezeli w procedurze odblokowania opuszcze krok wyłączenia i włączenia zasilania, to kiedy zrestartuje openocd, to mogę się połączyć przez telnet, tylko dalej coś jest nie tak bo np. zgłasza błąd przy poleceniu reset halt > reset halt 500 kHz cortex_m3 reset_config vectreset Resetting Core Peripherals JTAG tap: lm3s.cpu tap/device found:...
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,...
U mnie tak to wygląda: /***************************************... Reset handler ****************************************... reset_handler: ldr r10, =REG_BASE /* Set up FLASH wait state */ ldr r0, =(50 << MC_FMR_FMCN_BIT_OFFSET) | MC_FMR_FWS_1FWS str r0, [r10,...
Wygląda to tak, nie posiadam takiej wiedzy żeby tu coś samemu zmieniać może powiesz mi co jest nie tak :) [syntax=c] .syntax unified .cpu cortex-m7 .fpu softvfp .thumb .global g_pfnVectors .global Default_Handler /* start address for the initialization values of the .data section. defined in linker script */ .word _sidata /* start address for the .data...
Przesyłam pliki LST i MAP z działającego programu, wgranego przez bootloader. Jak dla mnie to nie wiem gdzie czego szukać więc proszę o pomoc to i trochę się czegoś nauczę. To chyba sporo wyjasnia: [syntax=c]RESET 0x00002000 Section 356 lpc2400.o(RESET) Undef_Handler 0x00002040 ARM Code 4 lpc2400.o(RESET) SWI_Handler 0x00002044 ARM Code 4 lpc2400.o(RESET)...
choć wystarczyłaby jedna, która - co za zaskoczenie - już jest gotowa i używana w startupie do inicjalizacji .data. Patrzymy ma kod z inicjalizacji H7 do Twoich zestaw zmitologizowanych zasad Masz swoje zdanie - pozostań przy nim i napisz własny post z odpowiedzią - przecież to lepsze dla pytającego oraz dla całego forum jak będzie więcej odpowiedzi...
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:...
"Stepowanie" przez wektory przerwań nie do końca jest dobrym pomysłem niestety... Musiałbyś sobie ustawić breakpointa na pierwszej instrukcji reset handler'a (albo po prostu ustawić PC na odpowiedni adres) i dopiero wtedy można jakiś stepping wykonać sensowny... 4\/3!!
Nie - w nowych przykładach RAM przeznaczony na stosy jest zerowany podczas Reset_Handler - przed wywołaniem main(). Po resecie nie masz gwarancji, że w RAMie są same zera.
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...
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...
Pokaż cały kod - inicjowanie, main, Reset_Handler i tablicę adresów wyjątków. Im dłużej patrzę w te kawałki, które podsyłasz, tym więcej mam podejrzeń.
Dodano po 31 Kiedy debuguje program, krokowo, zaraz po a = 124; z linii b = log10(a); wskakuje do nieskończonej pętli - void HardFault_Handler(void). Tak jakby sam adres procedury wywoływał błąd sprzętowy.
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]/** ****************************************...
Hej Freddie, tym razem to już mam poważny problem i proszę Cię o pomoc. Problem mam cały czas z przerwaniami. Nigdy mi w sumie tak naprawde nie zadziałaly na tym projekcie od stm. Przerobiłem Twoją tablice wektorów przerwań: /** \file vectors.c * \brief STM32 (STM32F101 - STM32F103) vector table and __Default_Handler() * \details STM32...
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...
To co jest w tym pliku zip na pewno nie miga diodą (niczym innym zresztą tez nie) W pętli while jest następujący kod, którego brakło w paczce: [syntax=c] while (1) { /* USER CODE END WHILE */ HAL_Delay(1000); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); /* USER CODE BEGIN...
Witam, mam problem z implementacją projektu z załącznika (docelowo WinArm/miganie dioda) na CrossWorksie i mikrokontrolerze AT91SAM7X256(konkretnie SAM7-EX256 olimex.dev). Przy linkowaniu dostaje blad : Building “faty_z_ksiazki” in configuration “ARM Flash Debug” — 4 errors Assembling Cstartup.S Linking faty_z_ksiazki.elf...
EDIT. Chm, w sumie jest jeszcze inaczej. Układ peryferyjny obsługi pamięci SDRAM i NOR FLASH musi być przecież skonfigurowany po wyjściu z Bootloadera, bo inaczej uruchamiany program by nie działał (skoro jest uruchamiany z RAMu). Idąc tym tropem pomyślałem że w sumie na początek w startupie za dużo rzeczy nie potrzebuję. I "trochę" go uprościłem: [syntax=c].text...
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, //...
void show_as_bin(unsigned char liczba) { char tab[9]; cls(); for(signed char i=7; i>-1; --i) tab[7-i]=0x30 + ((liczba >> i) & 0x01); tab[8] = 0; lcd(tab); } Powinno działać. Cytuję za http://www.nongnu.org/avr-libc/user-manu... If an...
Masz źle skonfigurowany sprzęt, ponieważ włącza ci się bootloader i właśnie dlatego program bez JTAGa nie działa, właśnie dlatego działa tylko jeśli w sesji go załadujesz. Adresy od 0x7FFFD000 do 0x7FFFFFFF są zarezerwowane dla booloadera, który odpala się jeśli jakiś tam pin po resecie ma konkretny stan. Manual, 19.5: The boot loader code is executed...
Tak Keil uVision Nie no masakra, jak wywalam .sct to dostaję kolejne błędy: Konfiguracja.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'. Konfiguracja.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'. chyba coś pokręciłem :/
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...
Witam no tak... porobiłem testy jak odczytałem sobie vectors[] a z niego Reset_Handler to adres jest 0x080041dd, a nie 0x08004000, poza tym wszystko działa. Czyli łopatologicznie z adresu 0x08004000 odczytuje vectors[1] i tam skacze. Dzięki Pozdrawiam
Coś się w niej zmieniło w zakresie obsługi przerwań? Bo ta wersja postanowiła zignorować wszystkie moje handlery i wrzuciła zamiast nich wszędzie (poza resetem) Default_Handler. (; Dopisane: ah, ta wersja najwyraźniej ma jakiś problem z -flto, po usunięciu tej opcji handlery wróciły na miejsce. Ale w takim razie... starsza generuje mniejszy kod.
Kiedy się podłączam pod Rx0/Tx0 niezależnie od ustawionego baudrate dostaję w Flash Magicu error "Failed to autobaud - step1" W jaki sposób podłączasz ? Masz wyprowadzone gdzieś P0.2 (TXD0), P0.3 (RXD0), dodatkowo P2.10 ? By wejść do bootloadera przez UART: The flash boot loader code is executed every time the part is powered on or reset. The loader...
Klawisz Windows + R. W oknie Otwórz wpisz dxdiag. Uruchom diagnostykę i przejrzyj wyniki. A czego konkretnie mam tam szukać? Wersja Windows to 22H2. Ktoś mi też polecał zejść na 22H1, ale nie wiem czy to ma jakiś sens. ------------------ System Information ------------------ Time of this report: 7/13/2023, 21:48:59 Machine name: DESKTOP-O44TVMT Machine...
Pojawił się kolejny mały już problem ale nie wiem jak go wyeliminować. Układ programuje mi się dobrze ale muszę ręcznie go restartować (stm32f4...). Wcześniej dla LPC2478 skrypt programujący miał formę: [syntax=actionscript] -f interface/jtagkey.cfg -f target/lpc2478.cfg -c "reset_config trst_and_srst separate;arm7_9 fast_memory_access enable; arm7_9...
Witam, Za każdym razem w trakcie uruchomiania mikrokontrolera po startowaniu konfiguracji debugowania GDB w eclipse licznik rozkazów skacze do : g_pfnVectors: 00000000: andne r0, r0, r0, lsr #16 <------------- 00000004: muleq r0, r1, r6 00000008: andeq r0, r0, r0 0000000c: andeq r0, r0, r0 a OpenOCD sypie błędami: Info : JTAG...
Dobra, to ja się podczepię: odpaliłem w końcu semihosting, natomiast nie bardzo wiem, co zrobić ze skryptem linkera - bo nie do końca łapię pewne rzeczy: /* Linker script to place sections and symbol values. Should be used together * with other linker script that defines memory regions FLASH and RAM. * It references following symbols, which must be...
Po każdorazowym zaprogramowaniu układu, aby zobaczyć efekt działania programu muszę wypiąć i ponownie wpiąć kabel USB . To zostało już poruszone na liście OpenOCD, jest to przypuszczalnie zachowanie specyficzne dla ST-LINK: http://sourceforge.net/mailarchive/forum... Generalnie po...
wojtekkk09 ma racje zajrzyj na stronę 16 i 291 Important: LOW level on pin P0.14 immediately after reset is considered as an external hardware request to start the ISP command handler. More details on ISP and Serial Boot Loader can be found in "Flash Memory System and Programming" chapter on page 291.
Z tego co zdazylem sie zorientowac to nie ma mozliwosci zapisania pierwszych 4 lub 2 stron (w zaleznosci od wielkosci ich wielkosci). Wiec musialem zrobic maly bootloader i upgrade robic od 4 strony. Co wiazalo sie z 2 rzeczami (korzystam z bibliotek STMa): Ustawieniem wektora przerwan tam gdzie startuje moja aplikacja. NVIC_SetVectorTable( NVIC_VectTab_FLASH,...
Witam! Czy ktoś walczył w CrossWorks z opcją STARTUP_FROM_RESET? Zmieniłem w pliku STM32F10x_Startup.s fragment: #ifdef STARTUP_FROM_RESET .word reset_handler #else .word reset_wait #endif /* STARTUP_FROM_RESET */ na .word reset_handler jednak nawet wtedy procesor nie startuje po zaprogramowaniu i wciśnięciu na płytce reset. Automatycznie startuje jednak...
Dzięki za startupik jest fajnie opisany i napewno sie przyda z tym, że nie rozwiązuje on jeszcze mojego problemu. Chodzi o to, że w keilu funkcje przerwań wywolywane są poprostu poprzez określenie typu: np.: void podpr_obsl_przerw (void)__irq irq jest tu chyba jako makro asemblerowe tylko skąd to nie bardzo wiem pewnie ktoś mnie oświeci :D a teraz jak...
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...
Jeżeli chodzi o debugowanie w Keil, to odmawia mi posłuszeństwa. Debugowałem w Eclipse korzystając z jakiegoś znalezionego serwera to zawsze wpadał mi w Reset_Handler czyli prawdopodobnie się restartuje. Na początku nie brałem tego poważnie pod uwagę stwierdziłem, że proces debugowania jest niepoprawny, lecz teraz widzę, że to chyba nie tylko w debugowaniu...
Witam kolegów, mam dość dziwny kłopot. Poniższy program zawiera jedynie procedury służące do komunikacji Atmega16 z PC. Jest tu obsługa wejściowego i wyjsciowego bufora kołowego o pojemności 255znaków. Pętla główna jest w zasadzie pusta. W celu przetestowania każdy przychodzacy znak jest dodawany do bufora wyjściowego i odsyłany (echo). Program testuje...
A jak już wyląduje w tym HF, to jakie są wartości rejestrów rdzenia? Przejrzałem kompilację u siebie i plik assemblerowy wygląda generalnie ok. Jak w opcjach debuggera odznaczysz opcje "resume", to można debuggować funkcję Reset_Handler(), tyle że trzeba sobie przed zrobieniem czegokolwiek zaznaczyć opcję "instruction stepping mode". Wtedy by można...
Dzięki pomogło, tzn. kompilator nie zgłasza żadnych błędów. Problem polega na tym że teraz bunt podniósł linker: Rebuild target 'Target 1' compiling main.c... linking... motyl.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'. motyl.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'. Target...
Dla odmiany, teraz przy kompilacji przez arm-elf-g++ dostaję: src\main.c||In function 'int main()':| src\main.c|43|warning: statement has no effect| src\main.c|46|warning: statement has no effect| src\main.c|31|warning: unused variable 'i'| src\main.c|33|warning: unused variable 'b'| crt.o||In function `Undef_Addr':|...
1. U mnie samo "reset halt" i "load" w większości przypadków działało... do czasu gdy działać nagle przestało [; A kod różnił się jedynie tym, że main i Reset_Handler były 4 adresy dalej... Czasem działało, czasem nie, z wyłączaniem PLL i MAM przy rozpoczęciu sesji (na razie) działa zawsze. 2. Nie wiem czy zmiana którą zrobiłeś jest dobra - w końcu...
A teraz dowiedz sie czym jest SWI handler i po co on jest wywolywany. Zauwaz, ze do kazdy freeRTOS sklada sie z dwoch czesci: -common -port Wywolywanie SWI jest wlasnie w plikach zawartych w czesci "port". Niestety, w 70% zawsze trzeba grzebnac w tych plikach podczas wstawania tego RTOSa. Popatrz na ROZBIEGOWKE ktora Keil generuje domyslnie dla kazdego...
Troszkę irytował mnie kod startowy jaki zaproponował KEIL dla mojego mikrokontrolera LPC2318. Postanowiłem więc okroić go do niezbędnego minimum. Z tego co poczytałem dokumentację, wynikało iż najważniejsze jest ustawienie adresów stosów dla poszczególnych wyjątków, ustawienie sterty (jeżeli takowej będziemy używać), ustawienie mapowania pamięci, inicjalizacja...
Na swoją stronkę wrzuciłem najnowszą kompilację OpenOCD dla Windows, problem na który się natknąłeś powinien tam być rozwiązany. 4\/3!! Wykonując z konsoli komendę OpenOCD [reset halt] program zatrzymać powinien się zgodnie z plikiem *.map w pozycji wskazywanej przez Reset_Handler=0x0817ec7c a zatrzymuje się na adresie 0x1fff4abe (system memory ? -...
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:...
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,...
Cześć, mam napisać "prosty" program dla ATmegi2560. Po wciśnięciu przycisku na porcie A, ma on zapalić odpowiadającą mu diodę na porcie B. Dioda ma się świecić 1 sekundę a potem ma zgasnąć. Za podtrzymanie świecenia mają odpowiadać przerwania timera1, a program ma się zaczynać od ustawienia flagi przerwania int0. Int0 działa, po wciśnięciu przycisku...
Bezsensu... Ustawić proces kompilacji tak aby generowany był plik .map, a w nim znaleźć co potrzeba: .text.main 0x08000210 0x10 ./main.o 0x08000210 main .text._GLOBAL__I_led 0x08000220 0x18 ./main.o .text 0x08000238 0x5c ./startup.o 0x08000238 Reset_Handler .text 0x08000294 0x50 c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.3.3/...
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...
Ogarniam ten temat dalej i sprawa wygląda następująco: Startup przeskakuje do __main po adres 0x08000120, który wg. zapewnień KEILa jest biblioteką Runtime, która ma sama przeskoczyć do właściwej funkcji int main(); http://obrazki.elektroda.pl/4095483700_1... . Problem polega na tym, że procesor nigdy nie dotrze do tego miejsca. Pętli...
Wygenerowałem sobie prosty projekt na układ STM32F070CBTx w CubeMX i odpaliłem w Keilu. Jedyne co włączyłem w CubeMX-ie to w RCC zegar - zewnętrzny kwarc 12 MHz i USB_FS skonfigurowane jako VCP (CDC). Po załadowaniu do Keila i skompilowaniu programu wgrywam go (J-Linkiem po SWD) do mojego układu na płytce. I nic się nie dzieje, a komputer (do którego...
A dla czego? Pamiętam, że jak kiedyś przygotowywałem strukturę która miała różnej wielkości zmienne (1, 2 i 4 bajtowe), to przy wysyłce struktury nie były ułożone dokładnie jedne za 2 gimi tylko miały wyrównanie do 32 bitów. Ale to może kwestia kompilatora. Robiłem to w uvision. Jestem tak blisko uruchomienia, a nie mogę sobie poradzić... Usunąłem więc...
Wywala sie przy wyjsciu z przerwania 0x000013ac <ADC_IRQHandler+92>: pop {r4, r5, r6, pc} BUG: couldn't calculate PC of next instruction, current opcode was 0x5c002000 should never reach this point Dorzuce jeszcze moj plik startup: /* Startup code for STR91x ARM-based microcontrollers based on STR912 startup source and some examples from www.stm.com...
Witam Próbowałem załączyć pętlę PLL na ARMie. Nie chce mi się załączyć i nie przechodzi przez warunek sprawdzania w PLLSTAT (while( !( PLLSTAT & (1 << 26) ) );). Przeglądnąłem dokumentacje i przykładowe kody. Ale dalej nie działa :) Oscylator 12MHz Fcc0 288MHz Podzielniki N=1 M=12 (do rejestrów wpisuje wartości mniejsze o 1) Spodziewane CCLK...
Do Freddiego: Pobrałem Twoją wersję blink do LPC1114. Teoretycznie pasuje mi bez zmian do LPC11C24. Jednak debug (Linaro4.8, openOCD 0.9.0 od ciebie) nie jest wstanie przejść przez startup - dochodzi do polecenia 'isb' (zaraz na początku) i ląduje gdzieś w sekcji bootloadera (0x1fff0e4a). Sprawdziłem też inne kombinacje (CMSIS + startup pobrany z innych...
/* * Some defines for the program status registers */ ARM_MODE_USER = 0x10 /* Normal User Mode */ ARM_MODE_FIQ = 0x11 /* FIQ Fast Interrupts Mode */ ARM_MODE_IRQ = 0x12 /* IRQ Standard Interrupts Mode */ ARM_MODE_SVC = 0x13 /* Supervisor Interrupts Mode */ ARM_MODE_ABORT = 0x17 /* Abort Processing memory Faults Mode */ ARM_MODE_UNDEF = 0x1B /* Undefined...
reset handler stm32 error handler freddie handler
edc15 peugeot odinstalować sterownik drukarki akumulator mazdzie
Jak sprawdzić, czy SMS został odczytany? Czy zamrażarka może zakłócać kabel światłowodowy?