Witam, od jakiegoś czasu używam środowiska IAR wraz z debugger'em zgodnym z J-Link. Pisząc oprogramowanie dla AT91SAM7S256 używam kilku przerwań(głównie wewnętrznych min SPI, UART). Konfigurując peryferium: włączam zegar w PMC, konfiguruję do pracy+włączam przerwanie. Dodatkowo Konfiguruję AIC. Podczas sesji debug otrzymuję informację z rejestrów AIC:...
Jeszcze przy zmiennych występujących w przerwaniach dodaj modyfikator volatile .
Tak. Możesz to tak ustawić. Przykłady Freddiego korzystają z obu stosów. Process stack -> kontekst aplikacji, main stack - > kontekst przerwania.
sprawdź w dokumentacji czy aby po zresetowaniu flagi przerwania timera nie trzeba odczekać kilka instrukcji (2-3 NOP'y). Jeżeli tak jest, to w przeciwnym wypadku zaraz po wyjściu przerwanie otworzy się drugi raz i w tej sposób dioda mrugnie tak że tego nie zauważysz. Możesz to sprawdzić tak że diodę ustawisz na zapłoną (a nie stan przeciwny), to po...
Jedno mnie dziwi - nigdy nie miałem takich problemów. To, że timery czy inne peryferia sobie pracują, gdy rdzeń jest halt to nie powinno nikomu przeszkadzać, skoro stepowany rdzen w ogóle nie skacze pod wektory ISRów...? Gdy używam Ride7 to nie mam tego problemu, ale gdy przekroczyłem limit 32kB przesiadłem się na Eclipse+OpenOCD. No i niestety w trakcie...
Jeśli któraś ze zmiennych elapsed_time i/lub current_time jest współdzielona z procedurą obsługi przerwania (jak się można domyślać), to spróbowałbym przed blokiem warunkowym wyłączyć przerwania, a po bloku włączyć:[syntax=c]cli(); if ((ellapsed_time - current_time) > 100) { eeprom_write_byte(20,1); } sei(); // lub w drugim przypadku cli(); long time_diff...
SIGNAL(SIG_OVERFLOW0){ straznik = 0; cli(); } #1 Skoro 'straznik' przyjmuje tylko wartości 0 lub 1, to po co 16-bitowy typ 'int'. Wystarczy w zupełności 'uint8_t'. Ta sama uwaga dotyczy również zmiennych 'i' oraz 'j' w pętli 'for'. #2 Jeżeli używasz zmiennej 'straznik' zarówno wewnątrz procedury obsługi przerwania i w programie...
Dzięki wielkie- ale to nie do mnie pisałeś. O Atomic_Block dowiedziałem się w czwartek- sprawdziłem- od czwartku jest to pierwsza wiadomość na ten temat. A wracając do tematu Fir3man- wymyśliłem taki schemat programu: #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> volatile uint8_t dol;...
Problem rozwiązany - udało mi się uruchomić OpenOCD 0.9.0 + Eclipse + STLink. Działa debug i przerwania. Komunikacja w trybie SWD. Dziękuję wszystkim za pomoc. A jak Wy się łączycie z STM32? Przez JTAG, SWD, czy też kombinację obu interfejsów?
(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ś",...
wewn kwarc 4Mhz, (fusebit C3, D9). jezyk C. w przerwaniu jest tylko zliczanie czasu. [syntax=c] TCCR0 |= _BV(CS00); TCNT0 = 0; TIMSK|=_BV(TOIE0); ISR(TIMER0_OVF_vect) { przepelnienia++; if(przepelnienia == (15625 ) ) { przepelnienia = 0; sek++; if(sek == 60) { sek = 0; min++; } if(min == 60) { min = 0; godz ++; } if(godz == 24) { godz = 0; } } TCNT0...
Z tymi sterownikami nie maiłem do czynienia ale początek opisu wskazuje, że służą do obsługi code page - czyli zestawu znaków (np polskie litery) Co do programowania kontrolera przerwań to znalazłem taki papier: http://sirius.cs.put.poznan.pl/~inf94333... Trzeba pamiętać, że dostęp do rejestrów HW jest przez rozkazy assemblera in/out i nie jest...
istotą przerwania jest AC_OK_Tick++; p3_1_counter++; GPIOIntClear( PORT3, 1 ); zliczanie a to że wystawiłem sobie funkcje do zmiany stanu innego portu jest mam nadzieję jest pomijalne. Pomijalne, ale na podstawie tego "zółtego" przebiegu stwierdziłeś że jest problem. Jeżeli przebieg ma 50Hz (detektor fazowy) to dla uC to "wieczność". Nie wiem...
Inżynierowie oprogramowania wbudowanego uwielbiają rozwiązywać problemy. To właśnie podstawa, tego, co robią. Niestety jednym z największych ich mankamentów jest to, że tworzą oni wiele niedoskonałości, aby następnie stać się bohaterami, spędzając ogromną ilość czasu na ich usprawnieniu (debugowanie!). To dość typowe, bez przeszkód można znaleźć firmy,...
Poczytałem o usypianiu. Faktycznie mój obecny kod nie zadziała zgodnie z moimi założeniami. Przerwania muszą być aktywne przed uśpieniem procka. Czy dobrze mi się wydaje, że wystarczy wrzucić sleep_mode() do pętli while(1) ? Dodano po 3 A propos tych breakpointów - AS z pewnością zaznaczył, że breakpoint jest nieaktywny - ze względu na optymalizację...
Twierdzisz, że twoje rozwiązanie jest proste. Wcześniej twierdziłeś, ze zrobisz na przerwaniach od zbocza. Zrobił bys i co? Program czasami by działa źle. Ile czasu bys dochodził, ze trzeba zrobić IRQ od poziomu? Do pierwszego debugu... przerwanie: -wykonaj funkcje zwiazane z przerwaniem (zapal diody) petla głowna: -sprawdz czy jest cokolwiek w kolejce...
Witam, Jak w temacie, podczas debugowania przez SWD nie działają przerwania. Wersja Openocd 0.9.0 z obsługą SWD od Freddiego. Po sprzętowym resecie bez debugowania przerwania działają. Przez JTAG debugowanie z przerwaniami działa. Skrypt konfiguracyjny Openocd dla SWD: source [find target/swj-dp.tcl] adapter_khz 500 if { [info exists...
1. rozmiar stosu. 2. niewłaściwa nazwa przerwania 3 zła konfiguracja dostępu do flash. .......
Środowisko: - LPC2148 na płytce ZL9ARM Kamami - JTAG Freediego - Eclipse Luna - Open On-Chip Debugger 0.8.0 (2014-04-28-08:42) - GNU gdb (GNU Tools for ARM Embedded Processors / bleeding-edge-toolchain-140708) 7.8.50.20140708-cvs - projekt łopatologiczny (Timer0 +miganie diodą) W sytuacji, gdy jednocześnie programuję procka i chcę debugować, po pierwszym...
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...
Nie za bardzo mi sie chce anlizowac te dwa listingi, ale mozesz sprobowac zaldowac to do avrstudio i debugowac. Po drugie , wylacz optymalizacje kodu w makefile.
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...
Jeśli korzystasz z stm32f4 discovery, to sprawdź czy masz dobrze ustawionego st-linka. Musisz mieć zainstalowany w systemie sterownik do niego, Keil nawet zaktualizuje w nim soft jeśli zajdzie taka potrzeba. Jeżeli chodzi o konfigurację st linka w Keilu, wszystko znajdziesz w dokumentacji u ST na stronie. Nie wiem też czy dobrze się zrozumieliśmy. Debug...
Ja sprawdzałem na analizatorze logicznym. - a potem na symulatorze, debugiem robiłem tylko przerwania. - tablice inicjalizujące masz poprawne pod względem zawartości ?.
Głupie pytanie. Czy jak wejdziesz w debugu to on zlicza z zewnątrz te impulsy?
Jeśli uzywasz OpenOCD to nie wiem czy coś na to poradzisz. Jest to błąd z którym nie jeden amator ARMów już się spotkał. Debugowanie nie działa do końca poprawnie przy wykorzystaniu przerwan. Poza tym jeśli się wie co się pisze to debuger jest zbędny. Czasami lepiej wykorzystać UART DBGU i wysyłać sobie interesujące nas zmienne na terminal.
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
Sprawdzam, co jest przydatne - x/0; daje "undefined operation" a nie "div by zero" Akurat ostatnio się tym bawiłem i aby dzielenie przez zero wywołało faulta (Usage Fault), to trzeba sobie to włączyć w odpowiednich rejestrach rdzenia. 1. Jak to się dzieje że r1 jest argumentem funkcji? Gdzie jest to opisane? r1 nie jest argumentem funkcji, tylko jej...
To znalazlem i czytalem. Chodzi mi o ta konkretna sytuacje. To wywolane przerwanie wlasnie inkrementuje zmienna... wiec nie przerywa dzialania na niej. W dodatku podczas debugu widze ze zmienna ta w intrukcji if przyjmuje kolejne wartosci wiec nie ginie. I widze sytuacje 15 == 15 a tu nic... warunek spelniony a program milczy... M.
Powiem Ci szczerze że myślałem iż po patach zmieniłeś toolchain, ale chyba sprawdzone tematy sa najlepsze (bo znam Twój wpis o tym toolchainie) A ten VS Code to aż muszę sprawdzić, ciekawe czy by mi to zadziałało. A weisz może jak to w ogóle wygląda tzn. rozumiem że wtyczka c/c++ jest do składni języka, a cortex-debug do debudowania, ale jak z wyborem...
Witam, Napisałem program, w którym do odliczania czasu używam SysTick'a i przerwania od niego. Gdy skompiluję i zapiszę program do pamięci Flash, program ten działa jak należy i możliwe jest jego debugowanie. Jeśli skompiluję i wpiszę program do pamięci RAM, to program nie działa poprawnie, a debugować go można jedynie do momentu wystąpienia przerwania...
Ustawienie alarmów: HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); if(MAX_SAFE_ALARM_TIME_SEC<sec... sec = MAX_SAFE_ALARM_TIME_SEC; if(MIN_SAFE_ALARM_TIME_SEC>sec... sec = MAX_SAFE_ALARM_TIME_SEC; /**Enable the Alarm A */ uint8_t overflowSec = 0; uint8_t overflowMin = 0; sAlarm.AlarmTime.Seconds = (sTime.Seconds...
Owszem CooCox pozwala szybko rozpocząć zabawę z ARM-ami, ale ma też swoje wady. Niedawno postanowiłem przetestować to środowisko i szybko zraziła mnie wada serwera GDB, którą openOCD miało w wersjach starszych niż 0.5.0 (ponad 2 lata temu). Brak automatycznego maskowania przerwań podczas debugowania skutecznie utrudnia śledzenie krokowe programu - nadejście...
Dziękuję bardzo za odpowiedź. To jest dobra myśl (choć liczyłem, że w AVR32 Studio wersja 2.5.0 jest jakiś lepszy sposób). Niestety choć w oknie AVR32 Registers (w grupie System registers) jest rejestr SR dokładnym opisem (bit 16 GM) to jednak po zatrzymaniu programu na breakpoincie nie potrafię zmienić stanu tego rejestru (ani prawym klawiszem, ani...
Witam mam dość dziwny problem z przerwaniami w tym procesorze. Jestem jeszcze zielony jeśli chodzi o przerwania i dlatego będę wdzięczny za każdą pomoc. otóż problem pojawia się z takim kodem: #include "lpc213x.h" #include "clcddisp.h" #include "armint.h" CLcdDisp cout;//utworzenie obiektu klasy do wyswietlania void IrqTimerHandler(void)...
Sorry, nie doprecyzowałem. Symulowałem mikrokontroler w uVision i debugowałem sam kod. Niestety nie mam programatora z JTAG-iem, żeby sprawdzić co się dzieje w praktyce. Wydaje mi się, że problem jest w przerwaniu FIQ, a dokładniej nie chce z niego wrócić do głównego kodu, ani nie chce się wykonać inne przerwanie o niższym priorytecie. samo FIQ działa...
Właśnie próbuję uruchomić program z pamięci RAM. Usunąłem linijkę rom (rx) : org = 0x8000000 oraz zastąpiłem wszystkie "> rom AT > rom" na "> ram AT > ram" w pliku linkera. Program działa do momentu wywołania przerwania (w moim programie przerwania SysTick). Wtedy licznik rozkazów skacze z adresu 0x2.... pod adres 0x08000864.Czyli do pamięci flash i...
Dane przesyłane do tej kolejki są z funkcji TickHook, a wygląda to tak: [syntax=c]char *pcMessage = "Status: PASS"; xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR( xLCDQueue, &pcMessage, &xHigherPriorityTaskWoken );[/syntax] Funkcja TickHook jest wykonywana z każdego przerwania systemowego, natomiast dane przesyłane kolejka są raz na określona...
i jak go uruchomisz w trybie pwm to działa cały czas bez względu na obsługę przerwań chyba że go zatrzymasz lub wprowadzisz mikrokontroler w tryb zerowania (reset) Albo uśpienia (nie wszystkie tryby). Także zatrzymany w debug PWM i inne peryferia (nie wszystkie, np BOR, sterownik LCD nadal pracują).
Chyba masz rację. W tabelce vectors na 35 pozycji jest pointer do funkcji ADC1_2_IRQHandler. Zdefiniowałem ją tak [syntax=c] void ADC1_2_IRQHandler(void) { while(1); } [/syntax] Niemniej dalej zatrzymuje się w default handler a a nie w niej. Wyłączyłem natomiast konfiguracje przetworników ADC która wygląda tak [syntax=c] void ADC_Conf(void) { ADC_InitTypeDef...
Startup jest "lewy", gdyż jeśli chcesz dodać przerwanie, to musisz je jakoś nazwać, a potem pamiętać o tym, żeby tą nazwę wstawić w odpowiednie mniejsce startupa. W typowym startupie to jest załatwiane automatycznie (atrybut "weak") - po prostu nazywam funkcję przerwania tak jak trzeba (cośtam_Handler) i gotowe. Prędkość debuggowania jest zależna od...
(at)JarekC 1. Ponieważ po wyłączeniu trybu debuggera, żadne przerwania zewnętrzne, wejścia nie odpowiadają, podczas debuggingu wszystko fajnie działa. 2. Nie, nie ma żadnych pułapek. A czy to nie jest spowodowane wyczyszczeniem pamięci flash, bo kiedyś to robiłem poprzez ST-Link, może jakieś rejestry się wyczyściły czy coś?
Ma sie komunikowac z cywilną atmegą Po RS485 i jeszcze jednym uC. Wazne jest to ze program nie wchodzi do przerwania przez ustawienie flagi. PS: W programie usuniecie srednika w Main ( ; rcall UsartRxComplete ;...) powoduje to ze program robi to co ma robic w tym przypadku, czyli co sekunde ustawiac/gasic PB3.
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...
Witam, Poszukuję pomocy przy rozwiązaniu problemu z poprawnym debugowaniem układu LPC2138 przy pomocy JTAG'a J-Link Edu w środowisku uVision Keil'a. Układ daje się poprawnie ustawić w tryb debugowania i zaczynam od adresu 0x00000000. Wszystko działa poprawnie do momentu dotarcia do adresu 0x0000001C gdzie z tego co się orientuję jest wektor przerwania...
No tak... przerwania, instrukcje warunkowe (których czas zależy od wartości... ) itp... No tak - przecież to faktycznie wielka różnica czy wykonują się 0.00000005s czy może 0.00000006s... A jeśli to JEST wielka różnica, to znaczy że do projektu wybrany został zły układ lub projekt jest błędny. Proste [; 4\/3!!
Witam Pobrałem ten projekt z pierwszego postu i zmieniłem jedynie procesor na ATMEGA168. Windows wykrywa jakieś nieznane urządzenie z awarią. Podczas debug symulatorem avrstudio po przyjęciu przerwania INT0 program robi skok pod adres 00000093 gdzie jest rozkaz jmp 00000000 czyli tak jakby reset. Po kompilacji na mega88 w symulatorze (realnie mam tylko...
Może pokaż cały kod. Poza tym, przerwania mogą być tak szybko wywoływane, że przy debuggingu się one gdzieś zgubią (bo nie odbierzesz wszystkich znaków z bufora a już przyjdą następne znaki). Mówisz, że nie działa w ogóle, więc może posprawdzaj flagi transmisji ?
Wczoraj uruchomiłem RTC, działa ładnie, choć nie wiem dlaczego na koniec wpisu do rejestru RTC_CNT muszę dwa razy wyzerować bit RTC_CRL_CNF:) W następnej kolejności chcę uruchomić przerwanie od RTC, no i oczywiscie nie działa, inaczej nie pisałbym tu. Jak rozumiem z dokumntacji (tej cześci którą przeczytałem) i opisu przykladów, najpierw powinny być...
Definicja configMINIMAL_STACK_SIZE nic nie pomoże jeśli w tasku ustawiasz stos "ręcznie" na inną wartość. Pozatym - jak już pisałem - są jeszcze "normalne" stosy, używane przez program po starcie i przez przerwania (w tym jądro). http://lmgtfy.com/?q=freertos+stats 4\/3!!
Witam Mam problem ze zrozumieniem kodu, oraz ze znalezieniem błędu w nim. Program (jak w temacie) napisany na ATmega8, ma służyć do generowania przebiegu sinusoidalnego za pomocą PWM z filtrem uśredniającym na wyjściu. Oto kod programu: .INCLUDE "m8def.inc" .CSEG .ORG $0400 SINUS: .db 128, 136, 144, 152, 160, 168, 175, 182, 190, 197, 203,...
Witam. Chciałbym prześledzić działanie pewnej funkcji, jednak debugger ciągle wskakuje w procedurę obsługi przerwania void TIM17_IRQHandler() . Próbowałem zablokować tim17 poprzez wpisanie: DBGMCU->APB2FZ|=DBGMCU_APB2_FZ_DBG_TIM17... jednak rejestr APB2FZ pozostaje bez zmian. W RM znalazłem na ten temat jedynie: [syntax=rm]The register is asynchronously...
Tak jak w tytule, testuję program JTAG-iem i niestety fakt ten wpływa negatywnie na pracę przerwania zegarowego. Timer cyklicznie zmienia pewną wartość (rodzaj znacznika) od jego wartości zależy jak się prgram zachowuje w innym miejscu. Problem w tym że zależałoby mi na tym aby przerwanie pracowało swoim tempem niezależnie od debugowania. Póki co licznik...
Jeśli nie potrzebujesz czegoś na przerwaniach to sprawdź to: [syntax=c]#define led_ddr DDRD #define led_port PORTD #define led 7 #define led_on led_port |=_BV(led) #define led_off led_port &=~_BV(led) #define mod_1 for (uchar i=0;i<32;i++)\ {led_on;\ _delay_us(13);\ led_off;\ _delay_us(14);}\ #define send_0 {mod_1;\ led_off;\ _delay_us(889);}\...
To przynajmniej zmniejsz z 10-krotnie częstotliwość przerwań z timera, skoro uparłeś się na te przerwania. Użyj większej wartości okresu i ew. mniejszego preskalera. Wg. dokumentacji ST i zdrowego rozsądku timer nie działa przy okresie 1.
Instrukcja instalacji kontrolera: http://download.adaptec.com/pdfs/install... Z tego co wiem wynika że kontroler AHA-1542CF jest typu ISA i nie obsługuje PnP tak więc BIOS nie będzie w stanie współdziałać automatycznie z tym kontrolerem. W instrukcji jest podane kilka sposobów uruchomienia menu kontrolera. Można to zrobić przy...
Mam to sobie przetłumaczyć? Dodano po 4 "Wystąpił problem w Ntfs.sys, pliku sterownika, który pozwala system do odczytu i zapisu na dyskach z systemem plików NTFS. Nie może być fizyczny problem z dyskiem, czy żądania przerwania Packet (IRP) może być uszkodzony. Inne popularne Powoduje to ciężkie twardym fragmentacji dysku, ciężkich plików I / O, problemy...
Z tego co widać w pokazanym fragmencie to procedurka putchar i printf działa niezależnie od przerwań. Schemat jest zawsze taki sam. Najpier poczeka na gotowosc portu do wysyłania (aż TI bediz emiało 0) następnie wysyła do sbuf znak i znowu czeka na zmianę TI na zero (wysłanie znaku). printf dodatkowo ma pętlę i licznik powtórzeń/znaków do wysłąnia....
Podtrzymuję to, co napisałem. W AVR funkcje specjalne mają priorytet na porcie - zobacz rozdział Alternate Port Functions. Jeżeli włączysz SPIE to odpowiednie stany zostaną wymuszone na pinach bez dodatkowego konfigurowania. Wyjątkiem jest pin SS. Dalej - jeżeli "debug printf-y" masz na przerwaniach, (z TX buforem) to tym bardziej nie wiesz (na ich...
Problem w tym, ze manualne włączenie DWEN nic nie zmienia. Avr studio powinno samo ten fuse zmnienic przy uruchamianiu debugowania, niestety tak nie robi. ------------- Wrzuciłem avr studio 6.2 BETA, zrobił sie upgrade firmware i teraz pyta czy włączyć DWEN. Sprawdzę i dam znac. Jest jakis sposób na odblokowanie projektu z trybu debugwire? Zauważyłem...
hmm zmienne w RAM (?), czyli kompilator nieprzewidzial miejsca na stos? i czy wogole stos jest wciskany w przestrzen pamieci dostepnej urzytkownikowi? Program nie wykozystuje zadnych tablic. ze stosem jest wszytko wporzadka, w przerwaniu nie ma podprogramow zagnierzdzonych (jesliby nie liczyc przerw. TO). Stos maksymalnie liczy sobie 5 (T0>acc>b>psw...
Zaraz zaraz zaraz... To nie jest "bug", tylko wtyczkę GDB Hardware Debugging trzeba sobie ściągnąć - jak jest nie ściągnięta, to jej nie ma, to co ty konfigurujesz to coś zupełnie innego. Please note that there is a known problem with installing the optional GDB Hardware Debugging feature in CDT 7.0.1 (Bug 326176). To install the optional GDB Hardware...
Przykład diody1000 dotyczy przerwań programowych Basica i raczej działa jak podprogram bo każde naciśnięcie przycisku w pętli głównej blokuje przerwanie i przez to wszystko chodzi cztery razy wolniej. Ja chce wykorzystać przerwanie sprzętowe ,a bit PEIE ustawiam bo tak pisze w dokumentacji ale czy go ustawie czy wyzeruje to jest tak samo.Sprawdziłem...
Witam, Piszę obsługę enkodera optycznego w przerwaniu jednak natrafiłem na dziwny problem! Otóż kiedy program uruchamiam w "debugerze" to wszystko śmiga jak należy, gdy wrzucam program na procka to wywoła się kilka-kilkanaście razy przerwanie nagle koniec, nie przyjmuje tego przerwania, wiem bo wynik wyświetlam na wyświetlaczu, sprawdzałem też i program...
W każdym przypadku lepiej użyć do tego DMA. Do jednego bajtu to chyba byłaby przesada. Raczej przy takich wolnych odczytach i niewielkich/nierównych ilościach w każdym zapisie/odczycie bajtów zrobiłbym to na przerwaniach. I przy okazji: 1. Dummy byte 0xff może nie być dobrym pomysłem - nie chce mi się czytać DS-a tego układu czy coś tym nie mącisz....
Nigdy nie używałem debug_printf i w ogóle raczej mało debuguje w ten sposób ale FreeRTOS przejmuje systemowe przerwanie w SAM7X coby wykryć przerwanie od PITa. Poza tym jeżeli debug_printf w ogóle korzysta z przerwań to nie będzie działać bo we FreeRTOS przerwania muszą być odpowiednio "spreparowane". Popatrz sobie na przykładowe przerwania od UARTa.
Napisałem o przerwaniach bo widzę pewne niebezpieczeństwo. W arduino do debugowania używa się UART. Wysłanie danych do 30 LED trwa 450us. Odbiór jednego znaku przy 115200 to 87us. Jeśli będę chciał wydawać komendy po UART to mogę stracić nawet 3 znaki (w 450us przesłane może być 5 znaków ale AVR ma sprzętowe FIFO na 2 znaki). W praktyce może to oznaczać...
Witam serdecznie. Jak poradzić sobie z SysTickiem i przerwaniem, ponieważ po kompilacji środowisko zwraca taki błąd: [syntax=bash]D:\workspaceAtolic\Cortexy\... multiple definition of `SysTick_Handler' src\main.o:D:\workspaceAtolic\Cortexy\De... first defined here [/syntax] [syntax=c] #include "stm32f10x.h"...
Prawidłowe kasowanie flagi w przerwaniu: TIM3->SR = ~TIM_SR_UIF; Prawidłowe używanie rejestrów BSRR: GPIOC->BSRR = GPIO_BSRR_BR13; Piszesz że "NVIC_EnableIRQ(TIM3_IRQn);" zawiesza układ. Używasz debuggera czy wnioskujesz to po tym, że nie zapala się żadna dioda? Jeśli używasz debuggera, to raczej powinieneś widzieć na czym dokładnie się zawiesza. Jeśli...
Fredie, Prawie, że poszło. Stary projekt się skompilował, wgrałem działa. Niemniej projekt był oparty na jakichś starych twoich przykładach jeszcze z roku 2009. Chciałem zaktualizować projekt za pomocą twoich najnowszych przykładów, wobec czego wywaliłem podkatalog Setup z plikami hdr_special_registers.h, startup.S, stm32f103ve_rom.ld, vectors.c oraz...
https://obrazki.elektroda.pl/5285565000_... Język programowania Arduino i środowisko Arduino IDE są najpopularniejszymi narzędziami programistycznymi na rynku hobbystów i amatorów. Niestety temu narzędziu brakuje niektórych funkcji dostępnych w profesjonalnych IDE, takich jak autouzupełnianie kodu czy możliwość dodawania punktów przerwania...
zacząłem odchudzać program żeby wkleić i doszedłem co szwankowało. Miałem zmienną o tej samej nazwie zdefiniowaną w dwóch funkcjach lokalnie jak zdefiniowałem ją globalnie zaczęło działać. Nie włączały się przerwania. Nie wiem czemu nie działało teoretycznie powinno ale jakoś po poprawieniu nie mam czasu i ochoty na dociekanie gdzie jest błąd.
Nie mam w tej chwili kodu przed sobą, ostatnio ustawiłem 4 bity na preemption. Nie chce w tej chwili siać zamieszania (zmieniałem z 3 bitów...), więc wrzucę potwierdzone wyniki wieczorem + lepszy debug. btw, czy ktoś może potwierdzić że wrzucony kod (enable_interrupts/disable_interrupts )nie ma jakichś fundamentalnych błędów że nie może działać? W przerwaniach...
Witam! Zaczynam przygodę z stm32. Mam płytkę stm32discovery, którą programuje w środowisku IAR. Napisałem programik, który komunikuje się po uarcie z kompem. Program działa- wysyłam rozkaz z terminala na, który mikrokontroler odpowiada (wykorzystuje przerwania). Problem zaczyna się gdy resetuje układ. Kroki postępowania: 1. Kompiluje program o IARze...
witam Mam prosty projekt (eclipse,st2link,openOCD), miganie diodami i przerwania od SysTick, projekt działa ok, normlanie mozna debugować itp. Nastepnie do tego projektu dołożyłem moduł FatFS. Projekt sie kompiluje ale przy debugu jest problem, po załadowaniu pliku, debuger nie zatrzymuje się na pierwszej funkcji w main jak to mialo miejsce w podstawowym...
Jak zaprogramowac sterownik 8259a w trybie polling, uzywajac debuggera i pokazac jak przyjmuje przerwania IRQ& iIRQ^ z przyciskow?
U mnie da się przerwać klawiszem Esc lub Ctrl+Break . "Code execution has been interrupted" Po wyborze opcji "Debug" program przechodzi w tryb edycji kodu z podświetloną bieżącą linią. Te klawisze u Ciebie nie dzialają? No właśnie, że nie. Dodano po 28 U mnie da się przerwać klawiszem Esc lub Ctrl+Break . "Code execution has been interrupted" Po wyborze...
A, to znaczy, że po n-latach udało im się to poprawić (bo była to pułapka, w którą wpadał każdy kto zaczynał dopiero z bootloaderami). Co powinieneś zrobić: 1. Wyłączyć odpowiednie przerwania w NVIC (w bootloaderze). (następne punkty w aplikacji, najlepiej po wszyatkich start-up kodach) 2. Sprawdziić debugerem jaka jest wartość VTOR 3. Tym że samym...
Na chwilę obecną nie używam żadnego ponieważ żaden nie działa tak jak powinien. Albo nic nie zaciągają, albo sypią samymi bugami w debugu, albo są problemy ze ściąganiem floatów. Na razie z racji braku czasu przerwałem przerabianie kodu. Ale najlepiej działał (o ile dobrze pamiętam nazwę), Http Fronius, napisany w Pythonie.
Juz wszystko jest ok przerwania działają a program wyglada mniej wiecej tak: int main(void) { __disable_interrupt(); uart0_init(); AT91C_BASE_PIOA->PIO_OER = LED1; //out LED1OFF; //PRZERWANIA PiO: AT91F_PIOA_CfgPMC(); AT91F_PIO_CfgPullup(AT91C_BASE_PIOA, SWM); AT91F_PIO_CfgInput(AT91C_BASE_PIOA,....
To tak jak pisałem: budzisz przerwaniami i po sprawie. Jakbyś jeszcze napisał co to za RX używasz to może by się okazało, że ma interfejs SPI, który też jest obsługiwany przez przerwania... Im więcej danych podasz, tym lepszą odpowiedź uzyskasz Pozdrawiam P.S. Do Twoich zastosowań wystarcza z nadmiarem (pod)rodzina ATmega 48/88/168 w wersji V, a jeszcze...
Co trzeba zrobić żeby debugowanie było poprawne? Zwykle debuggowanie aplikacji z bootloaderem jest nieco upierdliwe. Po pierwsze - dla pewności - spytam, czy masz wgrany bootloader i czy mniej-więcej jesteś w stanie stwierdzić, czy takie kombo (bootloader + aplikacja) działają prawidłowo (poza debuggowaniem)? Jeśli tak, to u mnie w Eclipse zwykle nie...
#include <inttypes.h> #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include <avr/iom32.h> #include <avr/interrupt.h> #include <string.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "HD44780.h" //definicje zmiennych volatile int ms, s, m, h, znacznik; char buf[256];...
Ok sprawa się nieco wyjaśniła. Mikroklocek nie idzie spać po użyciu WFE ale za to robi to po wywołaniu WFI. A sprawdzałeś tak jak Ci napisałem? WFE czeka na eventy i może być tak, że jeżeli używasz DBGMCU od razu może być ustawiony event od debugu. Dlatego trzeba zawołać SEV WFE WFE tak jak Ci napisałem. WFI to zupełnie inne czekanie (na przerwanie)....
Czyli jednak ;) (at)Piotr Piechota: nie lepiej to zrobić na przerwaniach od compare timera (o ile się da ;))?
Z przerwaniami sobie poradziłem, natomiast w dalszym ciągu zapisywanie/odczytywanie z pamięci FLASH nadal sprawia problem. Przerwanie: static void IrqHandler(void *arg) { i += 1 ; } /* KONIEC OBSLUGI PRZERWANIA */ int main() { DDRD = 0x00 ; // PORTD jako wejscie PORTD = 0xFF ; // podciagniecie wejsc do 1 //EICRA = 0xAA...
Jakieś głupoty mi to pokazuje. Mam breakpoint-a ustawionego i po każdej próbce sprawdzam sobie wartość tego licznika Nie zatrzymuj wykonywania programu tylko użyj SWO (Serial Wire Viewer). Ustaw sobie: 1. W projekcje użycie tego pinu: https://obrazki.elektroda.pl/7797775900_... 2. W ustawiniach debugera włącz to i ustaw odpowiednio...
Uważaj kolego ;) włączasz przerwania a nie zainicjalizowałeś wogóle wektorów przerwań w tym tego od Timera0 ;)
Detekcja flagi nie jest problemem. Kombinowalem z tym na różne sposoby. Pytanie dlaczego po czwartym bajcie wzbudza się przerwanie z częstotliwością ok 700kHz. Wygląda jakby przerwanie nie kasowało flagi ale żadna flaga nie jest ustawiona. Pracuje pod debugiem pod pełnym JTAG. Moze mam stara rewizję proca jedna z pierwszych z jakimś błędem, plyta Eval...
Po naciśnięciu ikony "Build" w oknie "Debug" pojawiają się błędy. Rozumiem, że kod napisał ktoś inny, a Ty nie znasz języka C. Bo to dość podstawowa wiedza dla studenta, żeby umiał napisać program, który się skompiluje, a jak nie, to wiedział, jak poprawić błędy. Zadaj jakieś konkretne pytanie. To jest Twoje zadanie napisać tę pracę - m.in. ma Cię...
Wygląda to zatem tak, że po uruchomieniu zasilania: deklaruję tablicę o rozmiarze ramki z czujnika Przy każdym odpaleniu zasilania musisz pisać kod i go kompilować? Nie zazdroszczę. A jak byś sprzedał 10000 urządzeń i musiałbyś do każdego biegać przy każdym odpaleniu zasilania. Edytowałem. Ukłony. EDIT... Zrezygnowałem z DMA, którego nie jestem pewny,...
W pracy mam jakiegoś AVR64 lub AVR128 , już nie pamiętam co kupiłem. Ale będę miał dostęp dopiero pod koniec tygodnia. Teraz możemy zrobić mały eksperyment i sprawdzić jaki jest rzeczywisty rozmiar wektora przerwań. W załączeniu projekt w ASM który powoduje wywołanie przerwania NMI czyli następny wektor po RESET. Przy czym dzięki temu że mamy projekt...
Patrzyłeś o co chodzi w tym przerwaniu w dokumentacji NVIC? Podpada mi jeden bit w rejestrze od HardFault: DEBUGEVT: This bit is set if there is a fault related to debug. This is only possible when halting debug is not enabled. For monitor enabled debug, it only happens for BKPT when the current priority is higher than the monitor. When both halting...
Działa!!! #1 gdybyście widzieli tego banana na mojej twarzy! #2 ten debugger nie jest jednak lipny #3 dlaczego nie działało? - przez lenistwo... wszystko przez to, że nie inicjowałem uartu ręcznie tylko przez dyrektywe preprocesora "#pragma DEFJ(TIM1_INIT=0xFD) //COM0 - 9600, mnoznik x2 = 19200" służy ona do zainicjowania uarta - czyli ustawienia wartości...
Domyślnie Atmel Studio w czasie debugowania blokuje przerwania podczas śledzenia krok po kroku, co ma za zadanie ułatwić śledzenie funkcji. Dodatkowo przerwanie od USART wystąpi bardzo późno - dopiero po wysłaniu bajta, co może trwać nawet kilka tysięcy cykli CPU.
Nie uczę piłem się. Ale teraz nie posiadam fsadu aby wgrać. Dodam że udało mi się odczytać na stole k tag. Mam wrażenie, ze bootloader jest skorumpowany, możesz się już z tym ECU pożegnać. Czytałem ze zrozumieniem.... Background Debug Mode (BDM) "uwalenie" tego interfejsu jest równoznaczne z uszkodzeniem procesora. Na tym kończę ten temat.
Nie potrafie dokladnie okreslic co sie dzieje gdyz w release nie mam dostepu do debuggera :) Obsluge USART zrobilem na przerwaniach, wpisuje po kolei dane az do konca ramki komunikacji. W petli glownej ramka jest dekodowana i wywolywane sa polecenia. Uzywam kompilatora CrossStudio. Sterowanie silnikiem dziala po skompilowaniu w release. Dorobilem komunikacje...
Błędu nie ma w kodzie, ale jest w logice programu. Jak wystąpi problem z komunikacją I2C to sterownik I2C nie zwróci pożądanego stanu (np. device nie odpowie ACK). W tym momencie nigdy nie wyjdziesz z pętli while, bo nigdy nie ma ACK i kółko się zamyka. Musisz to zrobić na przerwaniach. W zasadzie masz 2 możliwości: a)brzydkie - Ustawić przerwanie jako...
Witaj, odnośnie kompilatorów i środowiska to jest kilka opcji. Darmówka ale bez specjalizowanej optymalizacji kodu Kompilator: Hi-Tech MPLAB C18 XC8 SDCC Assembler: Chyba ogólnie dostępny Środowisko do tworzenia kodu MPAB X, lub ewentualnie MPLAB 8 Debug: MPLAB X + minimum pickit2 ale lepiej jest pickit3 lub droższe modele. Co do nauki programowania...
Chciałem zrobić przerwanie zewnętrzne (EXTI0), że jak naciśnie się guzik na płytce to tam lampki się zapalą inaczej. Tylko problem jest taki, ze jak nacisnę sobie guzik to niby program skacze do przerwania - tj. tak mi OpenOCD pokazuje: halt target state: halted target halted due to debug-request, current mode: Handler External Interrupt(6)...
gniazdo debug debug zablokował seagate debug
indukcja plyta katalog kodów unitra g8010
kominek drzwi hulajnoga xiaomi zasilacz
Optymalna odległość konwertera od czaszy 110 cm Zasilanie Arduino GIGA R1 WiFi z ogniwa 18650