Arduino/AVR: 中断 Serial/I2C 通信是否安全
Arduino/AVR: Is it safe to interrupt Serial/I2C communications
我想在 Atmega328 上做一些中断驱动的信号处理,它可能没有足够的 SRAM (2K) 来存储整个 运行 的数据。这意味着我必须在收集数据的同时将部分缓冲区写入外部存储器。
我的问题是在仍然触发中断的同时进行串行写入或 I2C 通信(例如到 SD 卡)是否安全。我认为串行通信本身是中断驱动的,所以这可能会成为一个问题。这是真的? I2C 怎么样?如果两者都可能导致问题,那么在收集数据的同时刷新缓冲区的推荐方法(如果有的话)是什么?
这是一种常见情况,实际上取决于您为每项任务确切需要多少处理时间,以及您对设备通信的时间限制有多严格。
认为你应该 review/consider:
- 您必须能够比获取数据更快地将数据写入外部 RAM -> 您收集数据的速度有多快?
- 确保您在中断处理程序上花费的时间尽可能少
- 注意中断饥饿。如果 ISR B 触发频率高于 AND 具有更高优先级,则优先级可能导致 ISR A 不被执行。尽可能调整执行间隔。
- 检查必须按顺序或短时间连续发送哪些串行数据以满足时序要求。您可能需要 pause/delay 短时间进行其他处理。
我想在 Atmega328 上做一些中断驱动的信号处理,它可能没有足够的 SRAM (2K) 来存储整个 运行 的数据。这意味着我必须在收集数据的同时将部分缓冲区写入外部存储器。
我的问题是在仍然触发中断的同时进行串行写入或 I2C 通信(例如到 SD 卡)是否安全。我认为串行通信本身是中断驱动的,所以这可能会成为一个问题。这是真的? I2C 怎么样?如果两者都可能导致问题,那么在收集数据的同时刷新缓冲区的推荐方法(如果有的话)是什么?
这是一种常见情况,实际上取决于您为每项任务确切需要多少处理时间,以及您对设备通信的时间限制有多严格。
认为你应该 review/consider:
- 您必须能够比获取数据更快地将数据写入外部 RAM -> 您收集数据的速度有多快?
- 确保您在中断处理程序上花费的时间尽可能少
- 注意中断饥饿。如果 ISR B 触发频率高于 AND 具有更高优先级,则优先级可能导致 ISR A 不被执行。尽可能调整执行间隔。
- 检查必须按顺序或短时间连续发送哪些串行数据以满足时序要求。您可能需要 pause/delay 短时间进行其他处理。