da
TheMask » 19 feb 2021, 22:51
Grazie alessandrovo, appena riesco li leggo.
Cerco di rispondere in ordine:
djnz ha scritto:C'è ancora una cosa non chiara, come è realizzato lo scheduler attuale, cioè in che modo calcola i 100ms. Perché ci sono due sistemi profondamente diversi...
Lo scheduler(abbrevviato) è questo:
- Codice: Seleziona tutto
void InitScheduler(void)
{
time_tmp = millis();
task_1 = millis();
task_2 = millis();
task_3 = millis();
}
void UpdateScheduler(void)
{
time_tmp = millis();
//Task 100msec
if (time_tmp > task_1 + TIME_TASK_1)
{
Task_100ms();
task_1 = millis();
}
//Task 1000msec
if (time_tmp > task_2 + TIME_TASK_2)
{
Task_1000ms();
task_2 = millis();
}
//Task 3000msec
if (time_tmp > task_3 + TIME_TASK_3)
{
Task_3000ms();
task_3 = millis();
}
}
Dove:
- InitScheduler() viene richiamato nel setup()
- UpdateScheduler() nel loop()
-Task_100ms();Task_1000ms();Task_3000ms(); sono ciò che deve eseguire
drGremi ha scritto:Quindi? Quale è il problema se c'è un ritardo? Forse una cosa migliore potrebbe essere che spieghi cosa stai facendo e posti l'intero firmware. Ho il sentore che sia sbagliata l'impostazione architetturale.
Tra l'altro che temperature stai misurando?
Postare l'intero FW mi viene difficile perché sono 20 moduli compreso il main.
Le temperature vanno da 22°C a 30°C perché?
Cercando di semplificare al massino il problema del ritardo è questo:
All'interno del task da 100ms ho questa funzione:
- Codice: Seleziona tutto
void OnOffRGB(void)
{
if (Hours >= 7 && Hours < 8)
{
step++;
if (step == CalculateFade(60, 10, 0))
{
calculate_Duty_out++;
step = 0;
}
}
Mentre
- Codice: Seleziona tutto
int CalculateFade(byte TotalMinute, byte Duty_max, byte Duty_min)
{
Time_Step_minutes = TotalMinute / (Duty_max - Duty_min);
Time_Step_seconds = (uint8_t)Time_Step_minutes * 60;
increment_duty = Time_Step_seconds * 10;
return (uint8_t)increment_duty;
}
in pratica dalle 7:00 alle 8:00 sono 60min increment_duty = 3600
se sbaglia il 100ms a contare mi sballa gli step e arriva o prima o dopo al duty=10%
Spero di aver risposto a tutto