5

我正在为嵌入式系统(Cortex M0)编写代码,并且没有互斥锁/自旋锁/等的所有奢侈品。有没有一种简单的方法可以将数据添加到共享缓冲区(日志文件),该缓冲区将从我的 Main() 循环刷新到磁盘?

如果只有一个生产者(1 个中断)和一个消费者(主循环),我可以使用一个简单的缓冲区,生产者增加“头部”,消费者增加“尾部”。这将是完全安全的。但是现在我有多个生产者(中断),我似乎被困住了。

我可以为每个中断提供自己的缓冲区,并将它们组合在 Main() 中,但这将需要大量额外的 RAM 和复杂性。

4

1 回答 1

5

您可以通过一个简单的环形缓冲区(循环数组)来实现这一点,您可以在访问期间关闭硬件中断源。它只需要函数 init、add 和 remove。

我不确定您的特定 MCU 如何处理中断,但很可能它们将保持挂起状态,只要您仅启用/禁用特定硬件外围设备的中断。根据您的应用程序的性质,您还可以禁用全局中断掩码,但这相当粗糙。

通常,您不必担心错过中断,因为如果处理传入中断的代码比中断频率慢,那么世界上没有软件可以修复它。您要么必须接受数据丢失,要么增加 CPU 时钟以避开此类情况。但当然,您应该始终尽量保持 ISR 中的代码尽可能紧凑。

于 2013-01-21T14:13:38.467 回答