工具/软件:Code Composer Studio
在过去的9个月里,我一直在开发一个程序,直到最近,它在RAM或闪存上运行良好。 我通常会为RAM进行编译,因为程序在调试时加载速度要快得多。 我最近对该程序做了大约2周的更改-一直在验证它在RAM配置上是否起作用。 但是昨天我在闪存上测试了它,它的失败非常惊人。
有时程序会在非法ISR上停止,有时在调试器未意识到的情况下停止,最令人震惊的是,C++类中的成员数据将随机更改。 事实上,这可能是程序不断停止的原因,因为重要类的一个成员变量是函数指针,用于从帮助程序中获取当前的GPIO或ADC值。 虽然有检查以确保指针不为空,但我猜指针有时会被更改(因为我看到该类中的所有其他内容都发生了变化),当调用update函数时,它会很高兴地崩溃。 如果从未初始化或使用此类,我似乎无法使其崩溃。 我应该清楚,从RAM运行时不会出现这些问题。
考虑到这是某种重叠损坏, 我已经根据以前的版本和其他C2000示例重新验证了linker.cmd文件。 我还想知道这是否与第一次使用堆实例化对象有关-但如果我静态定义对象,这种情况仍会发生。 作为附带说明,我打开了所有警告(没有任何警告),并且所有代码都是c++(此更改之前所有的代码都是c,但我真的希望使用类和其他几个功能,以便更容易封装各种内容)。
如果有任何关于跟踪此情况的提示,我将不胜感激。