大家好!
我们针对 TMS28388D 上的 CM 内核使用 ARM C++编译器 TI Clang v3.2.0.LTS。
在执行闪存固件更新时、我遇到了问题、因为更新过程所需的一切都不能位于已擦除的闪存扇区中。 在大多数情况下、这很简单-只需将所有必需的函数定义为 ramfunction、即分配到段".TI.ramfunc"。
但现在我遇到了一个包含虚拟方法的类的问题。 方法实现可成功定义为 ramfunction、但事实证明虚拟方法表仍然位于闪存中、在闪存擦除后将0xFFFFFFFF 作为方法指针、并导致调用崩溃。
我尝试放入"__attribute___(section(...))" 进入类定义,希望它将适用于整个类,包括 VMT。 但这不起作用(编译器错误"仅适用于函数、全局变量、Objective-C 方法和 Objective-C 属性")。
我如何将 VMT 移动到 RAM 或将其分配到特定的 RAM 部分? 从映射文件来看、似乎表格位于.rodata 段中。 我不确定是否明智地将整个段移动到 RAM、因为显然它还包含其他常量(最好是(?) 应放置在靠近使用函数的位置-如果我没记错、可能会有一个4k 增量寻址限制)。
此致
克里斯