Hirdetés
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Mr Dini: Mindent a StreamSharkról!
- eBay-es kütyük kis pénzért
- gban: Ingyen kellene, de tegnapra
- sziku69: Szólánc.
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Elektromos rásegítésű kerékpárok
- ldave: New Game Blitz - 2025
- jakra: Retro gyujtemenyem (cloud synced for safety...)
-
LOGOUT
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Janos250
őstag
válasz
Panhard
#7788
üzenetére
Igen, erről érdemes még néhány szót szólni, hátha másnak is lesz ilyen problémája.
Nem a másik core-on futó taskot fogta meg, hanem ugyanazon a core-on a többi taskot.
Ugyanis a freeRTOS futtat még pár egyéb rendszer-taskot is, amit pontosan nem tudunk mit, mert elvileg a
vTaskList() lenne hivatott kilistázni, de az Arduino alatt valamiért nem működik.
Írjuk be a következő programot:void loop() {
Serial.println("loop begin");
uint8_t i = uxTaskGetNumberOfTasks( );
Serial.print("uxTaskGetNumberOfTasks = "); Serial.println(i);
delay(60000) ;
Serial.println("loop end");
} ; // end loopA WDT nem okoz gondot, hiába a hosszú várakozás, mert a scheduler által beállított prioritások miatt futhat a többi task is.
Ezt a kiírást kapjuk:
uxTaskGetNumberOfTasks = 7Tehát a mi loop taskunkon kívül még vannak a core-on hatan, akik szintén futni akarnak.
Ezért lényeges a prioritás.Ha megnézzük a main.cpp-t :
void loopTask(void *pvParameters)
{
setup();
for(;
{
micros(); //update overflow
loop();
}
}extern "C" void app_main()
{
initArduino();
xTaskCreatePinnedToCore(loopTask, "loopTask", 8192, NULL, 1, NULL, ARDUINO_RUNNING_CORE);
}
Itt a loop prioritása 1, így igazából én sem teljesen értem, hogy miért nem futhatnak a többiek is, hiszen a loop prioritása is 1, meg Te is ugyanezt a prioritást adtad, de valahogy mégis megfogja a többit.
Tehát mégis az van, hogy ha valaki hatalomra jut, és olyan hangosan kiabál, hogy senki mást nem hagy szóhoz jutni, akkor egy idő után a WDT miatt összeomlik a rendszer. Szükséges egy delay!Még egy megjegyzés:
Ha a loopodat akarod a másik core-ra tenni, azt a mainben tudod átírni, az xTaskCreatePinnedToCore paraméterében. Én néha átteszem a core0-ra, ha a core1-en elég időkritikus taskot futtatok. -
Panhard
tag
válasz
Panhard
#7787
üzenetére
Szerintem nem is az volt a baja a kutyának, hogy nem tudott a függvénytől futni a második task, hanem csak annyi, hogy nem csinál semmit 5mp-ig az első. Így néz ki a programban a task kezelés:
xTaskCreatePinnedToCore(loop1, "loop1", 4096, NULL, 1, NULL, 1);
xTaskCreatePinnedToCore(loop2, "loop2", 4096, NULL, 1, NULL, 0);
}
//***********************************************************************************************************
void loop() {
}
//***********************************************************************************************************
void loop1(void *pvParameters) {
while (1) {
gps();
}
}
//***********************************************************************************************************
void loop2(void *pvParameters) {
while (1) {
temp_millis = millis();
if(temp_millis>temp_millis_1 ) { temp_millis_1 = temp_millis+2000; meghiv(); }
}
}
//***********************************************************************************************************Ami fontos, hogy a gps függvénynek minden ciklusban hívódnia kell a loop1-ben, az nem állhat meg, mert akkor nem tudja beolvasni a gps vevőt a serial porton.
Minden más programrész a loop2-ben van, aminél nem számít, ha le is lassul a ciklusidő pár másodpercre. Ott amúgy is 2másodpercenként hívom meg a meghív függvényt. -
Janos250
őstag
válasz
Panhard
#7783
üzenetére
Tippek:
Gyanítom, hogy nem a várakozó task okozza a galibát, hanem valami másik, aki közben "nem jut szóhoz"
1. Próbáld meg a prioritást variálni, hogy amíg a függvényed fut, mások is szóhoz jussanak
2. tegyél be pl. vTaskDelay(20)-at, mert akkor is futhat más task is
3. ha végképp nem megy, akkor én kilépnék a taskból, majd újra be.A freeRTOS valahogy taskonként kezeli a WDT-t, ezt nem tudom hogy csinálja, de megoldja. A WDT-t lehetne közvetlen írással nullázni, de nem tudom, felborít-e valami mást a freeRTOS-ban
Egyébként az ESP32 kutyusa hardver szinten "idomítva van, hogy csak a gazditól fogadjon el kaját".
A gazdi az, aki tudja a jelszót, ami valami 32 bites szám.
Új hozzászólás Aktív témák
- Háztartási gépek
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Amazon Fire TV stick/box
- Soundbar, soundplate, hangprojektor
- Azonnali fáradt gőzös kérdések órája
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Battlefield 6
- PlayStation 5
- BestBuy topik
- További aktív témák...
- BESZÁMÍTÁS! Dell Precision 5540 notebook - i9 9880H 64GB DDR4 2TB SSD nVidia Quadro T2000 4GB W11
- BESZÁMÍTÁS! MSI ThinA15 B7VF-449XHU Gamer notebook - R7 7735HS 16GB DDR5 1TB SSD nVidia RTX 4060 8GB
- BESZÁMÍTÁS! ASUS TUF A17 FA707NV notebook - R7 7735HS 16GB DDR5 1TB SSD nVidia RTX 4060 8GB WIN11
- BESZÁMÍTÁS! LENOVO Ideapad Gaming 3 notebook - R5 5600H 16GB DDR4 256GB +1TB SSD nVidia GTX 1650 4GB
- Kingston FURY 32GB KIT DDR5 6000MT/s CL30 Beast Black EXPO (garanciális, Alza)
- AKCIÓ! Apple MacBook Pro 16 M4 Pro 48GB RAM 4TB SSD macbook garanciával hibátlan működéssel
- Telefon felvásárlás!! Samsung Galaxy S25, Samsung Galaxy S25 Plus, Samsung Galaxy S25 Ultra
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! ASUS ROG STRIX RTX 3080 10GB videokártya garanciával hibátlan működéssel
- Tablet felvásárlás!! Samsung Galaxy Tab A8, Samsung Galaxy Tab A9, Samsung Galaxy Tab S6 Lite
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő
{
De prioritási beállításokkal is megoldható, hogy a várakozó ciklus ne fogja le teljesen az adott core-t.
ekkold
