return - 中断 LPC 微控制器上的寄存器写操作
问题描述
这些天我已经解决了偶尔错误寄存器写入的问题。问题是,我在主循环的 GPIO 输出寄存器 (LPC_GPIO_PORT->SET[1]) 中写了很多东西。在中断例程中,我正在写入这些相同的寄存器,并且当在主循环中写入这些寄存器时恰好发生中断时,从中断返回时,对这些寄存器的更改被丢弃并替换为之前写入寄存器的更改进入中断。
我正在使用 LPC1549 微控制器。中断中的寄存器写入用于 BLDC 电机控制,因此您可以每 10-30 秒听到电机发出一声巨响。通过减少主循环中的写寄存器,我完全消除了这个问题。问题是,微控制器中的所有寄存器都一样吗?我找不到任何描述这个问题的东西,这可能是一个严重的问题,而且一旦开始造成麻烦,也很难找到。
解决方案
听起来是“关键部分问题”。这个主题在有关操作系统的文献中出现了很多,但存在于任何具有共享资源的中断驱动平台中。看看这个问题可能会帮助您搜索。
在您的情况下,您有 2 个数据访问器:中断处理程序和主循环。两者都访问相同的共享资源(内存映射 I/O)。这可能会导致根据您上面描述的两个事件的时间立即覆盖更新。
至于您的第二个问题,这可能会影响并发系统中的任何共享资源。
推荐阅读
- spring - 从 HTML 页面更改 application.properties
- android - Android Firebase 存储失败时重试下载
- android - 通过 DAO 方法返回 Map 对象
- c# - 按项目名称选择项目 ID
- android - 读取测试数据库失败 - 权限被拒绝
- javascript - 将范围值写入拇指滑块
- r - 错误:函数的“路径”参数无效
- google-tag-manager - 为什么谷歌分析在我通过谷歌标签管理器安装后包含我的点击?
- java - 从用户注销时,ViewPager 事件给我错误
- python - 为什么使用用户定义的对象作为键时,Python 中的字典查找总是比较慢?