首页 文章

Arduino / AVR:中断串行/ I2C通信是否安全

提问于
浏览
1

我想在Atmega328上做一些中断驱动的信号处理,它可能没有足够的SRAM(2K)来存储整个运行的数据 . 这意味着我必须在仍然收集数据的同时将部分缓冲区写入外部存储器 .

我的问题是,在仍然触发中断的同时进行串行写入或I2C通信(例如SD卡)是否安全 . 我认为串行通信本身是中断驱动的,所以这可能成为一个问题 . 这是真的? I2C怎么样?如果两者都可能导致问题,那么在仍然收集数据时刷新缓冲区的推荐方法(如果有的话)是什么?

1 回答

  • 1

    这是一种常见的情况,实际上取决于您对每项任务的准确处理时间以及您对设备通信的时序限制有多紧 .

    认为你应该审查/考虑:

    • 您必须能够比外部RAM更快地将数据写入外部RAM - >您收集数据的速度有多快?

    • 看到你在中断处理程序中花费的时间尽可能少

    • 关注中断饥饿 . 如果ISR B更频繁地触发AND并且具有更高优先级,则优先级可以导致不执行ISR A.尽可能调整执行间隔 .

    • 检查必须按顺序或短时间发送哪些串行数据以满足时序要求 . 您可能需要在短时间内暂停/延迟其他处理 .

相关问题