请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:LAUNCHXL-F28379D 工具/软件:Code Composer Studio
我将介绍设置。
- 在中断内部、我不是通过 UART 实际打印、而是排队打印"对象"(可以是多个字符串、数字等)。 这涉及到在堆上分配空间、因为对象的数量会有所不同。
- 在主线程内、我清空该队列。 所有代码都运行得很好(没有改编的文本、不存在按顺序打印文本的问题等)。
发生的情况很少,只有当我打印速度非常快(每秒超过100次)时,程序才会锁定删除[],从而释放刚刚打印的对象列表。 我之所以知道这一点、是因为我在整个主循环中添加了时间戳(IpcRegs.IPCCOUNTERL)、以便对其进行调试。 该程序绝不会从删除中返回[]。
我认为这可能是从不同线程调用 new/delete 时出现的问题、我在每个频繁调用的新[]或 delete[]周围添加了 disable_interrupts/restore_interrupts 块(而不是在程序启动时调用的一次性函数)。 这似乎是有效的、因为我让它运行一个小时(@100次每秒呼叫)、它冻结了。
但是、我想知道是否有更好的方法来实现这一点。 尽管我已经验证了没有中断丢失(新的/删除时间远小于1ms 的最小中断间隔)、但频繁地禁用和恢复中断让人感觉有点不太好。