jednak tak napisałem algorytm aby dane z termometru były czytane sekwencjnie w przerwaniach Testowałem również obsługę DS18B20 w przerwaniach w ESP32 na FreeRTOS i symulowanie krótkotrwałych zaników zasilania czujnika praktycznie zawsze generuje problem 85. Niezależnie od egzemplarza czujnika, który użyłem do testów. Ale coś musi być skopane skoro...
FreeRTOS potrzebuje, żeby te przerwania były naked, czyli żeby kompilator nie generował ani prologu (zachowania rejestrów i stanu) jak i epilogu (odtworzenia rejestrów, stanu i powrotu z przerwania) - tym wszystkim zajmuje się sam FreeRTOS. W Twoim przypadku następowało przepełnienie stosu, bo kompilator odkładał rejestry przy wejściu do przerwania,...
Witam, Problem polega na tym, że po dodaniu do projektu bibliotek FreeRTOS'a i "poprawnym" jego skonfigurowaniu mam problem z SysTickiem i jego przerwaniem. Samo w sobie przerwanie działa poprawnie. Są zgłaszane przerwania co określony czas jednak taski nie są w stanie się przełączać. Planista ciągle siedzi w ostanio utworzonym tasku. Początkowo myślałem,...
Chyba nie do końca, ponieważ adres powrotu jest jednak w LR ponieważ instrukcją wyjścia z tej procedury jest: bx r14. Ale coś w tym jest że poprzez instrukcję: orr r14, #0xd modyfikuje się dodatkowo tryb pracy. Ale nadal nie rozumiem jak w tym r14 pojawia się właściwy adres - adres nowego tasku - do którego został procesor przełączony. Rozumiałbym gdyby...
Jeśli te funkcje zwracają status, to proponuję sprawdzać jaki dokładnie - DATA_EEPROM_Unlock(), DATA_EEPROM_Lock(), a zapewne też przez FLASH_ClearFlag(). nic nie zwracaja, usatwiaja tylko rejestry Dodano po 25 Zapomnialem napisac o jeden ważnej rzeczy, wszystkie opisane problemy wystepują gdy program głowny jest wykonywany z pod adresu 0x8003000,...
Czemu nie przekazujesz tej struktury przez wskaźnik? pewnie i tak w ostateczności zrobię ale ta sprawa znowu trafi do archiwum x :| ----- Zamieniłem poprzednią funkcję tak aby przyjmowała tyle samo bajtów co poprzednia struktura tylko w formie "rozłożonej" void softSPI_CallBack_Device_00_(int x0,int x1,int x2,int x3,int x4,int x5,int x6,int x7,int...
Handler: [syntax=c] void HardFault_Handler(void) { HAL_DbgUartInit(); // __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" ); while(1); } [/syntax] UART Init: [syntax=c] void HAL_DbgUartInit()...
U mnie też ogólnie działało dopóki nie odpaliłem jednego z peryferiów. Jeżeli JTAG nie może zatrzymać procka - to coś jest nie tak ze sprzętem. JTAG - jak na mój stan wiedzy - ma władzę absolutną. Więc nie ma możliwości aby program miał jakiś wpływ na sprzętowy kontroler JTAG. No chyba że przez jakieś rejestry czy przez komendy... Najczęściej przyczyna...
Ten drugi to stos przerwań (z których korzystasz) i powinieneś go ustawić na jakąś rozsądną wartość. Edit: Gdzieś w ustawieniach projektu powinieneś mieć możliwość ustawienia rozmiaru stosów. Jak odpalisz debugger to podejrzyj rejestry przechowujące MSP oraz PSP.
Im dłużej Cię czytam, tym bardziej mam zamiar przyłączyć się do namawiających Cię, żebyś obejrzał, jak to zrobiono we FreeRTOS - przynajmniej masz dobry i działający wzorzec.
Tak, Freddie Chopin ma rację, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... oraz configMAX_SYSCALL_INTERRUPT_PRIORITY powinny być spójne, ponieważ odnoszą się do tego samego lecz różnią się przesunięciem bitowym w celu stosowania tych flag w funkcjach bibliotecznych lub bezpośrednio w rejestrach.
Nie rozumiem ci oznacza : "Takie coś pokazuje mi się podczas debugowania: " Sprawdź co jakiego typu jest to HF gdzie jest jego źródło. https://www.freertos.org/Debugging-Hard-... Jeżeli nie wiesz jak to ruszyć to zainstaluj sobie atollic-a - tam masz plugin, który odczytuje rejestry i robi pokazuje to już w sposób...
w pliku LCDConf.c funkcja LCD_X_Config powinna zawierać: // // Orientation and offset of SEG/COM lines // Config.Orientation = DISPLAY_ORIENTATION; Config.RegEntryMode = 0x00; GUIDRV_FlexColor_Config(pDevice, &Config); kluczowa jest właściwa orientacja zgodna Config.RegEntryMode - jest to wartość wpisywana do rejestru kontrolera SSD decydująca o sposobie...
NVIC_ClearPendingIRQ(USB_IRQn) nic nie da w tym przypadku. Należy wykasować flagi w rejestrze USB interrupt status register (USB_ISTR) , ale jeśli to zrobisz samodzielnie funkcja HAL_PCD_IRQHandler(&hpcd_USB_FS) może już nie działać właściwie ponieważ w zależności od stanu tych flag są podejmowane odpowiednie działania. Jak wskazuje sama nazwa tej...
Nie mam licznika DTSU-h ale sprawdziłem sobie o jakie rejestry pyta falownik. Na wyrywki sprawdziłem kilka sygnalow i wychodzi ze pyta tak jak w tym pierwszym screenie. Dodatkowo jakby ktos chcial miec odczyt nie tylko obsługiwanego licznika dtsu , moze sobie przekonwertowac mape rejestrow. Dodatkowo podczas dodawania w aplikacji licznika potrzebny...
No ale jaki jest w ogóle sens tego kodu? 1. Najpierw czekasz na zmienną którą ustawiasz w tej samej funkcji i ponoć nie masz przerwań (choć w komentarzach coś niby o nich piszesz), to po co czekać? (nie mówiąc już o tym, że się nigdy nie doczekasz poza pierwszym razem [może], gdyż nigdzie tej zmiennej nie zerujesz przy braku problemów) 2. Potem kopiujesz...
Witaj ponownie, W dokumentacji atmela znalazłem notę cyt: SRCMP: Software Reset Command in Progress 0 = No software command is being performed by the reset controller. The reset controller is ready for a software command. 1 = A software reset command is being performed by the reset controller. The reset controller is busy. Może warto by było sprawdzić...
to może powinieś spróbować, lukni na załącznik, większość kodu masz napisane, wszystkie rejestry zmapowane, coś Ci brakuje to sam możesz dodać, patrz ile czasu oszczędza, masz stos usb, stos tcp, do każdego procka luminary masz własnie takie API i one jest open source. Wszystkie funkcje dostępne, mnie np brakowało ustawinie przerwania od ilości bajtow...
Jeśli chodzi o wielozadaniowość to przykłądem może być rtos: http://www.freertos.org/ Jednak jeśli chodzi o jego implemementację na AVRy to wydaje mi się ze jest to trochę przerost formy nad treścią ( zbyt mała wydajność).
LPC176x (czyli wersja 100-nóżkowa) posiada 4 timery, każdy z nich posiada po dwa wejścia: CAP0 i CAP1. Daje to max 8 wejść, czyli może się udać. Pokrótce wejścia CAP pozwalają zapisać aktualny stan timera (rejestr TC) w rejestrze CR0/CR1 w momencie zmiany stanu na takim wejściu. Pomiar szerokości impulsu PWM jest tym samym tak dokładny, jak często tyka...
Witam Od tygodnia walczę z włączeniem ethernetu na stm32. Po wielu nieudanych próbach uruchomienia lwip oraz freertos musiałem zacząć od początku. W CubeMX konfiguruje ETH. Zmieniłem adres PHY i adresy rejestrów, poniewaz Cube ma złe adresy. Aktualnie myśle, ze MAC poprawnie komunikuje się z PHY, poniewaz podczas inicjalizacji eth podglądam wartość...
Wszelkie porty z neta w takim razie będą bez sensu ponieważ nie są używane odwołania do rejestrów tylko z reguły jest to jakaś bezsensowna biblioteka która zje większość flasha. Kod na ARMa powinien być bardzo zbliżony o ile nie mniejszy. Dla przykładu FreeRTOS z dwoma taskami na AVR mi zajął około 8kb a na STM32F1xxx zajmuje koło 3kb
Witam, chce wskoczyć do głębokiej wody ... Tylko proszę nie odradzać, już zadecydowałem. Zastanawiam się nad jedna rzeczą czy w tych systemach task'i można tworzyć dynamicznie, czy muszą być stworzone na poziomie kodu. Czy task musi się wykonać do końca, żeby procesor przeskoczył do następnego? Czy to działa jak przerwania czyli rejestry na stos i skok.......
Wiem, że nie jest to najprostszy sposób przedstawienia problemu z funkcją vTaskDelayUntil(), ale w żadnym innym miejscu, w którym z niej korzystałem problemu nie było. w najbardziej trywialnej wersji: [syntax=c]void vfoo_Task(void * pvParameters){ portTickType xLastFlashTime; xLastFlashTime = xTaskGetTickCount(); for(;;){ Clr_BUZZER; vTaskDelayUntil(...
Witam! Męczę się od dłuższej chwili i nie mogę sobie poradzić z implementacją uIP (względnie lwIP) do mojego projektu. W skrócie to STM32103 + ENC424J600 po SPI, na SPI również karta. Całość pod FreeRTOS, soft pisany pod Eclipse + Codesourcery. Drivery od ENC przepisane z [url=http://code.google.com/p/avr-butter...
Zacznijmy od tego: co sie znajduje w rejestrze r3 przed instrukcja cmp? [syntax=asm]0010a09c: ldr r3, [sp, #4] // r3 = pParent 0010a09e: ldr r3, [r3, #8] // r3 = pParent->pNext[/syntax] Prawdopodobnie pParent->pNext wskazuje kosmos.
Witam, Mam problem z interfejsem UART1 w controllerze LPC1768. Oprogramowanie jakie napisalem bazyje na FreeRtos. Jeden z watkow (task) an LPC1768 obsluguje komunikacje z kontrolerem AVR przy uzyciu RS485 Half duplex. Komunikacja wyglada w porzadku zarowno wysylanie jak i odbieranie wiadosmosci z AVR. Po kilku godzinach pracy (6-12h) zawiesza sie odbieranie...
Integracja, z tego zrozumiałem i widziałem Jeżeli piszesz o integracji freeRTOSa to ja jej nie widzę, a używam freeRTOSa z STMami w każdym projekcie. ST-Link V3 został zaprojektowany z myślą o pracy z systemami operacyjnymi Nie wiem z jaką myślą ale STLink gdb server nie ma wsparcia dla thread aware debugging. Tak przy okazji V3 jest tak samo wolny...
Siedzę nad problemem już kilka dni i nie mogę sobie poradzić. Do tej pory program ładnie chodził. Kiedy wzbogaciłem go o funkcje malloc zaczęły się schody. Jeśli załaduje to co napisałem do pamięci wszystko ładnie przechodzi. Jeśli zresetuję urządzenie to w następnym przebiegu program się wywala na malloc. Jeśli wgram jeszcze raz ten sam obraz to znów...
Bardzo dziękuje za wszytskie odpowiedzi. Nie znalazlem informacji ile zajmuje fizyczne uruchomienie (po skonfigurowaniu rejestrów i włączeniu) DMA do kopiowania M2M. Czy da się jakoś w prosty sposób to sprawdzić? Licznik sprzętowy? Poza tym troszkę źle opisałem problem. Chcę aby wzrosła wydajność całej aplikacji. Tak, żeby wątek który kopiuje sobie...
No to lecimy dalej void vPortISRStartFirstTask( void ) { c34:e52db004 push{fp} ; (str fp, [sp, #-4]!) c38:e28db000 addfp, sp, #0 /* Simply start the scheduler. This is included here as it can only be called from ARM mode. */ #warning "Tu się wykłada" portRESTORE_CONTEXT(); c3c:e59f004c...
Witam W ramach zaliczenia mam do stworzenia projekt na bazie stm32f407 (płytka discovery) który będzie bazował na free rtos. Będą wątki sprawdzające stan przycisku[1], poziom napięcia[2] oraz wątek[3] tzw loga który będzie przez dma wyrzucał ciągi znaków przez porty szeregowy. Bez rtos sprawa wydaje mi się banalna lecz przy rtos mam wątpliwości merytoryczne....
Dzięki za pomoc. Widziałem już rtos'y z możliwością wywłaszczenia, ale myślałem że to to samo co ja znalazłem, tylko można ustawić priorytet dla "procesu" :D Znalazłem przed chwilą freeRTOS, tylko że rozmiar pliku jest zbyt wielki jak na moje łącze, bo mam limitowane, a ma on ponad 20 MB... A jak ten interpreter tak dokładniej zrobić? bo na pewno nie...
Witam, Od jakiegoś czasu zmagam się z komunikacją SPI pomiędzy dwoma procesorami stm32l452re. Transmisją i odbiorem danych zajmują się oba procesory. Wysyłam 6 bajtów po 16 bitów, co daje nam sumarycznie 3 przerwania. W taskach od FreeRtosa transmisja danych i sprawdzanie otrzymanych bajtów odbywa się w nieskończonej pętli while. Problem dotyczy tego,...
więc pora wziąć się za USB i Ethernet(na początek wystarczy USB). No nie wiem czy to drugie nie będzie prostsze. Poza tym na USB atmel udostępnia gotowe źródła, więc to tylko zostaje zaadoptować do swojego kodu. Co do środowiska, to popatrz, potestuj. Każdy ma inny gust i każdemu co innego się podoba. A wybór jest szeroki: IAR, Keil, CrossWorks, WinAvr.........
Dzięki. Program mi się wiesza na prvStartFirstTask(); na instrukcji svc 0 [syntax=c]SVC_Handler PROC EXPORT SVC_Handler [WEAK] B . ENDP[/syntax] NVIC trzeba jakoś skonfigurować? Chodzi mi o ten rejestr - Vector table offset register (SCB_VTOR). Dodam to co chcę uruchomić. [syntax=c] void vStartLedTasks( unsigned portBASE_TYPE uxPriority ){ xTaskHandle...
Witam, Pierwszy raz ustawiam PWM na SAM7S64. Całość działa na FreeRTOS. Chcę ustawić PWM na kanale 0 (pinA0) o okresie 1sek. void audio_hw_conf(void) { // Confiugre PIO (Parallel Input/Output Controller). AT91C_BASE_PIOA->PIO_PDR = AT91C_PWMC_CHID0; // Enable peripheral function. AT91C_BASE_PIOA->PIO_ASR = AT91C_PWMC_CHID0;...
Po perwsze: NOP w ARM-ach to nie jest ten sam NOP co w AVR-ach. NOP nigdy nie dochodzi do execution stage w pipelene i jest discardowany natychmiast po pobraniu. Tak że zachowanie takiej sekwencji NOP-ów jest mocno niedeterministyczne. NOP-y używa się do paddingu a nie opóźnień. Przecież FreeRTOS to system operacyjny wielozadaniowy i cyklicznie jest...
Cześć Chciałbym przedstawić kolejny mój projekt, tym razem jest to sterownik CNC. https://obrazki.elektroda.pl/2364320600_... https://obrazki.elektroda.pl/6352873400_... Jest już na rynku masa różnego rodzaju sterowników obrabiarek CNC, jak zwykle jednak chciałem zrobić coś własnego. Najważniejsze założenia projektowe:...
Jest sobie projekt wykorzystujący FreeRTOS. Jest zaimplentowana opcja tickless idle. Gdy nie ma nic do roboty w taskach, konfigurowane jest przerwanie z RTC a procek usypia za pomocą instrukcji wfi (wait for interrupt). Gdy przyjdzie przerwanie z RTC uruchamiana jest procedura obsługi tego przerwania a następnie kod jest przetwarzany od instrukcji wfi....
Pozycje w obcym języka są przydatne, ale dla tych, którzy już coś wiedzą na konkretny temat. Ucząc się od podstaw to tylko język ojczysty...(dla większości) Przejrzałem w/w pozycje - spis treści ładnie "wygląda" w pozycji "Mikrokontrolery STM32 w praktyce" - głównie interesuje mnie "instalacja i obsługa systemu operacyjnego FreRTOS". Ale patrząc po...
Raczej nic to nie zmieni. W funkcjach variadic float jest traktowany jak double (zajmuje 8 bajtów lub 2 rejestry), stąd problem. Kompilator dba o stos podczas pracy programu, ale to co dostaje na wejściu musi być wyrównane do 8-miu bajtów. Jeśli chcesz znaleźć źródło problemów, to olej na chwilę FreeRTOSa i po prostu w jakimś programiku zwykłym przetestuj...
Zakładka Memory jest trochę lewa... Najlepiej zrób to za pomocą OpenOCD i telnetu: komendy: mww address value (zapis) mdw address (odczyt) 4\/3!! Dzięki! To działa, i niestety nie tylko ta zakładka jest lewa, cały debuging pod eclipse jest lewy :( Ciekawi mnie jak jest w innych środowiskach? Wywala mi się program pod FreeRTOSem i za cholerę nie mogę...
Jeśli używasz stosunkowo "starego" newliba (starszy niż max kilka miesięcy, mogę dokładnie sprawdzić), to malloc() w wersji "nano" _NIE_ nadaje się do działania wielowątkowego choćbyś nie wiem co zrobił. W nowszych newlibach trzeba sobie przedefiniować dwie funkcje i dodać tam np. blokowanie mutexów. Inna opcja to przedefiniowanie malloc() i free()...
Witam temat w sam raz dla mnie(początkującego)- miałem w sumie podobne pytania, dużo mi się rozjaśniło. Przy okazji podepnę się pod temat, bo to chyba trochę zbliżone zagadnienia(Używam Eclipse, STM32F103RBT6, konfiguracja wg. strony FreddieChoppin(oprócz ustawienia ścieżek do plików-za chiny nie mogę tego zrobić i wszystko trzymam w glównym katalogu,...
Witam. Mam następujący problem. Otóż, chcę w obsłudze przerwania od kanału 1 timera TIM1 ustawiać semafor, na podstawie którego wykonuje się jedno z zadań. Robię to w standardowy (chyba) sposób: // Obsluga przerwania od TIM1 void TIM1_CC_IRQHandler(void) { static portBASE_TYPE xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE;...
No tak, tylko że on niewiele robi (jakkolwiek ma parę ciekawych dodatków: używa stosu procesu, włącza FPU, przestawia zegar procesora) - miganie LED-em pewnie można zrobić i w kilkunastu linijkach - a ja właśnie przegryzam się przez przykład freertos_blinky z lpcopen_3_02_lpcxpresso_link2_4370.zip - to też miganie LED-em, ale wielozadaniowe, i nie o...
Ok. Wyrzuciłem Uarta, zostawiłem tylko RTC i nadal nie działa. Piorytet ustawiony na 30. Semaphor musiał gdzieś przy usuwaniu komentarzy wyparować. Już jest. Nadal występuje problem z ustawieniem przerwań. Otóż (fragment z inicjalizacj RTC) http://obrazki.elektroda.pl/9562863900_1... [/img] vRTC (Handler) czeka na semafora, który teoretycznie...
LPC1768 posiada 32 priorytety czyli bity konfiguracyjne zajmują 5 bitów. Cortexy-M3 są zaprojektowane do obsługi 255 priorytetów ( 8 bitów), ale od producenta uC zależy ile bitów zaimplementuje. NXP dla LPC17xx przydzieliło 5 bitów. Każdy wektor przerwania ma swój rejestr do konfigurowania priorytetu i jest on 8 bitowy, z tym, że jeśli mamy zaimplementowane...
Ok, wszystko trzyma sie kupy, aczkolwiek wylazł mi jeden, wcześniej nie objawiony, zupełnie niespotykany i atakujący z zaskoczenia błąd. Problem polega na tym, że gdy zatrzymam rdzen na breakpointcie w wątku (lub przerwaniu), a potem puszczę go dalej (po prostu, nie step), to całość się natychmiast hardfault'ci. To samo dotyczy zwykłego stop'a rdzenia....
rejestry atmega8 atmega128 rejestry mcp23017 rejestry
makita wirnik iskrzy uszkodzony miernik rezystancji skasowana partycja
ściemniacz lampy stojącej niski poziom oleju
Bezpiecznik alarmu Honda Civic VIII UFO 2006 Bosch PSB 1800 - wkrętarka nie działa po wymianie ogniw