• 已解决 53867 个问题
  • 已帮助 5918 位优秀工程师

stm32怎样原子操作?

原来如此 2017-06-02 浏览量:2263

程序中有一段代码执行过程需要连续执行,不希望被中断打断。

可不可以直接使用开关总中断的办法?

如果使用开关总中断的方法,需要在关总中断之前保存哪些寄存器的值?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 如果是使用的裸机的工程,没有使用RTOS,可以关中断,关中断时不用你保存的,由于你运行到原子操作时,一定是没有进中断,所以中断中的程序也没有运行呢,也就不用保存什么了。

    如果有RTOS,要RTOS有一些相关的API函数,可以根据你选择的RTOS使用不同的函数。来生成一段临界区进行类原子操作。

    而这里也不用你去保存,RTOS会自己保存的。

    • 发布于 2017-06-02
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4

  • 禁用所有中断,执行完之后再打开,分别执行下面两个语句

    __disable_irq();   // 关闭总中断
    __enable_irq();    // 开启总中断


    • 发布于2017-06-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持

    对于C里边并没有原子操作这个概念,楼主可以考"关中断"、"开中断"来制造一个临界区,在这中间做不可中断的操作

    • 发布于2017-06-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 因為stm32都不是跑完整系統,所以不會有Mutex,spinlock,semphore這類問題

    所以只要關閉全部中斷,除非有hard fault,不然都可以正確完全執行到結束

    以上

    • 发布于2017-06-02
    • 举报
    • 评论 0
    • 0
    • 0

stm32怎样原子操作?