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

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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版