-
PROHARDVER!
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
-
Panhard
tag
válasz
Janos250 #7790 üzenetére
Köszi a részletes magyarázatot.
Azt próbáltam még, hogy ha 1-nél magasabb prioritáson van a task, akkor el sem indul. Nem tudom miért. De mindegy, így most jól működik. Kicsit átvariáltam úgy, hogy az időkritikus feladatokat az alap loop-ba tettem, ami core1-en fut, minden mást az általam létrehozott loop1-be, ami core0.
-
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. -
Panhard
tag
válasz
Janos250 #7786 üzenetére
Csak akkor azt nem értem, hogy miért fogja le a másik taskot? Összesen két task van beállítva, az egyik a core0-án, a másik a core1-en. Elvileg teljesen függetlennek kellene lenniük egymástól. Ha például az egyiket leállítom egy while(1);-el, a másiknak akkor is futnia kellene. Illetve fut is, de az miért baj a kutyának?
-
Panhard
tag
válasz
Janos250 #7784 üzenetére
Megoldódott. Az volt a baja, hogy az task üresjáratban megy valamikor több mint 5mp-ig. Ez egy do/while függvény, ebből nekem max 10mp után lép ki, ha addig nem jön válasz a szervertől. Ez így jó is. Betettem egy delay(1); késleltetést, így már csinál valamit, nem is indul be a task wdt.
-
Panhard
tag
Sziasztok!
Tudtok abban segíteni, ki lehet-e kapcsolni ESP32-ben a task watchdog-ot? Vagy növelni az idejét? Van egy függvényem, ami egy webszerveren lévő php fájl válaszát várja és ez valamikor több mint 5mp, ilyenkor "Task watchdog got triggered." hibaüzenetet kapom.
Próbáltam az sdkconfig fájlban módosítani az értéket 5mp-ről magasabbra, (CONFIG_TASK_WDT_TIMEOUT_S=20) és próbáltam kikapcsolni is, (CONFIG_TASK_WDT=) de ez nem volt hatással rá. Ugyanúgy 5mp után aktiválódik.
Ha az arduino probramban beincludolom a "esp_task_wdt.h" fájlt, és használom az abban lévő függvényeket, esp_task_wdt_feed() , esp_task_wdt_delete(), azok sincsenek hatással rá. Tudtok valami megoldást? Előre is köszönöm.
Új hozzászólás Aktív témák
Hirdetés
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged