17-03-2019, 21:01
(Ten post był ostatnio modyfikowany: 17-03-2019, 22:57 przez Jarewa0606.)
Czytam i czytam o FreeRTOS ale to nie dla mnie ja dopiero początkujący ledwo ogarniam arduino podstawy a gdzie zajmować się wielowątkowością.
Ze względu że chciałem tylko aby na Core1 był mniejszy kod który pisze szybszy i będę dopisywał wiec trochę przerzucić na Core0 bo po co się ma nudzić skoro jest no ale on mi fiksował bo na nim jest WDT jak i obsługa stosu Wifi , nie wiem czy skojarzysz jak sie kiedyś pytałem o kolejność loop? (przepis itd.). Wiec wykorzystałem to że już tak pisałem (definicje funkcji) i było podzielone wiec utworzyłem zadania ich wywołanie "xTaskCreatePinnedToCore" jest możliwość przypisania tego "przepisu" gdzie ma sie wykonać i funkcja vTaskDelay() określam co ile ten przepis ma się wykonywać
Ten void loop() to jest po staremu jak było bez FreeRTOS
Myślałem pierw o jednym zadaniu na Core0 (tak jak mam na Core1) i dać minimalny zakres vTaskDelay dla wszystkich ale niektóre nie potrzebują tak częstego powtarzania.
Jak myślisz sporo w tym błędów??
Jeszcze może wiesz czy lepiej zapis do UDP wykonywać na jednym rdzeniu czy może być na dwóch? bo mam obawy czy zapis do UDP z core0 nie zakłuć zapis do UDP core1 gdy czasowo się pokryją.
Ale jeszcze zmienię bo wyczytałem że vTaskDelayUntil jest dokładniejsze niż vTaskDelay
Ze względu że chciałem tylko aby na Core1 był mniejszy kod który pisze szybszy i będę dopisywał wiec trochę przerzucić na Core0 bo po co się ma nudzić skoro jest no ale on mi fiksował bo na nim jest WDT jak i obsługa stosu Wifi , nie wiem czy skojarzysz jak sie kiedyś pytałem o kolejność loop? (przepis itd.). Wiec wykorzystałem to że już tak pisałem (definicje funkcji) i było podzielone wiec utworzyłem zadania ich wywołanie "xTaskCreatePinnedToCore" jest możliwość przypisania tego "przepisu" gdzie ma sie wykonać i funkcja vTaskDelay() określam co ile ten przepis ma się wykonywać
Ten void loop() to jest po staremu jak było bez FreeRTOS
Myślałem pierw o jednym zadaniu na Core0 (tak jak mam na Core1) i dać minimalny zakres vTaskDelay dla wszystkich ale niektóre nie potrzebują tak częstego powtarzania.
Jak myślisz sporo w tym błędów??
Jeszcze może wiesz czy lepiej zapis do UDP wykonywać na jednym rdzeniu czy może być na dwóch? bo mam obawy czy zapis do UDP z core0 nie zakłuć zapis do UDP core1 gdy czasowo się pokryją.
Ale jeszcze zmienię bo wyczytałem że vTaskDelayUntil jest dokładniejsze niż vTaskDelay
Kod:
xTaskCreatePinnedToCore( WiFi_conect_Core_0, "CPU_0", 10000, NULL, 1, &CPU_0, 0);
xTaskCreatePinnedToCore( AC_data_Core_0, "CPU_0", 10000, NULL, 1, &CPU_0, 0);
xTaskCreatePinnedToCore(
Core_1, /* Task function. */
"CPU_1", /* name of task. */
10000, /* Stack size of task */
NULL, /* parameter of the task */
1, /* priority of the task */
&CPU_1, /* Task handle to keep track of created task */
1); /* pin task to core 1 */
}
void WiFi_conect_Core_0 ( void * pvParameters ){
for(;;){
WiFi_conect();
// AC_data();
vTaskDelay(1000);
}
}
void AC_data_Core_0 ( void * pvParameters ){
for(;;){
// WiFi_conect();
AC_data();
vTaskDelay(50);
}
}
void Core_1( void * pvParameters ){
for(;;){
recvWithEndMarker(); // loop odczytu z Serial2
showNewData(); // loop zapisu serial2 do UDP
showUdpData(); // loop odczytu udp i zapisu do Serial2
AC_data_send();
nexLoop(nex_listen_list); // loop wyswietlacza Nextion
}
}
void loop () {
// WiFi_conect();
// nexLoop(nex_listen_list); // loop wyswietlacza Nextion
// recvWithEndMarker(); // loop odczytu z Serial2
// showNewData(); // loop zapisu serial2 do UDP
// showUdpData(); // loop odczytu udp i zapisu do Serial2
// AC_data();
// AC_data_send();
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.