/** 26.09.2020 ad0x0 time manager... херня вот какая. Adtimman – это менеджер вызовов по времени. Задача стояла примерно так, в очереди команд стояла команда на паузу 100 мс. Первая реализация была hal_delay(100)…в прерывании… -тупость. Что-то надо было такое, что вызовет функцию через 100мс с нужного момента. Как это работает. В так называемый планировщик кладется команда ‘выполнить ф-ю через 100мс’ и следом происходит выход из ф-ии обработки текущего эл-та, возращая управление основному потоку вычислений. Передаваемый указатель – это ф-я, которая выкинет текущий эл-т из очереди и запустит в обработку следующий – т.е. то, что произойдет через 100мс. Основной поток вычислений при этом не прерывается. Менеджер-планировщик каким то раком через 100мс вызовет нашу ф-ю. Так вот такой менеджер реализован и называется ad0x0_timman. */ #include "main.h" #ifndef AD0X0_TIMMAN_H #define AD0X0_TIMMAN_H #define AD0X0_TIMMAN_QCOUNT 10 typedef struct{ int16_t time_init_ms; int16_t time_cur_ms; uint8_t (*p_func)(void); }ad0x0_timman_s; void ad0x0_timman_init(void);// void ad0x0_timman_add(int16_t _ms,uint8_t (*p_func)(void));//запланировать вызов ф-ии через скока-то мс void ad0x0_timman_remove(uint8_t (*p_func)(void));//убрать из планировщика (для перезагрузки и2ц делал) void ad0x0_timman_tickms(void);//вызывать раз в 1мс #endif