ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1429490
ar-elec (24.04.2024 16:16, просмотров: 1927)
Изобретение велосипеда с прерываниями 

Напоролся в софте (процессор CortexM4, но не суть) на неправильное поведение:

В основном коде есть вызов функции со статическими переменными, ну и в прерывании она же вызывается.

Грубо говоря,

main() {
  ...
  func();
  ...
}

interrupt sync() {
  func();
}

func() {
static uint64_t timer64 = 0; static uint32_t cnt_old = 0;
uint32_t cnt = GetTimer();
int32_t d_cnt = cnt - cnt_old;
cnt_old = cnt;
timer64 += dcnt; }

Ну, таймер 32-разрядный, а мне надо его долго считать, процедура вызывается часто, вот я его так искусственно растягиваю до uint64. Всё работает замечательно, если во время выполнения func прерывания блокировать. А хочется не блокировать, есть процессы, которые этого не любят, в том числе и тот же sync. Как вариант, написать свою отдельную func для вызова из main и sync, чтоб продублировать статические переменные, но это не феншуйно.

Есть какие-то решения этой задачи или смириться?