你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 原子操作问题

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

interrupt ()
{
    if(inputdata == 0)
    {
       do s输入牛逼
    }
    else
    {
      do 输入不牛逼
    }
}
收藏 评论8 发布时间:2014-7-23 22:14

举报

8个回答
王子-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里边并没有原子操作这个概念,楼主可以考"关中断"、"开中断"来制造一个临界区,在这中间做不可中断的操作

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版