工具/软件:TI C/C++编译器
我有兴趣确保我们以最合理的最快速度从闪存中运行。 该部分的参考手册说:“大多数编译器都支持将文字转换为“直列”代码,在内存子系统比CPU慢的系统中执行速度更快”。 不清楚我会选择哪些编译器选项来强制编译器执行此操作。 我已经确认编译的运行代码不会将文字转换为内嵌代码,因此我想知道要实现这一点,需要选择哪些编译器开关。 感谢您的任何帮助。
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.
工具/软件:TI C/C++编译器
我有兴趣确保我们以最合理的最快速度从闪存中运行。 该部分的参考手册说:“大多数编译器都支持将文字转换为“直列”代码,在内存子系统比CPU慢的系统中执行速度更快”。 不清楚我会选择哪些编译器选项来强制编译器执行此操作。 我已经确认编译的运行代码不会将文字转换为内嵌代码,因此我想知道要实现这一点,需要选择哪些编译器开关。 感谢您的任何帮助。
我不是这一主题的专家,所以我将依赖编译器输出告诉我的信息。 对于此功能:
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。
标记,
您可以考虑使用--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,它提供了一种以不同优化级别构建应用程序的方便方法。 有关详细信息,请参阅
。