tms320lf2407考试_tms320lf2407 开发环境_tms320lf2407(49)

电脑杂谈  发布时间:2017-01-30 03:04:38  来源:网络整理

13.2.1 C语言与汇编语言混合编程的方式

? C语言调用汇编语言编写的函数

? 使用内嵌汇编语句(asm语句)

? C语言访问汇编语言变量

? 手动修改C语言程序编译后生成的汇编代码

13.2.2 存储器模式

TMS320C2x/C2xx/C5x的C语言编译器将存储器分为两个线性的空间:

? 程序存储器 存储可执行代码

? 数据存储器 存储各种变量和堆栈编译器将存储器以分段(section)的方法分配和管理,用户以不同的方式分配存储器,可以形成不同的系统配置。连接器将各个块连接在一起形成最终输出的存储器结构。

已初始化的段:

.text 包含所有可执行代码和浮点型常量 Page 0

.cinit 包含初始化变量和常量表 Page 0

.const 包含字符串常量,以及以const修饰的全局或静态变量的声明和初始化 Page 1

.switch 包含switch语句的分支跳转地址表 Page 0

未初始化的块:

.bss 为全局和静态变量保留空间 Page 1

.stack 为系统软件堆栈分配空间 Page 1

.system 为动态分配的内存保留空间,可以被calloc、

malloc、realloc函数使用 Page 1

13.2.3 系统堆栈系统堆栈分为硬件堆栈和软件堆栈。

DSP内部程序控制逻辑部分包含一定大小的堆栈,通常称为硬件堆栈,可以用来保存若干个分支、跳转、函数调用或中断服务程序的返回地址,也可以用来保存其它变量。

通过系统配置可以另外生成一定大小的软件堆栈,用来:

?分配局部变量

?传递函数参数

?保存处理器状态

?保存函数返回地址

?保存临时结果

?保存寄存器内容堆栈从低端地址向高端地址生成。编译器利用两个辅助寄存器来管理堆栈:

? AR1 堆栈指针(SP,stack pointer),指向当前堆栈顶。

? AR0 帧指针(FP,frame pointer),指向当前帧的起始点,每一个函数都会在堆栈顶部建立一个新的帧,

用来保存局部或临时变量。

C语言环境自动操作这两个寄存器。如果编写用到堆栈的汇编语言程序,一定要注意正确使用这两个寄存器。

用-stack连接选项可以指定软件堆栈的大小,用C编写DSP程序一定注意保留足够的堆栈空间!

注意:编译器不会检查堆栈溢出情况,堆栈溢出会破坏DSP

运行环境,导致程序失败。编写DSP程序和配置DSP存储器资源要注意防止堆栈溢出的发生。

13.2.4 动态分配内存

TMS320C2x/C2xx/C5x C语言可调用malloc、calloc或realloc

函数动态申请内存,申请的内存将分配在.system块。

动态分配的内存只能通过指针进行访问。将大数组通过这种方式来分配可以节省.bss块的空间。

通过连接器的-heap选项可以定义.system块。

/***************************************************/

unsigned int *data;

data =(unsigned int *) malloc (100 * sizeof (unsigned

int));

/***************************************************/

13.2.5 寄存器规则

TMS320C2x/C2xx/C5x运行环境对寄存器的使用有严格的要求,如果编写涉及到寄存器的汇编程序,必须严格遵守这些规则,否则可能造成系统工作异常。

寄存器规则规定了编译器如何使用寄存器,和寄存器在函数调用的过程中如何进行保护。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-49.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...