作者:飞儿gxj_505 | 来源:互联网 | 2023-05-18 18:45
要求连续几个操作不能被打断。
类似于:
u16 t1, t2;
raw_local_irq_save(flg)
t1 = timer[1];
t2 = timer[2];
raw_local_irq_restore(flg);
//do something
7 个解决方案
可以用互斥锁来实现pthread_mutex_lock()
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)
我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)
那你就把必须做完的锁里加一个控制变量,如果不做完,控制变量就为FALSE,然后下面加一个判断不就成了。
或者用事件或信号,只有执行完某些动作,才发出工作信号,进行下一步动作,很多的方法啊。
所以,怎么关中断能保证它的性能不受大的影响?
=================================
当然是在尽可能小的block内关中断了。也就是这样的结构:
// 关中断
原子操作块
// 开中断
但是要尽量的使 原子操作块 的语句少一些,压缩到最低!只把那些必须执行原子操作的语句放在这里,其余不必要的或者不是很紧要的一律放到外面去,这样就能保证开关中断的时间差最小了