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.

[参考译文] 编译器/TM4C129XNCZAD:编译器切换以强制将文字转换为内嵌代码,在内存子系统比CPU速度慢的系统中执行速度更快

Guru**** 2577385 points
Other Parts Discussed in Thread: TM4C129XNCZAD

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/597701/compiler-tm4c129xnczad-compiler-switches-to-force-transforming-literals-into-inline-code-which-executes-faster-in-a-system-where-the-memory-subsystem-is-slower-than-the-cpu

部件号:TM4C129XNCZAD

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

我有兴趣确保我们以最合理的最快速度从闪存中运行。 该部分的参考手册说:“大多数编译器都支持将文字转换为“直列”代码,在内存子系统比CPU慢的系统中执行速度更快”。 不清楚我会选择哪些编译器选项来强制编译器执行此操作。 我已经确认编译的运行代码不会将文字转换为内嵌代码,因此我想知道要实现这一点,需要选择哪些编译器开关。 感谢您的任何帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于读取数据的人,TM4C129XNCZAD是一款ARM Cortex-M4F设备。

    对于TI编译器,对于ARM Cortex-M,您需要选项--embedded_constants=off
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哇哦。 做得很好,速度也很快。 已将其打开,并且立即在ASM文件中出现错误。 尚不确定应该如何处理“[E0002]与PC相关的访问违反了禁用嵌入式常量 portasm. asm”。 分析.lst文件不会显示问题。 将使用PC相关寻址的.asm代码转换为与我现在要求的内容兼容的.asm代码有什么技巧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不是这一主题的专家,所以我将依赖编译器输出告诉我的信息。 对于此功能:

    unsigned int foo(){返回0x1234.5678万;} 

    编译器发出以下代码(为清晰起见更改了常量):

    LDR A1,连接
    BX LR
    连接:.bits 0x1234.5678万,32 

    如果改为使用--embedded_constants=off进行编译,则可以获得:

    MOVW A1,#0x5678
    MOVT A1,#0x1234
    BX LR 

    我怀疑这就是你需要做的:用MOVW/MOVT对替换每个与PC相关的LDR。

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

    很好的信息 感谢帮助Arch。  

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

    标记,

    您可以考虑使用--opt_for _speed选项,而不是--embedded_constants=off。 --embedded_constants=off实际上是用于生成仅执行代码的。 --embedded_constants=off选项将使编译器避免从代码内存加载所有数据,这会导致性能下降。 --opt_for speed=2设置将使编译器使用MOVW/T指令加载所有32位常量,同时仍对64位常量,切换表和字符串文字使用PC相对负载,这会更有效。 这也将允许您避免更改汇编代码,因为不会生成任何错误(由您决定)。

    --opt_for speed=2选项也会导致其他性能优化,如内联和块对齐。 代码大小的增加可能太多。 我建议您尝试CCS中的Optimizer Assistant,它提供了一种以不同优化级别构建应用程序的方便方法。 有关详细信息,请参阅   。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Cody。 我现在有很多东西可以深入了解你和Arch提供的东西。