"DSP编程技巧之C/C++与汇编语言的交互" 在DSP的开发中,常用的算法都可以用C/C++代码来高效实现。但是对一些特殊寄存器的读写,例如某些CPU寄存器的读写,因为C/C++代码无法直接对其访问,仍然需要使用汇编代码进行操作。在一些对代码执行时间要求很严格的算法,例如很多个点的FFT、IFFT中,汇编代码的高效仍然是C/C++所不能替代的。 在C/C++代码与汇编代码的交互中,有九大原则需要遵循: 1. 所有的函数(不管是C/C++的还是汇编的)都要遵循特定的寄存器约定。寄存器约定用来规定编译器如何使用寄存器,主要指的是CPU/FPU的寄存器,因为它们在程序运行中是反复使用的,并且在函数调用前后如何保存寄存器的值。 2. SP的使用、结构体的返回方式需要遵循特定的规则。 3. 长整形和浮点型在保存时,LSW(Least Significant Word,低有效字)保存在地址中。 4. 除了全局变量的初始化以外,汇编模块不应使用.cinit段。这是因为C/C++的启动代码假设在.cinit段中只包含了初始化表,如果把其它的信息存入这个段中,将导致不可预测的运行结果。 5. 编译器会自动为所有的标识符前面加上一个下划线,比如在C/C++中的某个函数名字为xxx,则编译成汇编代码时,它的名称变为_xxx。 6. 链接器会自动为外部目标分配链接名,所以在用汇编代码编写程序的时候,也要使用相同的名字才能被链接器正确识别。 7. 为了让汇编代码中的变量和函数能在C/C++代码中调用,在汇编中编程中需要使用.def或者.global指令对它们进行定义。 8. 如果在汇编代码中使用了结构,并且希望在C代码中使用extern struct指令来调用它,则这个结构应当被模块化(在汇编指令的选项中启用模块化标志,并为其分配连续的存储空间),从而优化DP的加载。 9. 如果在汇编代码中使用了结构,并且希望在C代码中使用extern struct指令来调用它,则这个结构应当被模块化(在汇编指令的选项中启用模块化标志,并为其分配连续的存储空间),从而优化DP的加载。 遵循这些原则,可以使得C/C++代码与汇编代码之间的交互更加高效和可靠。
- 粉丝: 3
- 资源: 947
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Wafer - 企业级微信小程序全栈方案.zip
- Vue,React,微信小程序,快应用,TS , Koa, JS 一把梭.zip
- unocss微信小程序预设,unocss小程序默认,在 taro uniapp 原生小程序中使用unocss.zip
- c++ -msvc-chrono.hpp 时间类: 对本头文件的注释,以便于理解 STL 里引入的时间方面的操作
- uni-app小程序.zip
- uni-app echarts vue2专用小程序.zip
- spritejs 小程序版.zip
- scrm小程序.zip
- Java制作统计工资的示例工程
- paho.mqtt.wxapp可以让你在微信小程序里连接MQTT代理,在小程序里实现控制硬件,也可用于游戏 .zip