首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现ISRs和main()同步?

如何实现ISRs和main()同步?
EN

Stack Overflow用户
提问于 2011-12-21 15:20:04
回答 1查看 292关注 0票数 0

我是ARM微控制器编程的初学者,有以下问题需要解决。

  1. 该程序中有两个ISRs:ISR_TimerISR_Buffer。ISR_Timer每5分钟执行一次。每次应该填充外部设备缓冲区时都会执行ISR_Buffer (每秒几次)。外部设备缓冲区是一个小的。
  2. ISR_Buffer从外部SRAM获取数据以填充缓冲区。SRAM中有两个大缓冲区。第一个是当前使用的,第二个是用于重新计算的。然后他们被交换。
  3. ISR_Timer设置指示main()的标志,以重新计算外部SRAM中的第二个缓冲区。在此之后,ISR_Buffer将使用该缓冲区。第一个用于下一次重新计算。重新计算大约需要1分钟。

问题是main()和ISR_Buffer访问外部SRAM以及访问的内存都不是原子。函数在缓冲区重新计算期间将数据写入SRAM。ISR_Buffers读取数据以填充小设备缓冲区。如何解决这个问题?

IDE:IAR。芯片:AT91SAM7.

EN

回答 1

Stack Overflow用户

发布于 2011-12-21 15:50:28

如果我理解得对,你可以使用循环缓冲器。如果实现正确,它将保证原子写入和读取。

或者,您可以在缓冲区操作期间屏蔽main()中的中断,以确保ISR无法访问数据。但这些操作必须是快速的,否则你的外部设备将得到缓冲下溢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8592115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档