GyverMatrixBT icon indicating copy to clipboard operation
GyverMatrixBT copied to clipboard

Предложение оптимизации

Open npo6ka opened this issue 6 years ago • 1 comments

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);

В теории, можно при переключении режима сохранять функцию режима в переменную и в лупе всегда вызвать функции, которые будут попадать в эту переменную.

npo6ka avatar Dec 11 '18 15:12 npo6ka

Вот на сохранении функции в переменную я понял что с++ изучал сам, и делал это крайне поверхностно)))

AlexGyver avatar Dec 29 '18 05:12 AlexGyver