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.

[参考译文] 编译器/AM5728:常量表错误

Guru**** 2616395 points

Other Parts Discussed in Thread: AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/649216/compiler-am5728-const-table-error

器件型号:AM5728

工具/软件:TI C/C++编译器

尊敬的 TI:

我们正在编译一些测试代码、发现它正在将2个错误的常量值编译到常量表中。

因此、在 main 中启动时、它会尝试初始化变量、并正确复制常量表中的所有值、但与 C 代码列表相比、常量表是错误的...

即我们有一个变量

float var[size]={values、values、values...} };

常量表中的2个值不是初始化程序列表中的值。

TIV8.1.5是 AM5728上用于 C66x 的编译器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于包含问题常量表 的源文件、请按照文章如何提交编译器测试用例中的说明提交测试用例。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我通过其他通道收到了测试用例。  谢谢你。  我将其编译为汇编代码、并对其进行检查。   问题阵列初始化为576个值。  我发现检查了其中的几个、没有发现错误。  哪2个值出错?  您确切地说是如何确定它们有误的?   

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于数据值是协方差矩阵、并且正在对其执行计算、因此我只需通过 code composer 保存存储器、将其导入 MATLAB 并与 MATLAB 模型进行比较。

    当您说将其编译为汇编代码并检查它时、是否意味着编译/链接后生成的*。out 文件、并且您已经验证了存储在 C OCDE 中的常量数据是否确实正确/与初始化程序列表匹配?

    我发现损坏的两个值分别为447和448、因为您将看到主调用'theFunction (函数)'、它初始化 TestR 变量、然后在下面包含用于校正损坏的存储器的接下来的两行。

       TestR[447]=-0.542096258273386;
       TestR[448]= 0.003593751011995;

    因此,在生成*.out 文件后,我基本上使用 code composer (Ctrl-Alt-L)将其加载到5728中,然后它在 main 开始处的屏幕上弹出....  当我检查*。map 文件告诉我它将常量数据放入内存中的位置时、我发现上述两个值已经损坏、并且我没有运行任何代码。

    如果*。out 文件中的数据看起来正确、在 Code Composer 将其加载到器件中时、是否有可能损坏?  

    请确认您检查 const 数据的位置、然后确保您尝试将其加载到 AM5728、这样它将经过 whateer 进程代码编写器以将其放入存储器、然后查看它是否已损坏、而我的用户没有进行任何干预。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因此、我再次运行它、以确保正确。  在我向您报告时有一个错误、但它仍然存在。

    我包含了一个屏幕截图、其中显示了*。map 文件中存储器中的.const 段。  基址为0x809ec0,如果为对齐4内存添加447*4,则第447个元素将出现在 const 内存的0x80a5bc 中。

    启动时、当它到达 main 时、它不会损坏。  我按 F6键、它从主函数移动到"函数"调用、然后按 F5、进入"函数"。。。  我按 F6键、然后显示此屏幕截图、此时您可以看到 corruted (红色突出显示).const 存储器。 (448要素) 即腐败发生的时间。

    我再次运行它、并在反汇编窗口中进行了第二次屏幕截图、其中显示了在系统上该点执行的确切汇编代码。  (应与我向您发送的内容完全相同)

    我已断开除 A15_0之外的所有其他处理器、但它已挂起。  是否可以进行缓存? 或其他东西损坏它?  据我所知、没有其他东西在运行、因此我看到这种情况的原因真的很令人困惑。

    显然、一旦它损坏、memcpy 就会工作并成功复制损坏的 const 存储器、然后计算相应地失败。  此外、一旦我开始更改代码并编译器将所有内容"拼图"、问题的这个特定"语言障碍"就会消失、我在其他地方也会遇到问题(函数失败等、否则现在就可以使用)。  因此、造成这种损坏的原因是什么、只是"移动"和破坏其他东西...  因此、我将此用作测试用例、以了解可能导致它的原因。

    请告诉我您是否能够复制上述图像。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    堆栈溢出。  很多。  您为堆栈分配0x800 (2048)个字节。  但您需要至少0x12000 (73728)个字节。  我使用 CG_xml 包中的实用程序 call_graph 计算所需的堆栈数量。  更改与工程编译设置一同使用的堆栈数量。  使用下面的屏幕截图。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助。