实时数字信号处理技术c6000软件开发3代码产生工具和内容摘要:

)调用函数 (子函数 ). 4. (对非 C/C++代码 )当返回时 ,调用者收回 (reclaim)被调用者使用的堆栈空间 . 函数调用(子函数) 1. 被调函数(子函数)为所有的局部的变量、临时存储区和它调用的函数的参数分配足够的堆栈空间。 2. 如果被调函数还继续调用其他的函数,返回地址必须保存在堆栈中。 3. 如果被调函数修改寄存器 A10到 A15或者 B10到B15的值,必须将它们保存。 4. 被调函数执行其代码。 5. 存放返回值在 A5:A4中。 6. 恢复 3中保留的寄存器值 7. 释放 1分配的堆栈 8. 利用 B3,跳转返回父函数 系统初始化  运行一个 C/C++程序之前,必须建立C/C++运行环境。 这个工作是由 C/C++引导程序调用 c_int00函数完成的。  系统运行开始时,跳转到或调用c_int00函数,但通常是硬件复位中断的中断服务程序调用它的。 系统初始化 1. 定义系统堆栈 .stack段并初始化堆栈指针 2. 定义 .bss并初始化 DP指针 3. 初始化全局的变量 , 这是通过将 .cinit段中的初始化表复制给 .bss段中为变量分配的存储空间来完成的。 如果是在加载时初始化变量 ( –cr选项 ) , 加载器( loader) 在程序运行之前就完成了这个步骤 ( 它不是通过引导程序执行的 ) 4. 调用 main函数来运行 C/C++程序 C_int_00源码 1 extern void __interrupt c_int00() { /**/ /* SET UP THE STACK POINTER IN B15. */ /* THE STACK POINTER POINTS 1 WORD PAST THE TOP OF THE STACK, SO SUBTRACT */ /* 1 WORD FROM THE SIZE. */ /**/ __asm( mvkl __stack,SP)。 __asm( mvkh __stack,SP)。 __asm( mvkl __STACK_SIZE 4,B0)。 __asm( mvkh __STACK_SIZE 4,B0)。 __asm( add B0,SP,SP)。 /**/ /* THE SP MUST BE ALIGNED ON AN 8BYTE BOUNDARY. */ /**/ __asm( and ~7,SP,SP)。 /**/ /* SET UP THE GLOBAL PAGE POINTER IN B14. */ /**/ __asm( .global $bss)。 __asm( mvkl $bss,DP)。 __asm( mvkh $bss,DP)。 C_int_00源码 2  /**/  /* SET UP FLOATING POINT REGISTERS FOR C70 ONLY */  /**/  ifdef _TMS320C6700  __asm( mvk 0,B3)。 /* round to nearest */  __asm( mvc B3,FADCR)。  __asm( mvc B3,FMCR)。  endif  /**/  /* GET THE POINTER TO THE AUTOINITIALIZATION TABLES INTO THE FIRST */  /* ARGUMENT REGISTER (A4) */  /**/  __asm( .global cinit)。  __asm( mvkl cinit,A4)。  __asm( mvkh cinit,A4)。  /**/  /* PASS THE CURRENT DP TO THE AUTOINITIALIZATION ROUTINE.。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。