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.

[参考译文] Compiler/EK-TM4C129EXL:ARM v RTS.2.LTS编译器,优化级别2,意外删除了仅使用16.9 Assert宏的函数

Guru**** 2589300 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/590562/compiler-ek-tm4c129exl-arm-v16-9-2-lts-compiler-at-optimization-level-2-unexpectedly-eliminates-function-where-only-side-effect-is-use-of-the-rts-assert-macro

部件号:EK-TM4C129EXL

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

编写以下函数是为了验证存储在闪存中的固定测试模式是否可以正确读取:

静态void verify_flash_contant_data (void)
{
uINT32_t seed = FLASH_DATA_initial_seed;
uINT32_t字索引;

对于(word_index = 0;word_index < flash_data_NUM_words;word_index++)
{
断言(flash_constitue_data[word_index]==种子);
SEED = RAND_GENERATOR (SEED);
}
} 

FLASH_CONSTANT_DATA数组作为常量数组声明给编译器:

#define flash_data_NUM_OLUES 23.5929万
extern const UINT32_t flash_constituate_data[flash_data_NUM_OLUESS]; 

因此,如果从flash_constant数据读取的数据不是预期的测试模式,则该函数的唯一副作用是使用RTS assert.h include文件中的Assert宏来中止程序。

当使用优化级别2编译程序时,优化器已消除整个 verify_flash_contant_data函数。 在RTS ASSERT.h中,ASSERT宏是使用_ASSERT内置实现的。 优化器在优化级别2错误地删除了唯一副作用是使用 _Assert builtin的函数,这是否是问题?

我让编译器保留生成的汇编文件,并确认在优化级别编译时,没有消除使用Assert的其他两个函数,并且 如果断言失败,将调用_abort_msg()。

我附上了一个CCS 7.1 项目,其中包含演示问题的代码。

Debug (调试)配置的优化级别设置为"OFF"(关闭), 而FLASH_CONSTANCE_DATA函数显示在生成的汇编文件 Debug\TM4C129_self_test.asm中

发行配置的优化级别设置为“2 -全局优化”, 并且在 Release\TM4C129_self_test.asm中未显示FLASH_CONSTANT_DATA函数

e2e.ti.com/.../2185.TM4C129_5F00_selftest.zip

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

    感谢您通知我们此问题并提交测试案例。  我可以再现同样的结果。  我不知道为什么会发生这种情况。  我在 SDOWP系统中提交了CodeGen-2214以对此进行调查。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George

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

    [报价用户="George Mock"] 我在 SDOWP系统中提交了CodeGen-2214以进行调查。  [/QUOT]我确认 问题已在TI ARM 16.9 v.4.LTS编译器中得到解决。