И что мешает вызывать только функции с четырьмя параметрами, и каждой из них возвращать булевый результат?
Во-первых это могут быть не твои функции. А функции из стороннего кода (библиотеки), сигнатуру которых разрабатываешь не сам.
Во-вторых - в чем выигрыш? switch-case компилируется в тот же самый прыжок по адресу в массиве, а читабельность конструкции лучше.
Не всегда. Сильно зависит от содержания case.
А зачем? Ради спортивного интереса?
Товарищи ученые…
а RTOS не предлагать?
Почему бы и нет? Выкладывай ![]()
не проверял, не на чем сейчас
#include <Arduino_FreeRTOS.h>
void TaskBlink1(void *pvParameters);
void TaskBlink2(void *pvParameters);
void TaskBlink3(void *pvParameters);
void setup() {
Serial.begin(9600);
xTaskCreate(TaskBlink1, "Task1", 128, NULL, 1, NULL);
xTaskCreate(TaskBlink2, "Task2 ", 128, NULL, 1, NULL);
xTaskCreate(TaskBlink3, "Task3 ", 128, NULL, 1, NULL);
vTaskStartScheduler();
}
void loop() {
}
void TaskBlink1(void *pvParameters) {
while (1) {
vTaskDelay(5000 / portTICK_PERIOD_MS);
Serial.println("Task1");
}
}
void TaskBlink2(void *pvParameters) {
while (1) {
vTaskDelay(10000 / portTICK_PERIOD_MS);
Serial.println("Task2");
}
}
void TaskBlink3(void *pvParameters) {
while (1) {
vTaskDelay(15000 / portTICK_PERIOD_MS);
Serial.println("Task3");
}
}
это так, без проверок всяких коллизий и т.д.
На нано не компилируется
Detecting libraries used...
/home/vladimir/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/vladimir/.arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino -I/home/vladimir/.arduino15/packages/arduino/hardware/avr/1.8.6/variants/eightanaloginputs /tmp/arduino/sketches/918D4EC6730BC9146D8484343029FA23/sketch/test.ino.cpp -o /dev/null
Alternatives for Arduino_FreeRTOS.h: []
ResolveLibrary(Arduino_FreeRTOS.h)
-> candidates: []
Used platform Version Path
arduino:avr 1.8.6 /home/vladimir/.arduino15/packages/arduino/hardware/avr/1.8.6
Error during build: exit status 1
[Warning] Failed to generate IntelliSense configuration.
[Error] Verifying sketch 'test.ino': Exit with code=1
Такое впечатление, что библиотеки нет
Предупреждать надо ))
Но можно и проще ))
#include <shTaskManager.h> // https://github.com/VAleSh-Soft/shTaskManager
#define timer_1 5000ul // первый интервал
#define timer_2 5000ul // второй интервал
#define timer_3 5000ul // третий интервал
void print_1();
void print_2();
void print_3();
shTaskManager tasks(3);
shHandle timer1;
shHandle timer2;
shHandle timer3;
void print_1()
{
tasks.stopTask(timer1);
tasks.startTask(timer2);
Serial.print("Print_1");
}
void print_2()
{
tasks.stopTask(timer2);
tasks.startTask(timer3);
Serial.print("Print_2");
}
void print_3()
{
tasks.stopTask(timer3);
tasks.startTask(timer1);
Serial.print("Print_3");
}
void setup()
{
Serial.begin(9600);
timer1 = tasks.addTask(timer_1, print_1);
timer2 = tasks.addTask(timer_2, print_2, false);
timer3 = tasks.addTask(timer_3, print_3, false);
}
void loop()
{
tasks.tick();
}
Мда, а память как не в себя жрет ![]()
скока?
покажи вывод.
у Деда вроде еще был сшуделер.
FreeRTOS
Скетч использует 7922 байт (25%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 377 байт (18%) динамической памяти, оставляя 1671 байт для локальных переменных. Максимум: 2048 байт.
Мой вариант с диспетчером задач
Скетч использует 2758 байт (8%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 224 байт (10%) динамической памяти, оставляя 1824 байт для локальных переменных. Максимум: 2048 байт.
Тоже многовато, но не настолько же ))
Там свои заморочки…
Когда дойдешь до уровня отправки-получении данных по https через wifi, например в телегу, ты сильно удивишься, сколько там жрёт памяти.
но этож задачи для других МК.
а что ЕСП, с ее мегабайтами, уже не справляется?
Так оно и без отправки в телегу жрет почти столько же.
Ни капли не удивлюсь. Ибо такие вещи не на 328 атмеге делаются, а на esp совсем другие объемы
