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.
工具与软件:
我们 将 CCS 10.0.00010与编译器版本18.1.4 LTS 一起使用
参考以下主题:
对于编译器版本18.1.4 LTS、请确认:
您好、Paulo:
在我们的调试中、我发现:
为 memcpy API 生成上述代码的编译器。
首先是将目标地址、源地址和字节数分别加载到 R0、R1和 R2中、然后是调用 __aeabi_memcpy4 用于实际数据复制的 API。
这是的定义 __aeabi_memcpy4 API:
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish:
感谢您的回复...
下面您可以看到一个非常简单的示例、说明编译器(18.1.4 LTS)已 将对 memcpy 的调用替换为汇编语言加载/存储:
对于上述情况、源和目标如下:
静态 UINT32 UISource[4]={0x0F0E0D0C、0x0B0A0908、0x07060504、0x03020100};
静态 UINT32 UIDest[4]={0x00FFEEDD、0xCCBBAA99、0x88776655、0x44332211};
这就留下了我最初发表的两个问题:
是否有方法可以指示编译器不要替换对 memcpy 的调用?
遗憾的是、不可以
是否有一份文档详细介绍了编译器将在哪些不同情况下确定可以替换对 memcpy 的调用?
请搜索 TI ARM 编译器手册 以查找标题为 内联内在函数运算符的子章节。 注意此详细信息:
abs 和 memcpy 作为内在函数实现
这意味着即使未使用优化、memcpy 也会被特殊处理。
考虑提供您自己的 memcpy 实现。 假设您给它命名 custom_memcpy . 那么添加以下内容可能是有意义的:
#define memcpy custom_memcpy
以更改调用 memcpy 的现有代码。
谢谢。此致、
-George.