stm32 原子操作问题
一直有个疑问:加入我使用的是前后台的程序框架。在主循环当中有一个全局变量在变化,更新。假设这个变量是一个输入的IO口,在主循环当中不断的读取IO口最新的数值比如Inputdata = IO1;这一句语句是在主循环当中读取的。那再什么地方使用呢?比如这个全局变量是在中断当中使用的。以下是示例程序
main()
{
while(1)
{
inputdata= IO1;
}
}
interrupt ()
{
if(inputdata == 0)
{
do s输入牛逼
}
else
{
do 输入不牛逼
}
}
回复:stm32 原子操作问题
补充:问题这样先分析 inputdata = IO1;这个语句
变成汇编
1.IO1放在辅助寄存器R1当中
2.将inputdata的地址放入辅助寄存器r2
3.将R1的内容给R2
如果是这样的话,降入在执行第2步的时候来了一个中断。
这个时候,第2步骤会执行完毕后,跳到中断去执行呢。
还是第2步骤执行一半后,不执行完成就跳到中断去
不知道各位在stm32里面有没有特别的资料可以说明这个问题。
谢昂大侠能够提供一些数据和资料帮我解答一下。
关于这个原子操作。
谢谢
RE:stm32 原子操作问题
中断顾名思义就是发生之后会立即去执行中断中的内容,所以这里是第2步骤执行一半后,不执行完成就跳到中断去。具体的资料没有见到过类似的,可以参考其他版本的CPU的中断,中断都有共同之处的回复:stm32 原子操作问题
回复第 2 楼 于2014-07-23 22:20:58发表:补充:问题
这样先分析 inputdata = IO1;这个语句
变成汇编
1.IO1放在辅助寄存器R1当中
2.将inputdata的地址放入辅助寄存器r2
3.将R1的内容给R2
如果是这样的话,降入在执行第2步的时候来了一个中断。
这个时候,第2步骤会执行完毕后,跳到中断去执行呢。
还是第2步骤执行一半后,不执行完成就跳到中断去
不知道各位在stm32里面有没有特别的资料可以说明这个问题。
谢昂大侠能够提供一些数据和资料帮我解答一下。
关于这个原子操作。
谢谢
将inputdata的变量类型定义为原子类型,就会将3部执行完才会去执行中断,定义为原子操作后inputdata的赋值不会被打断
RE:stm32 原子操作问题
是中断后没有及时跳转吗? 霹雳之火 发表于 2014-7-28 16:23回复第 2 楼 于2014-07-23 22:20:58发表:
补充:问题
这样先分析 inputdata = IO1;这个语句
怎么定义为原子类型?c语言有这种说法么 七夜-2003106 发表于 2016-11-18 13:34
怎么定义为原子类型?c语言有这种说法么
原子类型 我的理解是一种说法吧C语言里没有定义一般操作系统里有这种概念 :):):):):):):):):):):):) 对于C里边并没有原子操作这个概念,楼主可以考"关中断"、"开中断"来制造一个临界区,在这中间做不可中断的操作
页:
[1]