本人使用f28335开发过程中遇到一个变量互斥的疑惑,非bios系统,相当于裸MCU.
各个中断见会同时访问一个变量,读和写的过程就要互斥。翻边所有现有的例程,都没看见有人对公共变量进行互斥。
不知道这种裸MCU如何进行同步互斥,希望专家能予以指点。
还有,我觉得只要那些公共变量的操作能保证原子性,也就没必要进行专门的同步互斥了。
我想请教专家,我这么理解对吗?28335上面什么样的操作能保证原子性?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
本人使用f28335开发过程中遇到一个变量互斥的疑惑,非bios系统,相当于裸MCU.
各个中断见会同时访问一个变量,读和写的过程就要互斥。翻边所有现有的例程,都没看见有人对公共变量进行互斥。
不知道这种裸MCU如何进行同步互斥,希望专家能予以指点。
还有,我觉得只要那些公共变量的操作能保证原子性,也就没必要进行专门的同步互斥了。
我想请教专家,我这么理解对吗?28335上面什么样的操作能保证原子性?
谢谢老师的回答
通过禁用中断的方式来实现互斥似乎太暴力的,
以电机控制为例,需要实时的改变pwm的占空比,若是访问一次公共变量就要关中断,那实时性很强的pid控制、pwm控制的效果就要大打折扣,这么做是否妥当呢?
另外,我不清楚F28335的指令是什么样的,但是换个芯片,以C6000系列为例,一个32位变量的赋值是这样的:
MOVL xxx, xxx, 底16位赋值
MOVH xxx, xxx, 高16位赋值
关中断就能保证这两条语句不可分割吗?关中断似乎也不能解决问题呀。
以上疑惑希望老师能给予解答
马达驱动的话,这种关闭中断的时间很短,对系统的影响不大。如果关闭中断的话,单核芯片会顺序执行,不会被打断的。
MOVL xxx, xxx, 底16位赋值
MOVH xxx, xxx, 高16位赋值