12345678910111213141516171819202122232425262728293031323334353637 |
- /**
- 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
|