To miałem na myśli. Teraz już zgłupiałem... No i jest źle ustawione ps2. Freddie jest jakiś problem z downloadem przykładów z Twojej stronki. Chciałem ściągnąć stm32cl_blink_led dla stm32f107 i niestety ni dy rydy. Przed sekundą ściągnąłem testowo kilka przykładów i wszystko działa. 4\/3!!
Witam, Bazuje na projekcie ze strony Freddie Chopin dla stma F4 z dodanymi bibliotekami STM32F4xx_StdPeriph_Driver. Zdefiniowałem sobie konfigurację timer'a w następujący sposób: [syntax=c]void Timers_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptio...
Witam ponownie. Mam jeszcze pytanie. Ponieważ chciałem dodać obsługę: ETH_WKUP_IRQHandler i ETH_IRQn. Więc w pliku vaectors.c dodałem takie linijki: [syntax=c] // ETH Ethernet global Interrupt void ETH_IRQHandler(void) __attribute__ ((interrupt, weak, alias("__Default_Handler"))); // ETH_WKUP Ethernet Wakeup through EXTI line Interrupt void ETH_WKUP_IRQHandler(void)...
pliki vectors.s i startup.s mam od Ciebie /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/ * file: vectors.S * last change: 2010-04-08 * * chip: LPC2103 * compiler: arm-none-eabi-gcc (Sourcery G++ Lite 2009q3-68) 4.4.1 * * description:...
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(); }...
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...
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....
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ąś...
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Witam, Mam problem z debugowanie procesora LPC2478. Środowisko: postawione zgodnie z tutorialem ze strony Freddiego Chopinna czyli Eclipse (helios edition with HDT hardware debugging) + OpenOcd + Code Sourcery Lite edition Procesor: ARM NXP LPC2478 z kwarcem 12MHz Aplikacja: Na tym etapie mrugająca diodka na timeocie opartym o przerwanie timer0, PLL...
Wiesza się w tym samym miejscu co w moim programie - po włączeniu przerwania NVIC_EnableIRQ. W stosunku do oryginału zmieniłem tylko port GPIO oraz dodałem obsługę TIM3 i mryganie diodą na podstawie TIM3->CNT by wiedzieć czy licznik rzeczywiście działa. W skrypcie linkera ustawiłem oba stosy oraz tak jak sugerowałeś zmniejszyłem pamięć o połowę -...
Mam na pewno sterownik WinUsb.sys. Poniżej cały skrypt linkera: Dodano po 10 Zapomniałem dodać, że używam zewnętrznego ST-linka dołączonego do płyty Nucleo-f103rb. Mam drugą taką płytkę i gdy teraz ją podłączyłem ale skorzystałem z wbudowanego ST-linka wszystko zaczęło działać prawidłowo. Co w takim razie może być nie tak?
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...
Zbadałem trochę sprawę. Odpaliłem debugger pod CrossStudio i procek ląduje w wyjątku HardFault. Call stack mniej wiecej wyglada tak: * task_create * thread_create * task_activate * up_unblock_task * up_switchcontext Funkca przelaczajaca kontekst powoduje wyjatek hardfault: <up_switchcontext> 460A mov r2, r1 4601 mov r1, r0 F04F0002 mov.w r0, #2...
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/...
Wydaje mi się, że mam problem z poprawnym umieszczeniem w pamięci ram struktur zawierających ramkę obrazu. Pierwsza z nich to: [syntax=c] static struct framebuffer { int w; int h; int bpp; int ready; uint8_t pixels[]; }*fb = (struct framebuffer *) &_fb_base; [/syntax] Ona będzie przechowywała co najmniej 320x240*2 bajtów w tablicy pixels. Oraz druga:...
Czy o takie poprawki chodziło? Dodano po 6 Kompilacja przebiega trochę dłużej, ale pomyślnie. Tak długo tworzy się plik wyjściowy *.bin. Czemu?
Generalnie to pobrałem skrypt linkera i plik startup ze strony http://www.freddiechopin.info. W datasheet i manualu znalazłem adres pierwszej strony pamięci flash i SRAM, która jest "rozbita" na 96KB i 32KB. Zmieniłem w oparciu o te informacje skrypt linkera. Czy zrobiłem to dobrze? Nie wiem. Poniżej: Skrypt linkera: [syntax=c] /***************************************...
Weźmy na przykład Twój plik linkera oraz plik linkera projektu dsonano (oscyloskopu) ze strony http://code.google.com/p/dsonano/ a dokładnie http://dsonano.googlecode.com/files/DS0%... Znajduje się tutaj skrypt linkera o nastepującej treści: /*for stm32f103VBT6 link scipt*/ /* Stack Sizes */ _STACKSIZE = 512; /* just X2*/ _HEAPSIZE...
Skompilowałem nieco przerobiony (usunąłem konfigurację PLL, itp..) pod mój procesor (STM32F100RB) przykład z twojej strony. Ze standardowym skryptem linkera działa, po zmianie TYLKO skryptu linkera na przerobiony pod RAM (kod poniżej) niestety nie: [syntax=asm] /***************************************... * author:...
Ok, coś jest nie tak. Przede wszystkim systick działa na trybie optymalizacji O1 i O2. Bez zmiany kodu. Na O0 od razu jest hard fault. Ale nie występuje na żadnej linijce kodu. Nie wchodzi do przerwania i wywala od razu błąd. EDIT: Działa w momencie kiedy wywaliłem inicjalizacje: N VIC_Init(&NVIC_InitStructure); A w to miejsce dałem: NVIC->ISER...
(prawidłowy dla STM32, u Ciebie przerwanie SVC ma inną nazwę niż "standardowa" dla STM32) SVC_Handler SVCall_Handler 4\/3!!
Oczywiście masz rację :) Pisząc, że jest to bezpieczne miałem na myśli: funkcja Reset_Handler() nie używa stosu do absolutnie niczego
Ech.. Przepraszam za zamieszanie. Problemem okazała się nazwa, którą nawet w poprzednim poście wkleiłem z błędem. Chodzi o void TIM4_Handler(void), a powinno być TIM4_ IRQ Handler. Freddie, dzięki za podpowiedz/pytanie czy plik jest linkowany. Plik był oczywiście kompilowany i linkowany. W pliku .lss zauważyłem, że zostaje podstawione Default_Handler...
void TIM3_Handler(void) __attribute__((interrupt)); void TIM3_Handler(void) { } Właśnie tak robię. Wszystko oczywiście w pliku vectors.c. No nic popatrzę zatem w czym jest problem w niedzielę. Jeżeli mi się uda rozwiązać go to przedstawię tutaj rozwiązanie. Dzięki freedy za zainteresowanie
To samo - za mały stos. Czy tylko to może kierować program akurat w te maliny ( default handler)? (wystarczy w nim zakomentować/usunąć ze 3 linijki). Po takiej zmianie w skrypcie linkera nieużywany stos może mieć rozmiar 0. Czyżby te poniżej niniejszego opisu: "Thread mode uses process stack (PSP) and is privileged" ?
bo przerwanie powinieneś zmienić na void FIQ_Handler(void) __attribute__ ((interrupt("FIQ"))); void FIQ_Handler(void) { ... } gdyż reszta parametrów jest potrzebna aby NIEUŻYWANE przerwania były przypisane do domyślnego. Znaczy się "t0isr" na "FIQ_Handler"? Pozatym potrzebna jest też konfiguracja danego źródła jako FIQ w module VIC. No ale nie robi...
Freddie, jeśli mogę się podpiąć - jakim cudem u mnie przerwania działają dobrze pomimo, że w/w ciekawej rzeczy nie ruszałem?
Freddie, nie rozumiem, co napisałeś. Oczywiście, że nie trzeba stosów. Każdy handler może pamiętać zwoje zmienne stanu jako statyczne, ale handler nie ma kontekstu tak jak zadanie w RTOS. Ponieważ nie ma przełączania kontekstów, oszczędzamy również na czasie przełączania. W prostym przypadku handler odpowiada pętli zadania przeciętej w miejscu, w którym...
Brakuje jeszcze linii void SysTick_Handler(void) __attribute__ ((interrupt)); bez niej procesor wpada w nieskończoną pętlę. Not true. 4\/3!! Rozszerzę opis. Ale gdy używasz szablonu od Freddiego, a i tam Default_Handler może być dowolnie modyfikowany.
Dzięki Freddie jesteś wielki, po dodaniu tych #define program od razu ruszył, jeszcze raz wielkie dzięki.
No tak jak handler przerwanie się nie nazywa TIM1_IRQHandler to już sprawa nie do przeskoczenia. (at)Freddie Chopin Przeca używa Cube i HAL - nie musi czytać RM-ów.
Ja się wahałem czy tej książki nie kupić i teraz się cieszę, że tego nie zrobiłem :P /* 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; Jest jakaś (tzn na pewno...
Nie wszystko da się zrobić w C i manipulacje rejestrami są właśnie taką rzeczą. Jak napiszesz ten handler w C, to po pierwsze na samym wejściu do niego kompilator dorzuci na 99% jakiś kod który cośtam sobie alokuje na stosie po to napisałeś, że jest "naked" aby nie dorzucił :) [syntax=c]void HardFault_Handler() { if(__get_LR() & 4) getRegistersFromStackFrame((uint32_t...
Freddie: faktycznie to był mój błysk geniuszu :) Co muszę zrobić aby przerwanie od Systick'a przechodziło mi w funkcję SysTick_Handler, a nie w __Default_Handler jak to się dzieje w tym momencie? static void SysTick_Handler(void) __attribute__ ((interrupt)); static void SysTick_Handler(void){ uint32_t stan; stan...
Więc na razie wiem tyle, że się da (; Nie udało mi się namierzyć w necie żadnego przykładu jak tego dokonać, ale może zbyt słabo szukałem, więc może ktoś takowy przykład gdzieś widział albo ma u siebie? Wdzięczny będę również za wszelkie wskazówki jak to mniej-więcej powinno działać i co trzeba tam wyczarować. Tez szukalem i nie znalazlem. Generalnie...
Zamówiłem dwa Cortex'y STM32F103ZET6, czekam na przesyłkę... W między czasie, patrzę na przykłady z STM32 i nie mogę się nadziwić.... no cóż czasem człowiek potrafi skomplikować proste sprawy... Używam startup.S i vectors.c od kolegi Freddie Chopin. Niby wszystko ok, ale jak ktoś przerabia jakieś rzeczy z USB, niech zwróci uwagę na dwie rzeczy. w ST...
Freddie czy ja dobrze rozumie, w Cortex-m4 mogą być dwa lub jeden stos ? Ty w swoich przykładach włączasz stos dla aplikacji, jak jest tego zaleta w stosunku do jednego stosu ?
Pomyslalem o tym wczesniej, ale (być może cos zle wpisuje) gdy probuje zmnijeszyc predkość pojawia sie cos takiego: Warn : use 'at91sam7s.cpu' as target identifier, not '0' RCLK - adaptive Error: unable to open ftdi device: unable to claim usb device. Make sure ftdi_si o is unloaded! Command handler execution failed
(at)Freddie Chopin , już się uporałem z tym problemem. Tak myślę :) Faktycznie problem tkwił w złej implementacji jednej z funkcji. Działa! Dzięki za pomoc! W pliku FreeRTOSConfig.h dodałem tę linijkę: stm32f7xx_it Nie wiem, może da się to zrobić w jakiś bardziej elegancki sposób? (at)Freddie Chopin , dzięki jeszcze raz za pomoc! Zamykam temat.
ldr sp,=_estack Zupełnie zbędne. Z całym szacunkiem ale jestem przeciwnego zdania. Zdarza mi się bowiem używać skoku na 'reset handler' np. przy błędach assercji. Pzdr PS Z podobnych powodów przy ustawianiu PLL-a najpierw wpisuję wartości domyślne dla stanu 'reset' a dopiero potem ustawiam od początku. Ustawianie PLL-a gdy procesor jest nim taktowany...
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...
Co będzie błędne, bo pierwszą rzeczą jaką robi Twój program jest jednak Reset_Handler, a nie to co przypadkiem trafiło na początek sekcji .text. Co nic nie zmieni bo i tak tablica wektorów jest zapisana "na sztywno" w większości projektów. Tak naprawdę jest to wartość ignorowana jeżeli tablica wektorów jest zrobiona tak jak w większości projektów -...
Ok. Dalsze wieści z frontu. Olałem debugowanie z linii poleceń i skoczyłem od razu do eclipse'a. Ku mojemu zdziwieniu wszystko działa pięknie. Dzięki za pomoc. W razie problemów będę pisał. Pozdrawiam. Dodano po 2 "Stepowanie" przez wektory przerwań nie do końca jest dobrym pomysłem niestety... Musiałbyś sobie ustawić breakpointa na pierwszej instrukcji...
Atrybut jest generalnie konieczny chyba że masz wrapper w assemblerze, który załatwi za Ciebie niuanse powrotu z przerwania. Tu właśnie mamy taki wrapper, więc to wywal. Ja dałem przykład z mojego działającego kodu. Może raczej pomyślał bym nad atrybutem "naked" BTW, czym to kompilujesz? PS. W zasadzie to kompilator by strasznie krzyczał, jednak zapytam....
Inne wytłumaczenie jest takie, że podczas pracy pod debuggerem układ niekoniecznie wykonuje prawdziwy reset - debugger często po prostu wgrywa nowy kod, ustawia PC na pierwszy adres Reset_Handler() i uruchamia układ. W takiej sytuacji również stos nie jest zainicjalizowany (albo inaczej - ma jakąś tam wartość, ale niekoniecznie taką jakiej byś się...
można jeszcze jedno z definicji ustawić z atrybutem "weak" Po co? No to właściwie ja się pytam po co :), może nie wprost, ale taka była moja intencja w poprzednim wpisie. Ta właściwość często jest używana w kodach z HALa dla STM, sam nie znalazłem zastosowania, ale to akurat nie dziwi. Ktoś ją wymyślił i jest dostępna, "niektórzy" korzystają. Zatem....
Witam, sprawa wygląda tak: zainstalowałem plug-in http://obrazki.elektroda.pl/4076597300_1... ale tam gdzie miał wprowadzić on jakieś zmiany nic sie nie zmieniło... http://obrazki.elektroda.pl/1272710800_1... zresztą elfy są mało ważne... zajmijmy sie hexami poszedłem za instrukcjami lecz zastanawia mnie jedno czy po...
Na szczęście autor tematu używa profesjonalnego środowiska, a nie jakiejś "samoróbki", więc problemy konfiguracyjne go nie dotyczą, wszystko zawsze ustawia się dobrze. A to akurat jest napisane tam wyraznie ze jak używa sie czegoś innego niz zdefiniowane płytki w projekcie, to wstawiana jest "generic" tablica wektorów tak jak dostarczona przez ARM-a...
"//dla pewnosci zeruje cale AFR by miec pewnosc ze alternatywa zerowa jest" Dla pewności zresetowałeś więc w obydwóch przypadkach nie tą połówkę co trzeba. Odczytaj w programie rejestry statusowe SPI2 i SPI1 - pewnie wyskakuje jakiś błąd. Konfiguruj najpierw slave'a, potem mastera. Użyj debuggera żeby zobaczyć gdzie się wiesza. Racja, mój błąd. Nie...
error handler except handler reset handler
amica płyta indukcyjny booster przedwzmacniacz marantz chieftec wentylator
interfejs delphi depollution system faulty peugeot
Mazda 5 2005-2012 – brak reakcji siłowników centralnego zamka, kierunkowskazy migają po sygnale z pilota Toner do Xerox WC6605: ilość proszku i suszenie