我正在对 ARM Cortex-R4 进行编程,并且有一些二进制文件,我想从 TCRAM 执行它们,只是为了看看性能的提升是否足够好。
我知道我必须编写一个函数来将二进制文件复制到 RAM(这可以通过链接器脚本来完成,并且知道二进制文件的大小)。但他们要怎么跑呢?
想象一下:第一个二进制文件有 func1()、func2()、func3() 和 func4()。我将整个模块复制到 TCRAM,然后如何调用那里的函数?我必须使用指向该特定函数的函数指针吗?如果 func4() 调用 func2() 和 func3() 会怎样?如果我没记错的话,他们会指出位于闪存中的代码段。这是否意味着我必须重新编写这些函数?完全使用函数指针吗?有人告诉我,只需链接器脚本就足以完成所有这些工作,我无需担心任何事情,但我仍然不明白它是如何工作的。
在 GCC 上:只需将函数放在 .data 部分中:
__attribute__( ( section(".data") ) )
它将通过启动代码与其余初始化变量一起复制(无需弄乱链接器 scipt)。如果函数在放入 RAM 后最终距离其余代码“很远”,您可能还需要一个“long_call”选项。
__attribute__( ( long_call, section(".data") ) )
Example:
__attribute__( ( long_call, section(".data") ) ) void ram_foobar (void) { ... }
您可能会收到可以安全忽略的编译器警告:
Warning: ignoring changed section attributes for .data
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)