王子-345091 发表于 2014-7-23 22:14:47

stm32 原子操作问题

一直有个疑问:加入我使用的是前后台的程序框架。在主循环当中有一个全局变量在变化,更新。假设这个变量是一个输入的IO口,在主循环当中不断的读取IO口最新的数值比如Inputdata = IO1;这一句语句是在主循环当中读取的。那再什么地方使用呢?比如这个全局变量是在中断当中使用的。
以下是示例程序
main()
{
while(1)
{
      inputdata= IO1;
}
}

interrupt ()
{
    if(inputdata == 0)
    {
       do s输入牛逼
    }
    else
    {
      do 输入不牛逼
    }
}

王子-345091 发表于 2014-7-23 22:20:58

回复:stm32 原子操作问题

补充:问题
这样先分析 inputdata = IO1;这个语句
变成汇编
1.IO1放在辅助寄存器R1当中
2.将inputdata的地址放入辅助寄存器r2
3.将R1的内容给R2

如果是这样的话,降入在执行第2步的时候来了一个中断。
这个时候,第2步骤会执行完毕后,跳到中断去执行呢。
还是第2步骤执行一半后,不执行完成就跳到中断去
不知道各位在stm32里面有没有特别的资料可以说明这个问题。
谢昂大侠能够提供一些数据和资料帮我解答一下。
关于这个原子操作。
谢谢

巅峰残狼 发表于 2014-7-25 23:02:49

RE:stm32 原子操作问题

中断顾名思义就是发生之后会立即去执行中断中的内容,所以这里是第2步骤执行一半后,不执行完成就跳到中断去。具体的资料没有见到过类似的,可以参考其他版本的CPU的中断,中断都有共同之处的

霹雳之火 发表于 2014-7-28 16:23:12

回复: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的赋值不会被打断

aaa999kk 发表于 2014-7-30 15:50:04

RE:stm32 原子操作问题

是中断后没有及时跳转吗?

七夜-2003106 发表于 2016-11-18 13:34:25

霹雳之火 发表于 2014-7-28 16:23
回复第 2 楼 于2014-07-23 22:20:58发表:
补充:问题
这样先分析 inputdata = IO1;这个语句

怎么定义为原子类型?c语言有这种说法么

霹雳之火 发表于 2016-11-18 17:20:59

七夜-2003106 发表于 2016-11-18 13:34
怎么定义为原子类型?c语言有这种说法么

原子类型 我的理解是一种说法吧C语言里没有定义一般操作系统里有这种概念

andypanfan 发表于 2016-12-7 08:52:51

:):):):):):):):):):):):)

斜阳__ 发表于 2016-12-7 09:14:59

对于C里边并没有原子操作这个概念,楼主可以考"关中断"、"开中断"来制造一个临界区,在这中间做不可中断的操作
页: [1]
查看完整版本: stm32 原子操作问题