microcontroller - 如何从 main() 和 IRQ() 函数访问变量?
问题描述
我正在为下周的考试而学习,我们正在学习微控制器。我们刚刚做了一个带有中断的示例代码,当我们按下按钮(中断)时,它会告诉他们 F 和 C 的温度。如何从 main 和 IRQ() 函数访问 C 和 F?
解决方案
在任何裸机系统上的 IRQ 处理程序和主线程之间共享变量的最简单方法:
确保变量类型是 CPU 可以原子读写的类型。
使变量全局并声明它
volatile
,以便生成的机器代码无法优化对共享变量的访问。要读取一个值,请使用类似的东西
const atomic_type local_copy = shared_variable;
并使用该本地副本。类似的表达式shared_variable * shared_variable
可能对 . 使用不同的值shared_variable
。确保只有一个 IRQ 处理程序(只能同时运行一次),或者只有主线程写入共享变量。
代码的所有其他部分只允许读取共享变量。
如果您想在 IRQ 处理程序和主线程之间进行通信的数据不适合原子类型,那么可以享受复杂的锁定协议。
推荐阅读
- angular - Angular - 无法从 ngForm 获取 .ts 文件中的电子邮件值
- php - 如何在一个 HTML 表格中显示多个数组变量?
- python - 如何从 for 循环中的数据框列表创建 json?
- c - 父母使用 execlp 将参数传递给孩子
- c# - .Net core 3 站点托管 404 错误
- angular - 如何设计 ng-bootstrap 手风琴的样式?
- node.js - 如何在节点js中获取post方法之外的响应数据
- django - 如何让多个模板标签分别工作?
- json - Powershell:XML 导入不传递来自 XML 的值
- javascript - 测试 React 组件