ADSP混合编程
伪操作和伪指令
Directives,即 伪操作,是汇编语言中的特殊指令助记符。主要作用是为完成汇编程序做各种准备。伪操作仅是在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行的指令。即,伪操作只在汇编时起作用,一旦汇编结束,其使命也就结束了。
Pseudo-Instruction,即 伪指令,是汇编语言程序里的特殊指令助记符,不是 真指令。伪指令在汇编时被替换成合适的机器指令(根据芯片架构而定,不同芯片架构之间指令可能不同),故其也只在汇编时其作用,不在机器运行期间由机器执行。
ADI汇编文件样式
.asm 文件具有以下样式,包含 预处理指令(主要是C/C++宏定义)、汇编伪操作类别(assembler direcitives)、数据块、代码块、条件编译预处理 和 汇编标签。
混合编程
使用asm()
1 | int img288; //定义C语言变量 |
以上C语言与汇编代码经过编译后:
1 | ax0 = 0x5C; |
此处可否把
dm()
当成一个类似于指针的东西
使用汇编子程序
使用汇编子程序是C语言程序与汇编语言接口的另一种方法。用户定义的子程序放在单独的汇编文件中,或是做成二进制的库文件,并将子程序的定义用GLOBEL输出,汇编后就可以供C语言程序调用。下面是一个不需要参数的子程序的例子:
1 | .MODULE/RAM_delay_; |
注意:以上代码源自参考链接4,实际上代码中的关键字相差可能较大,需要根据实际情况进行改动。
比如,21479系列芯片与ADAU1939芯片一同工作,其ADC采样代码如下:
1 | .section/pm seg_pmco; //程序代码块,procedure memory section |
Dual Memory Support Keywords (dm / pm)
This section describes cc21k language extension keywords to C and C++ that support the dual-memory space, modified Harvard architecture of the ADSP-21xxx processors. There are two keywords used to designate memory space: dm and pm. They can be used to specify the location of a static or global variable or to qualify a pointer declaration.
以下规则适用于两种内存关键字(dm/pm):
- The memory space keyword (dm or pm) refers to the expression to the right of the keyword.
- You can specify a memory space for each level of pointer. This corresponds to one memory space for each * in the declaration.
- The compiler uses Data Memory (DM) as the default memory space for all variables. All undeclared spaces for data are Data Memory spaces.
- The compiler always uses Program Memory (PM) as the memory space for functions. Function pointers always point to Program Memory.
- You cannot assign memory spaces to automatic variables. All automatic variables reside on the stack, which is always in Data Memory.
- Literal character strings always reside in Data Memory.
参考
- 《VisualDSP++ 5.0 C/C++ Compiler Manual for SHARC Processors》
- 《ADSP-21160 SHARC DSP Instruction Set Reference》
- 《嵌入式系统原理与应用设计》王光学,电子工业出版社
- 嵌入式C语言开发ADSP21XX系列