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)...
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ąś...
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(); }...
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....
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 +=======================================...
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, 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:...
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] /***************************************...
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?
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 -...
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...
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...
Mam w zasadzie wie sprawy, ucząc się programować wspomniany w temacie procesor, pełen optymizmu i zapału, zabrałem się za rozgryzanie systemu przerwań. No i zaczęły się schody. Aha, przy nauce mocno wspomagam się książką p. Lucjana Bryndzy "LPC2000 - mikrokontrolery z rdzeniem ARM7". Ustawiając przerwania zacząłem od odpowiedniego przygotowania kontrolera...
Hehe, chyba ślepnę powoli :P Masz dobrą tablicę wektorów? Tablicę wektorów oczywiście napisałem sam, na podstawie twoich projektów dla µC LPC11xx i STM32. No i faktycznie, w tablicy wektorów zapisane miałem: Nie powinieneś działać na rejestrze 0? Tak, dokładnie, jedynka była wynikiem moich poszukiwań niepowodzenia, wcześniej widniało tam zero....
Tak więc jeśli Twój program, po podobnym przesunięciu nie działa prawidłowo, to trzeba się zastanowić, czy on w ogóle działa prawidłowo (; Bez przesunięcia na pewno działa prawidłowo :) No to niezły kwas, muszę to przetrawić :) Uznanie dla umiejętności. Dodano po 14 To na pewno chodzi o kopiowanie tablicy wektorów na początek. Jak wstawić do mojego...
Sprawdziłem w praktyce, z powodzeniem. Oczywiście zgadzam się z wszelkimi wadami tego podejścia, które punktujecie - trudniejsze debugowanie itd. Brak stosu i brak zadań jest zaletą, bo nie trzeba nic przełączać. Freddie, nie sprowadzaj do poziomu przedszkola. Stan na ogół jest pamiętany w zmiennych prywatnych handlera - nie udawaj, że nie znasz słowa...
(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...
mam taki plik konfiguracyjny: # target: lm3s8962 if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { set _CHIPNAME lm3s8962 } if { [info exists CPUTAPID ] } { set _CPUTAPID $CPUTAPID } else { set _CPUTAPID 0x3ba00477 } jtag_khz 500 jtag_nsrst_delay 100 jtag_ntrst_delay...
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...
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 ? -...
Proszę o pomoc szczególnie freddiego chopina ponieważ jest autorem plików linkera, startup-a i wektora przerwać(vectors.c), które w innych projektach jak dotąd działałają mi niezawodnie. Zajrzyj do skryptu linkera, przeczytaj ze zrozumieniem jego początkowy fragment, ustaw tak jak trzeba i będzie działać. Kluczową sprawą jest przyswojenie sobie tego...
Zachciało mi się dziś zaprogramować płytkę STM32F0DISCOVERY przez Openocd. Zainstalowałem najnowszą wersję 0.7.0 ze strony kol. freddie , walczyłęm cały dzień z poprawną konfiguracją, no i w końcu projekt się debugguje, ale nie wiem jak skonfigurować narzędzie, aby tylko wgrać program. Eclipse wypluwa następujący log: http://obrazki.elektroda.pl/3770630200_1...
Po pierwsze dziękuję wszystkim za pomoc. Działa, poniżej opisze jak do tego doszło:) Na początku dodałem: OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm"); OUTPUT_ARCH(arm); ENTRY(Reset_Handler); Plik hex sie tworzył i stm32 st-link utility się tym razem nie pluł że coś mu nie gra, ale w gruncie rzeczy ten plik nic nie zawierał. Potem...
Witam, posiedziałem odrobinę i większość problemów się rozwiązała. <Pituś Bajtuś> oczywiście masz całkowitą rację. Po adresie początku stosu ma być tablica wyjątków/przerwań a nie instrukcje. Tak się ciekawie złożyło że kod się uruchamiał (ale pewnie tylko pod debuggerem ) czyli głupi ma zawsze szczęście jeśli nawet jest ono złudne ;) dodałem...
Ride obsluguje jedynie RLinka, IAR ma tez swoj adapter. Jakimi bledami wali ci openocd i ktora to wersja? Instalowales najnowszy release - 0.1.0? zainstalowales give_io? 4\/3!! C:\Program Files\openocd-r717\bin>openocd-ftd2xx... -f jtag.cfg Open On-Chip Debugger (2008-06-19 19:00) svn: 717 URL: http://svn.berlios.de/svnroot/repos/...
Doczekał się kol.Freddie konkretnego pytania :) W ogóle to udało mi się jakoś pokonać Attolic-a więc problem z Eclipse w zasadzie uważam za rozwiązany :) Niestety posługuję się książką niejakiego Paprockiego i z przykrościa uważam że to najgorzej wydane pieniądze ostatnich kilku tygodni. Uważam tak z powodu przykładów które zamieszcza niestety zapomniało...
Ma to sens. Jak rozumiem w trybie user nie działają instrukcje typu MSR / MRS, czy może coś jeszcze? Kontroler pamięci lub koprocesory mogą też ograniczać dostęp. Popatrz na hasła: 1.Arm registers, MRC/MCR w ARM ARM 2. VICProtection w LPC UM Najlepszy byłby jakiś __attribute__ Spróbuj long_call A tutaj jak rozumiem chodzi o tak zwany "low level init"...
Tak jak pisze Freddie Chopin mozna ale to bedzie reczne rzezbienie i skladanie kodu tak by zostawic dziure... Ale to jest rzezba okropna i utrudni na pewno prace nad kodem. Takiego rzezbienia nawet w binarce jest jeszcze kilka opcji, ale to nie najlepsze rozwiazanie. Wystarczy zapełnić tą jedną czy dwie strony rzeczami które praktycznie nigdy nie zmieniają...
Ok, jest sukces !! Może nie ostateczny ale jakiś jest.W miejscu gdzie wcześniej wpadał do __Default_Handler() teraz przechodzi do USB_LP_CAN_RX0_IRQHandler(void) Podsumuję wszystko co zrobiłem: Nie wiem do końca co dokładnie powodowało ten problem, napisze wszystkie kroki które wykonałem, aby wpadał do danego przerwania: 1. Aktualizacja vectors.c ,...
int TDelay wyciągnij jako zmienną globalną. Za każdym razem, gdy SysTick wejdzie do przerwania ją tworzy, a to bez sensu, co? :) w końcu nigdy nie doliczysz do 500, skoro będziesz cxo chwile tworzył tą zmienną. właśnie tak myślałem że z tym jest coś nie tak, niestety z C też nie jestem mistrzem i przez to ta gafa, dzięki Porównaj: SysTickHandler SysTick_Handler...
ciężko mi wymyślić sensowną sytuację w której przez 5 sekund byłby podpięty jeden handler, a potem przez 3 kolejne - inny. No bo po co? Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem,...
Ale na początek można zacząć od wywalenia nawiasów dookoła tego dzielenia Daje nawiasy bo nie danie razi mój zmysł matematyczny - w matematyce dzielenie ma wyższy priorytet niż mnożenie (w C nie ale jakoś to mi tak źle wygląda). PS dzilenie przez X1 - X0 po prostu >> 22 i to kompileator oczywoście ładnie wyłapuje: [syntax=armasm] 104 DAC ->...
Radzę zignorować powyższą poradę... Tablica wektorów ma poprawną "formę", więc radzę jej nie psuć... Wielu osobom działa, więc nie szukaj błędu tam gdzie go nie ma. Zresztą gdyby ta część była błędna, to układ nawet by nie wystartował, wiec chyba jednak warto założyć, że nie ma tu "błędu". W tablicy wektorów popraw tylko te wektory, które są "powyżej"...
bo w "normalnym" programie to będzie już musiało być zrobione inaczej. Tz jak ? :) Narazie przychodzi mi do głowy tylko takie rozwiązanie: Załóżmy że bez Delay'ów w mainie. W pętli jest tylko wysyłana ramka i zmiana pinu sterującego. Natomiast w przerwaniu sprawdzam: jeśli odebrano pierwszy bajt (tj. adres urządzenia ) to odbieram kolejne aż do otrzymania...
Jedyny problem jest taki, że zmienisz tym sposobem lokalizację tylko jednego stosu (np. tego od przerwań) - na stosy wątków wpływ masz minimalny. To fakt, choć jeśli chodzi o FreeRTOS, to wspomnianymi wyżej narzędziami stwierdziłem, że jest w miarę ok. Taski są w moim odczuciu na tyle przewidywalne, że jeśli są określone z zapasem za pomocą watermarków,...
Kolego Piotrus_999 po imporcie projektu do eclipse wygenerowanego z cube widzę że kod jest napisany w hal. Nie widzę opcji w cube aby nie generował w hal jak i opcji USE_HAL_DRIVERw eclipse . Oto fragment kodu ustawiającego zegary: [syntax=c]void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Initializes...
Skrypt linkera zostaw ten który jest w moich przykładach - dla innego procesora wystarczy że zmienisz rozmiar rom i ram. Jeśli masz taką fantazję (lub używasz przerwań) to zmień też rozmiary stosów. Kiedy zostawiłem skrypt Twój, to mam: arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./ out/lpc2103_blink_led.map,--cref,--no-wa...
Cześć Zabrałem się za zabawę z ethernetem na zestawie butterfly (STM32F107) + ZL2ETH. Pracuję na najnowszej wersji code sourcery, makfile i startup by Freddie Chopin + stos LWIP. Po początkowych problemach udało mi się zaininicjalizować PHY i na switchu zaświeciła się diodka, i to był początek problemów. Po dokładnym sprawdzeniu wszystkiego i wyeliminowaniu...
Wyższość kodu strukturalnego nad obiektowym jest w zasadzie zagadnieniem filozoficznym ;) Moim zdaniem mimo wszystko obiektówka się broni nazwet gdy klasa robi za odpowiednik przestrzeni nazw (wszystko statyczne w środku). Zdecydowanie upraszcza to zarządzanie i panowanie nad kodem, tym bardziej że projekty embedded już idą w miliony linii i ogarnięcie...
akurat tutaj openocd wywolywane jest ze standardowymi plikami, wiec nie tutaj problem. Hmm, może się na tym nie znam zbyt dobrze ale starsza wersja OpenOCD wywołana z argumentem -f lpc.cfg zwraca to Open On-Chip Debugger 1.0 (2008-04-09-14:00) svn: $URL: http://svn.berlios.de/svnroot/repos/... $ Info:...
Witam, próbuję skonfigurować licznik TIM2 w STM32L152RE, aby zliczał impulsy z pinu w trybie alternatywnym AF1 na PA0 i generował przerwanie po zliczeniu 10. Stan wysoki na linii w przerwaniu od SysTick. Niestety, TIM2 po zliczeniu impulsów nie generuje przerwania i nie ma żadnej reakcji od niego. Czy ktoś spotkał się z takim problemem? Funkcje do obsługi...
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...
teraz nie będzie wiadomo którą wybrać, bo nie wiem które LPC są teraz "na topie" (; Nie co patrzeć na to co jest na topie bo to nie ma większego znaczenia dla projektu. Do migającej diody (bo takie projekty dla tych płytek są na topie) każda płytka się nada. Im świeższy procesor tym lepiej. Teraz skupili się na LPC541xx i to jest ciekawy przypadek...
Otwórz konsolę, wpisz `telnet localhost 4444` a następnie spróbuj np. polecenia `halt`, `poll`, `flash info 0` i zobacz co ciekawego wyświetli. ~$ telnet localhost 4444 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger > halt > poll background polling: on TAP: STM32F103C8Tx.cpu (enabled)...
Witam! Eclipse Kepler Sourcery CodeBench Lite 2011.09-69 OpenOCD 0.6.1 STM32F103ZET6 Szablon projektu - Freddie Chopin Do tej pory wszystkie projekty na STM32 działały dobrze jednak teraz buduję większa aplikację i pojawiają się problemy. Objawia się to losową zmianą wartości zmiennych np. zadeklarowanych jako const czy przerwaniem __Default_Handler....
Tak Freddie Chopin, Twoja rozbiegówka LPC2103 po zmianie rozmiaru pamięci i przydzeleniu troche dla obsługi przerwań zadziałała. MEMORY { rom (rx): org = 0x00000000, len = 512k ram (rwx): org = 0x40000000, len = 32k } __user_system_stack_size = 1024; __fiq_stack_size = 0; __irq_stack_size = 128; __supervisor_stack_size...
Dziękuję Wam wszystkim za odpowiedzi. Na podstawie opisu, który napisał Freddie udało mi się napisać taki kod. Niestety nie mam pomysłu jak rozwiązać czwarty punkt. Na chwilę obecną nie mam możliwości podłączenia do płytki żadnego wyświetlacza ani komputera poprzez port szeregowy. Dlatego aby zobaczyć czy kod w ogóle ma zamiar działać mrugam diodą co...
Witam mam problem, gdy mam w makefile: "-mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math" to przy wywoływaniu funkcji w 6 argumentami typu float program wpada w hardfault od razu po wywołaniu funkcji main w reset handlerze. Gdy natomiast tej linijki nie mam to działa ok, tyle że za wolno. Może ktoś podpowiedzieć z czego to wynika? Dodam, że bazuję na...
Witam, Konfiguracja projektu oparta o stm32_blink_led autorstwa Freddie Chopin. Układ STM32F103. Uruchomiłem proste przerwanie z UARTa żeby sterować przepływem programu podczas testów. Problemem jest to wywołanie funkcji z przerwania: typedef struct { u8 print_test_1; u8 print_test_2; u8 print_test_3; } sys_flag_t; volatile sys_flag_t sys_flag;...
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...
Już pod LPC2129 wszystko działa jak należy. Teraz próbuje się przerzucić na LPC1754 na nowym rdzeniu. No ale coś mi nie idzie :/ Układ uruchomieniowy zgodny z schematem http://www.nixie.pl/docs/LPC175X-M-rev.A... . JTAG od Freddie Chopin z ustawioną zworką na 3.3V dla JTAG (zasilanie dołączonego układu z JTAG). Plik konfiguracyjny LPC1754.cfg,...
asm na pewno jest taki sam (szczegolnie ten ktorego uzywalem, bo to same podstawy), gorzej z timerami na ktorych opieraja sie dluzsze opoznienia (od ms w gore). nigdy nie zajmowalem sie dspic30, wiec... nie wiem jak to tam jest z tymi timerami. najwyzej dostosujesz sobie <: __________________________ modul sklada sie standardowo z pliku c i h. ponizej...
N-A-T-Y-C-H-M-I-A-S-T po kolejnym "ticku" sheudlera (zazwyczaj 1ms/10ms) Dobrze by było, gdyby osoby nie mające pojęcia o RTOSach raczej obsługiwały ten wątek w trybie read-only - nie ma co się ośmieszać i niepotrzebnie tworzyć wymiany zdań mającej na celu prostowanie takich bzdur... Freddie, celem wątków takich jak ten, o niczym, jest m.in. edukacja....
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...
Witam. Zainstalowałem OpenOCD 0.4 dla Windows ze strony Freddiego Chopina, przechodzę do sprawdzania działania i niestety pojawia się problem, wydaję komendę openocd -f interface/kt-link.cfg -f target/sam7x256.cfg i otrzymuje odpowiedz Open On-Chip Debugger 0.4.0 (2010-02-22-19:05) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxygen/bu...
Dzień Dobry Udało mi się skonfigurować timer i wszystko działa poprawnie tylko mam problem ze świadomym ustawieniem czasu trwania okresu. Wynika to z faktu że nie jest dla mnie do końca jasne: 1. Jaka częstotliwość jest dzielona przez preskaler 2. Jak w rejestrze: [syntax=c] TIM2->ARR [/syntax] ustawić czas trwania okresu świadomie. Załączę mój program:...
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...
Może najpierw Ty zobacz w RefMan, jaka jest domyślna wartość RCC->CFGR, który sam zmieniasz przełączając zegar na HSE. U mnie przed wykonaniem pierwszego kroku wygląda to tak: https://obrazki.elektroda.pl/5321417800_... Więc tak jak napisałem w komentarzu do pierwszej linijki kodu : //Przełaczamy sys clock na 16MHz z HSI i ustaiamy...
Można sobie takie wątki tworzyć w zależności od potrzeby. Coś na styl wzorca typu "thread pool" czy jakoś tak. Thread pool to troszeczkę coś innego, choć to może być jedna z jego cech w celu oszczędzania zasobów. Swoją drogą też ciekawy pomysł, żeby stworzyć zadania służące jedynie do odpalania handlera delegata, pobieranego z np. kolejki. Generalnie...
Witam, Posiadam mikrokontroler LPC2364, w którym nie potrafię uruchomić pętli PLL. Środowisko programistyczne to Eclipse skonfigurowane według tutoriala Freddiego Chopina. Do uruchomienia LPC2364 posłużyłem się projektem przykładowym naipisanym dla LPC2103 i znajdującym się również na stronie Freddiego Chopina. Zmieniony został plik linkera: /***************************************...
Złożyłem testową makietę z procesorem LPC2148 (schemat poniżej). Niestety OpenOCD z JTAG'iem Freddiego Chopina uparcie jej nie wykrywa :/ Otrzymuję komunikaty: C:>openocd.exe -f interface/jtagkey.cfg -f target/lpc2148.cfg Open On-Chip Debugger 0.4.0 (2010-02-22-19:05) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxyge...
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...
error handler except handler reset handler
nawija cewka audio impedancja wyjściowa wzmacniacza dobroć układ rezonansowy
zasilacz regulowany schemat thomson dpl660
Przestrojenie nagrywarki Panasonic DVB-T w Łodzi Schemat instalacji zapłonowej Allis-Chalmers 6V