ad0x0_timman.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /**
  2. 26.09.2020
  3. ad0x0 time manager...
  4. херня вот какая.
  5. Adtimman – это менеджер вызовов по времени. Задача стояла примерно так,
  6. в очереди команд стояла команда на паузу 100 мс. Первая реализация была
  7. hal_delay(100)…в прерывании… -тупость. Что-то надо было такое, что
  8. вызовет функцию через 100мс с нужного момента. Как это работает. В так
  9. называемый планировщик кладется команда ‘выполнить ф-ю через 100мс’ и следом
  10. происходит выход из ф-ии обработки текущего эл-та, возращая управление основному
  11. потоку вычислений. Передаваемый указатель – это ф-я, которая выкинет текущий эл-т из
  12. очереди и запустит в обработку следующий – т.е. то, что произойдет через 100мс.
  13. Основной поток вычислений при этом не прерывается. Менеджер-планировщик каким то
  14. раком через 100мс вызовет нашу ф-ю. Так вот такой менеджер
  15. реализован и называется ad0x0_timman.
  16. */
  17. #include "main.h"
  18. #ifndef AD0X0_TIMMAN_H
  19. #define AD0X0_TIMMAN_H
  20. #define AD0X0_TIMMAN_QCOUNT 10
  21. typedef struct{
  22. int16_t time_init_ms;
  23. int16_t time_cur_ms;
  24. uint8_t (*p_func)(void);
  25. }ad0x0_timman_s;
  26. void ad0x0_timman_init(void);//
  27. void ad0x0_timman_add(int16_t _ms,uint8_t (*p_func)(void));//запланировать вызов ф-ии через скока-то мс
  28. void ad0x0_timman_remove(uint8_t (*p_func)(void));//убрать из планировщика (для перезагрузки и2ц делал)
  29. void ad0x0_timman_tickms(void);//вызывать раз в 1мс
  30. #endif