Обратите внимание, что do_something()
можно вызывать как из мест, где прерывания разрешены, так и из мест, где прерывания уже отключены.Включение прерываний во втором случае противоречит ожиданиям вызывающего абонента очень опасным образом.
Что вам действительно нужно, так это сохранить предыдущее состояние прерываний при их отключении и восстановить его после этого.
Итак, лучшая версия будет:
long i;
void do_something(void){
irq_state_t prev_int_state = disable_interrupts_save();
i+=0x1234;
restore_interrupts(prev_int_state);
}