首页 > 解决方案 > 如何从 main() 和 IRQ() 函数访问变量?

问题描述

我正在为下周的考试而学习,我们正在学习微控制器。我们刚刚做了一个带有中断的示例代码,当我们按下按钮(中断)时,它会告诉他们 F 和 C 的温度。如何从 main 和 IRQ() 函数访问 C 和 F?

标签: microcontrollerinterrupt

解决方案


在任何裸机系统上的 IRQ 处理程序和主线程之间共享变量的最简单方法:

  • 确保变量类型是 CPU 可以原子读写的类型。

  • 使变量全局并声明它volatile,以便生成的机器代码无法优化对共享变量的访问。

    要读取一个值,请使用类似的东西const atomic_type local_copy = shared_variable;并使用该本地副本。类似的表达式shared_variable * shared_variable可能对 . 使用不同的值shared_variable

  • 确保只有一个 IRQ 处理程序(只能同时运行一次),或者只有主线程写入共享变量。

    代码的所有其他部分只允许读取共享变量。

如果您想在 IRQ 处理程序和主线程之间进行通信的数据不适合原子类型,那么可以享受复杂的锁定协议。


推荐阅读