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.

[参考译文] RM57L843:编译器忽略 volatile 的声明

Guru**** 2540190 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1050753/rm57l843-the-compiler-ignores-the-declaration-of-volatile

器件型号:RM57L843

大家好、

问题:客户声明的易失性变量、易失性关键字不有用、并且在映射文件中找不到相应的地址。  例如,静态易失性 uint32_t testVolatile;映射文件没有 testVolatile。

客户想知道原因是什么。 谢谢!

此致、

樱桃

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

    您好、Cherry、

    默认情况下、静态变量不会出现在映射文件中。  要查看它们,请将选项 --mapfile_contents=sym_defs 添加 到链接命令中。

    使用工程属性 GUI 对其进行配置:

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

    您好、Wang、

    感谢您的回复! 客户已定义 静态易失性 uint32_t testVolatile;,但仍无法在 映射文件中找到 testVolatile。

    谢谢、此致、

    樱桃

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

    如果该变量未在代码中初始化和未使用、则该变量不会放置在映射文件中。

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

    您好!

    感谢您的回复。

    客户 使用 volatile、以便为编译器分配地址、即使不使用此变量也是如此。 那么、我们如何解决这个问题呢?

    谢谢、此致、

    樱桃

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

    您好!

    我是否可以知道后续问题是否有任何更新?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496057" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1050753/rm57l843-the-compiler-ignores-the-declaration-of-volatile/3895086 #3895086"]客户 使用 volatile 为编译器分配地址、即使不使用此变量也是如此。 S[/报价]

    您可以使用 RETAIN pragma

    已使用 TI v20.2.5编译器尝试以下示例代码:

    #include <stdint.h>
    
    #pragma RETAIN (testVolatile)
    static volatile uint32_t testVolatile;
    
    int main(void)
    {
    	return 0;
    }
    

    使用 --mapfile_contents=sym_defs 链接器选项时,生成的映射文件报告了 testVolatile 变量:

    main.obj
    
    Run/Load            
    Value     Binding   Name (Section)
    --------  --------  ---------------
    00000134  local     $a (.text)
    00000140  local     .bss:retain (.bss:retain)
    00000134  local     .text (.text)
    00000134  global    main (.text)
    00000140  local     testVolatile (.bss:retain)