我有一个实时嵌入式应用程序,主要周期以 10KHz 运行。它在配置为从闪存启动的 TI TMS320C 上运行。我最近在一个源文件中添加了一个初始化数组,突然之间时间被搞砸了(以一种太复杂的方式无法很好地解释——本质上串行端口写入不再按时完成。)
这件事让我感到困惑:
- 我什至没有访问新数据,只是声明了一个初始化数组。
- 它取决于大小 - 仅当数组大于 40 个字时才会出现问题。
- 我知道我没有溢出链接图中的任何数据段。
- 没有数据缓存,因此不是由于破坏了缓存一致性。
关于如何简单地增加闪存中 .cinit 段的大小会影响代码的时序的任何想法?
附加信息:
我认为代码可能已经移动,但它与数据分离良好。我通过内存映射验证了所有代码段在错误之前和之后都具有相同的地址。我还验证了没有一个段是完整的 - 地图中唯一更改的地址是 .cinit 部分中的少数。该部分包含用于初始化 ram 中的变量的数据值(如我的数组)。在 main() 被调用后,它不应该被访问。