①AR0:帧指针(Frame Pointer,FP)。LF240xA只提供了大小为8个字的硬件栈,不能满足需要。因此,C环境定义了一段特殊的存储器空间,作为软件栈。软件栈的作用是分配局部变量、传递函数的参数、保存处理器的状态、保存临时结果等。AR0指向软件栈中函数局部数据空间的起始处。

②ARl:软件栈的栈顶指针(Stack Pointer,SP)。ARl为指向软件栈栈顶的专用指针。

③AR2:局部变量指针(Local Variable Pointer,LVP)。AR2存放局部变量的偏移量,与AR0(FP)一起对局部变量进行寻址定位。

④AR6、AR7:寄存器型变量。在C语言程序中用register修饰的变量存放在AR6、AR7中。

⑤AR3~AR5:用户自定义。AR3~AR5没有特殊的约定,可以由用户自由决定其用途。在汇编程序的入口处,假设ARP已经被设置为ARl,这是由C编译器自动完成的。C语言程序调用汇编函数时,汇编函数程序必须遵循下述规范:

①从硬件堆栈中弹出返回地址,然后把它压入软件堆栈;

②把C程序的数据结构指针FP压入堆栈;

③如果汇编程序改变了AR6或AR7,也需要把它们压入堆栈;

④分配局部数据结构;

⑤执行汇编程序的实际任务代码;

⑥如果汇编程序有返回值,则把这个返回值放入累加器中;

⑦设置ARP为ARl;

⑧解除分配的局部数据结构;

⑨如果AR6和AR7曾经被保存过,则从软件堆栈恢复它们的值;

⑩从软件堆栈恢复FP;

⑾把软件堆栈中存储的返回地址压入硬件堆栈;

⑿返回。

当汇编函数调用完毕后,C语言程序要弹出先前压入堆栈的传递参数。这个操作通过下面的命令语句实现:SBRK i(i是C程序向汇编程序传递的参数个数)。在上述操作过程中,对软件堆栈的处理至关重要。图1所示为C语言程序调用时软件堆栈的分配示意图,具体步骤如下:

混合编程技术对DSP软件开发的重要性研究分析

①在C语言程序的局部帧后将汇编函数的参数依次压栈;

②程序指针(PC)跳转到汇编函数的代码段;

③保存出口地址;

④保存C语言程序局部帧指针;

⑤分配局部变量;

⑥调用结束前将以上所有内容弹出软件栈。

下面以具体例子来讲述这个操作过程。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查