This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
遇到与此海报相同的问题:
仔细研究构建输出会发现链接器无法找到.init_array 段的位置。 这是需要在启动时创建的 C++对象的构造函数调用数数组。 默认情况下、linker.cmd 文件在任何列表中都不包括该段、因此它被链接器作为回退位置放置在 RAM 中。 遗憾的是、由于它只是默认为 RAM、而不是加载至复制为 RAM 的闪存区域、因此它永远不会被初始化。 因此、构造函数的调用方最终会从 RAM 调用一个随机地址。
修复方法是将.init_array 条目添加到其中一个闪存段中。 不管怎样这是恒定的、指向闪存中的函数、因此闪存是适合它的合适位置。
示例:
组{
.reserved: {。 += 0x101C;}(空载)
padding : fill = 0xFFFFFFFF {. += 0x00E4;}
.resetVecs: {}palign (4) /*这是代码所在的位置*/
.cram: {}palign (4)
.text: {}palign (4) /*这是代码所在的位置*/
.rodata:{}palign (4) /*这是 const 的 go */的位置
.cinit: {}palign (4)
.init_array{}palign (4)
}> FLASH_NON_SECURE
这将修复崩溃并允许使用在系统启动时创建的 C++对象。
似乎您正在 MSPM0中使用 C++、对吗?
您是使用 MSPM0 SDK 中的代码或演示还是自己创建的代码或演示?
组{
.reserved: {。 += 0x101C;}(空载)
padding : fill = 0xFFFFFFFF {. += 0x00E4;}
.resetVecs: {}palign (4) /*这是代码所在的位置*/
.cram: {}palign (4)
.text: {}palign (4) /*这是代码所在的位置*/
.rodata:{}palign (4) /*这是 const 的 go */的位置
.cinit: {}palign (4)
.init_array{}palign (4)
}> FLASH_NON_SECURE[/报价]似乎 CCS 和 syscfg 都不会生成此类.cmd 文件。
此致、
Helic