Заинтересовала функция работы с таймером
Код
void bsp_get_sys_uptime(uint32_t *psec_cnt, uint16_t *pmsec_cnt)
{
// we do not want to disable the systick interrupt, so we have to deal
// with a systick during the execution of this function
uint32_t sec_cnt_1 = sys_seconds_cnt;
uint16_t msec_cnt_1 = sys_millisec_cnt;
uint32_t sec_cnt_2 = sys_seconds_cnt;
uint16_t msec_cnt_2 = sys_millisec_cnt;
if ((sec_cnt_1 == sec_cnt_2) && (msec_cnt_2 < msec_cnt_1))
{
sec_cnt_2 += 1;
}
*psec_cnt = sec_cnt_2;
*pmsec_cnt = msec_cnt_2;
}
{
// we do not want to disable the systick interrupt, so we have to deal
// with a systick during the execution of this function
uint32_t sec_cnt_1 = sys_seconds_cnt;
uint16_t msec_cnt_1 = sys_millisec_cnt;
uint32_t sec_cnt_2 = sys_seconds_cnt;
uint16_t msec_cnt_2 = sys_millisec_cnt;
if ((sec_cnt_1 == sec_cnt_2) && (msec_cnt_2 < msec_cnt_1))
{
sec_cnt_2 += 1;
}
*psec_cnt = sec_cnt_2;
*pmsec_cnt = msec_cnt_2;
}
переменные sys_seconds_cnt и sys_millisec_cnt инкрементируются в SysTick прерывании.
Зачем нужна такая функция?
Предположим,
если сработало прерывание во время инициализации локальных переменных, то увеличить счетчик секунд?
не совсем понимаю назначение, подскажите может кто встречал такие варианты.
код перывания
Код
void TickHandler(void)
{
uint32_t i;
uint32_t millisec_increment = 1000 / SYS_TICK_RATE_HZ;
sys_millisec_cnt += millisec_increment;
if (sys_millisec_cnt >= 1000)
{
sys_millisec_cnt -= 1000;
sys_seconds_cnt++;
}
for (i=0; i<NR_OF_MSEC_COUNTERS; i++)
{
app_millisec_cnt[i] += millisec_increment;
}
}
{
uint32_t i;
uint32_t millisec_increment = 1000 / SYS_TICK_RATE_HZ;
sys_millisec_cnt += millisec_increment;
if (sys_millisec_cnt >= 1000)
{
sys_millisec_cnt -= 1000;
sys_seconds_cnt++;
}
for (i=0; i<NR_OF_MSEC_COUNTERS; i++)
{
app_millisec_cnt[i] += millisec_increment;
}
}