#include "ad0x0_timman.h" #include "main.h" #include //#include "ad0x0_spi.h" ad0x0_timman_s ad0x0_timmans[AD0X0_TIMMAN_QCOUNT]; void ad0x0_timman_init(void){ for(int16_t i=0;iCR1|=TIM_CR1_CEN; } void ad0x0_timman_remove(uint8_t (*p_func)(void)){ /*бля ну да, проверка на переполнение нужна...*/ //ищем эл-т с неприсвоенной функцией и считаем, что это свободный ad0x0_timman_s *p=ad0x0_timmans; uint8_t c=AD0X0_TIMMAN_QCOUNT; int was_masked=__disable_irq(); if(was_masked){ __ASM("nop"); } while(c--){ if(p->p_func==p_func){ p->p_func=NULL; if(!was_masked)__enable_irq(); return; } p++; } //переполнение!!!!!!!!!!!!!!!! тут надо точку останова __enable_irq(); } void ad0x0_timman_add(int16_t _ms,uint8_t (*_p_func)(void)){ /*бля ну да, проверка на переполнение нужна...*/ //ищем эл-т с неприсвоенной функцией и считаем, что это свободный ad0x0_timman_s *p=ad0x0_timmans; uint8_t c=AD0X0_TIMMAN_QCOUNT; int was_masked=__disable_irq(); if(was_masked){ __ASM("nop"); } while(c--){ if(!p->p_func){ p->time_cur_ms=p->time_init_ms=_ms; p->p_func=_p_func; if(!was_masked)__enable_irq(); return; } p++; } //переполнение!!!!!!!!!!!!!!!! тут надо точку останова __enable_irq(); } void ad0x0_timman_tickms(void){ //ADINT_HIGH; ad0x0_timman_s *p=ad0x0_timmans; uint8_t c=AD0X0_TIMMAN_QCOUNT; while(c--){ if(p->p_func){ if(!(p->time_cur_ms--)){ if(p->p_func())p->p_func=NULL; p->time_cur_ms=p->time_init_ms; } } p++; } //ADINT_LOW; }