C6000 DSP汇编优化器伪指令详解及中断处理

需积分: 50 72 下载量 111 浏览量 更新于2024-08-24 收藏 673KB PPT 举报
"这篇文档主要介绍了C6000系列DSP程序结构中汇编优化器使用的伪指令,以及中断向量表的配置。涉及到的知识点包括汇编语言的伪指令、存储器映射、C编译器的工作原理、内存段的分配以及中断处理机制。" 在C6000系列DSP的编程中,汇编优化器使用一系列伪指令来提升程序性能。这些伪指令包括: 1. `.call [ret_reg=] func_name(arg1, arg2)`:用于调用函数,它只在当前过程内部有效,可以指定返回寄存器和参数。 2. `.cproc` 和 `.endproc`:这对伪指令定义了一个可调用的C/C++过程的开始和结束,它们必须成对出现,并可以指定变量。 3. `.mdep` 和 `.no_mdep`:这两个指令用于指示存储器是否有相关性,`.mdep` 用于标记存储器依赖,`.no_mdep` 表示无依赖,它们都在过程内部使用。 4. `.mptr{register|symbol},base[+offset][,stride]`:这个指令避免存储体冲突,主要用于过程内部,可以使用寄存器或符号,并指定基地址、偏移和步进。 5. `.reserve [register 1[, register 2,…]]`:该指令保留指定的寄存器,防止汇编优化器使用它们。 6. `.return [argument]`:仅在`.cproc`过程内有效,用于指定过程的返回值。 7. `.proc` 和 `.endproc`:定义过程的开始和结束,可以指定有效的寄存器参数,但不接受变量。 中断向量表(如Vectors.asm)是系统响应中断时跳转的起点,例如在“RESET”中断时跳转到“C_int00”。用户可以根据需求自定义中断向量表,或者利用DSP/BIOS生成。 C6000的存储器映射和C编译器工作时,代码段通常命名为`.text`,全局变量和静态变量位于`.bss`段,而局部变量可能分配在寄存器或`.stack`段。`.stack`和`.sysmem`段分别用于堆栈和动态分配的内存,如果未使用动态内存分配函数,`.sysmem`段将不会生成。 在C6000 DSP环境下,编程者需要注意C编译器如何理解并处理代码,尤其是在内存模式选项的设置、中断使能寄存器的配置等方面。中断处理中,如需启用NMI中断,需设置中断使能寄存器IER,并通过函数如`INTR_ENABLE(CPU_INT_NMI);`来启用。 理解和掌握这些知识点对于高效、正确地编写C6000系列DSP程序至关重要。