gpt4 book ai didi

c++ - 在并发环境中访问 MMIO 的软件模式

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:32 26 4
gpt4 key购买 nike

我正在寻找一种最好使用 C/C++ 的软件模式,如何在并发环境中安全访问微 Controller (例如 ARM Cortex-M)中的 MMIO 外围设备 - 中断和主/线程(在操作系统的情况下)。

问题的根源在于每个外围设备都将其寄存器声明为全局变量(结构/类)。这意味着任何人都可以访问它们(是的,有 MPU 和 MMU 等功能,但它们不是答案)。

为了限制它们的范围,我正在寻找一种软件模式。最接近的是 Singleton(尽管它不是并发编程的最佳选择)。

当我将外围设备设为单例时,我可以安心休眠,因为代码的其他部分不会至少通过外围设备提供的 API 修改它。

但是,这一直有效到我需要中断为止。至少在 Cortex-M 上,中断由外设生成并通过嵌套 vector 中断 Controller 向 CPU 发出信号。 CPU 停止执行当前指令并获取中断处理程序。

在处理程序中,我需要在外设中设置一些位以停用中断源,否则中断仍将挂起,并且在离开后我会一次又一次地执行它。

艰难,感谢单例模式,我现在可以创建一个死锁,因为我可能无法获得访问权限。

是否有可以帮助我的软件模式?

最佳答案

您的考虑是错误的,因为您将 uC 视为带有操作系统的计算机,用户可以在其中运行许多程序。

这里不是这种情况。

That means anybody can access them

那个人是谁?这只是您的程序而已。你写的。你修改它。如果您不相信自己达到这个水平 - 最好放弃 uC 开发。甚至 RTOS-es 也不同于大型计算机操作系统。 RTOS 是您应用程序的一部分 - 编译并链接在一起。

所以不要重新发明轮子。

关于c++ - 在并发环境中访问 MMIO 的软件模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52804108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com