GyverMatrixBT
GyverMatrixBT copied to clipboard
Предложение оптимизации
https://github.com/AlexGyver/GyverMatrixBT/blob/e5ef85e891c61d9324cfe828a24efb7ed7ba989c/firmware/GyverMatrixOS_v1.8/custom.ino#L62
Предлагаю использовать массив ссылок на функции в этом месте. Во-первых, это упростит добавление или удаление режимов. Во-вторых, это чуть чуть оптимизирует программу (не нужен поиск функции каждую итерацию) В-третьих, избавляемся от необходимости вручную вписывать текущее кол-во режимов.
Единственное, что все функции, в этом случае, должны быть 1 формата, т.е. иметь одинаковое кол-во аргументов и возвращаемое значение.
Сырой пример как это работает:
void a(int X) { action(); } //функция а
void b(int X) { action(); } //функция b
void c(int X) { action(); } //функция с
void d(int X) { action(); } //функция d
//создание массива функций:
void (*P[])(int) =
{
a,
b,
c,
d
};
//получение размера массива функций
unsigned long size = sizeof(P) / sizeof(P[0]);
//вызов функций из массива
(*P[0])(250);
(*P[3])(120);
//сохранение функции в переменную f
void (*f)(int) = *P[0];
//вызов сохранённой функции
f(1);
В теории, можно при переключении режима сохранять функцию режима в переменную и в лупе всегда вызвать функции, которые будут попадать в эту переменную.
Вот на сохранении функции в переменную я понял что с++ изучал сам, и делал это крайне поверхностно)))