CC运行时环境课件.pptx

上传人(卖家):晟晟文业 文档编号:4232675 上传时间:2022-11-21 格式:PPTX 页数:23 大小:258.62KB
下载 相关 举报
CC运行时环境课件.pptx_第1页
第1页 / 共23页
CC运行时环境课件.pptx_第2页
第2页 / 共23页
CC运行时环境课件.pptx_第3页
第3页 / 共23页
CC运行时环境课件.pptx_第4页
第4页 / 共23页
CC运行时环境课件.pptx_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、C6000 C run-time environment定义定义nThe run time parameters in which your program must function.nThese parameters are defined by 1.the memory conventions(规范规范)2.register conventions3.stack organization,4.function call conventions5.system initialization.存储器模型存储器模型 nC6000编译器把整个存储区当作单个线性存储块,并将它分为代码区和数据区n编

2、译器假定目标存储器的全部32-bit地址空间是可用的。n定义存储器映象并将代码和数据分配到目标存储器的是连接器,而非编译器。nCmd文件是linker使用的。Hello.cmd段&已初始化段n编译器生成的可重定位的代码和数据块称为段(sections)n已初始化的段:包含数据和可执行代码。C/C+编译器生成的已初始化的段有:n(1).cinit段:包括变量初始值和常量值。n(2).const段:包括字符串文字(string literals),浮点常量和在C/C+中被声(3)明为const的数据(如果常量没有同时被声明为volatile)。n(4).switch段:包含大的switch语句的跳

3、转表(jump table)n(5).text段:包含所有的可执行代码。未初始化段n未初始化的段:存储器(一般指RAM)中的保留空间。程序在运行时用它来创建和存储变量。C/C+编译器生成的未初始化的段有:n(1).bss段:为全局变量和静态变量保留。如果为连接器设定-c选项,则在程序的开始,C引导程序会将.cinit段的数据(可在ROM中)复制到.bss段。编译器定义全局符号$bss,并指定它为.bss段的起始地址。n(2).far段:为声明为far的全局变量和静态变量保留。n(3).stack段:系统堆栈。这个存储区用于传递函数的参数和为局部变量分配存储器空间。n(4).sysmem段:为动

4、态存储空间分配保留的存储区。提请动态存储空间分配要求的有malloc,calloc和realloc等函数。如果C/C+程序未使用这些函数,编译器便不生成该段。段的补充n汇编器产生默认的.text,.bss和.data段,但C/C+编译器不使用.data段。允许用CODE_SECTION和DATA_SECTION pragma来让编译器生成另外的段。n除了.text段,各个初始化段和非初始化段均不能分配到内部程序存储器。系统堆栈编译器将堆栈用于:n(1)保存函数调用后的返回地址;n(2)给局部变量分配存储空间n(3)传递函数参数n(4)保存临时结果n运行时堆栈增长方向是从高向低,编译器用B15寄

5、存器来管理堆栈,即将它作为堆栈指针(SP),指向堆栈中下一个空闲的存储器位置。初始化变量初始化变量 nC/C+编译器生成的代码可固化到ROM中,.cinit段的初始化表也是贮存在ROM中。在系统初始化的时候,C/C+引导程序将表中的数据(ROM中)拷贝给.bss段中对应的变量(RAM中)。n如果程序是从目标文件直接载入存储器,然后运行时,可以无需.cinit段。加载器(loader)直接地从目标文件中读出初始化表(而不是从ROM中),在加载时完成初始化,而不是运行时。这个过程可以通过为连接器指定cr选项来实现。存储器模式存储器模式 (-mln)n小存储器模式和大存储器模式。它们的区别在于为.b

6、ss段分配存储空间的方式。n小存储器模式:.bss 32KByte,使用DP(B14)访问全局数据:LDW*+DP(0 x7),B5n大存储器模式:不限制.bss段的大小,访问数据使用MVKL&MVKH:MVKL _x,A0 MVKH _x,A0 LDW*A0,B0 寄存器使用规范寄存器使用规范 n在C/C+环境下,一些具体的操作要使用哪些的寄存器来完成,是有严格的规范的。n寄存器使用规范规定了编译器使用寄存器的方法以及函数调用过程中数值保存的方法。n要在C/C+程序中嵌入汇编语言,必须理解并遵循寄存器使用规范。寄存器使用规范寄存器使用规范函数调用约定n函数(父函数)在调用另一个函数(子函数)

7、的时候执行下列操作 n(1)将传递到子函数的参数放入寄存器或堆栈。函数调用(父函数)n(2)如果需要,保存寄存器(a/b09)到堆栈。n(3)调用者(父函数)调用函数(子函数)。n(4)(对非C/C+代码)当返回时,调用者收回(reclaim)被调用者使用的堆栈空间。函数调用(子函数)n(1)被调函数(子函数)为所有的局部的变量、临时存储区和它调用的函数的参数分配足够的堆栈空间。n(2)如果被调函数还继续调用其他的函数,返回地址必须保存在堆栈中。n(3)如果被调函数修改寄存器A10到A15或者B10到B15的值,必须将它们保存。n(4)被调函数执行其代码。n(5)存放返回值在A5:A4中。n(

8、6)恢复3中保留的寄存器值n(7)释放1分配的堆栈n(8)利用B3,跳转返回父函数C/C+与汇编语言的接口与汇编语言的接口n使用独立的汇编代码模块,并将其与编译完的C/C+模块连接在一起n在C/C+源程序中使用内联函数(intrinsics),直接地调用汇编语句n使用内联(inline)汇编语言直接嵌入C/C+源程序n在C/C+源程序中使用汇编程序变量和常量C+调用汇编程序内联函数(内联函数(intrinsics)nC6000编译器可以识别若干内联函数。内联函数直接调用某些汇编语句,这些汇编语句在C/C+中实现起来是很繁复或难以表达的。nint x1,x2,y;/饱和加法y=_sadd(x1,

9、x2);内联(内联(inline)汇编语言汇编语言nasm(”;*这是汇编语言的注释”);n要很小心不要破坏C/C+环境。对插入的汇编指令,编译器不做任何检查或者分析。用用C/C+访问汇编语言变量访问汇编语言变量 系统初始化系统初始化n运行一个C/C+程序之前,必须建立C/C+运行环境。这个工作是由C/C+引导程序调用c_int00函数完成的。n系统运行开始时,跳转到或调用c_int00函数,但通常是硬件复位中断的中断服务程序调用它的。n1)定义系统堆栈.stack段并初始化堆栈指针。n2)定义.bss并初始化DP指针n3)初始化全局的变量,这是通过将.cinit段中的初始化表复制给.bss段

10、中为变量分配的存储空间来完成的。如果是在加载时初始化变量(cr选项),加载器(loader)在程序运行之前就完成了这个步骤(它不是通过引导程序执行的)。n4)调用main函数来运行C/C+程序。运行时初始化和加载时初始化C_int_00源码 1extern 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(m

11、vkl _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 8-BYTE 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源码

12、 2n/*-*/n /*SET UP FLOATING POINT REGISTERS FOR C70 ONLY */n /*-*/n#ifdef _TMS320C6700n _asm(mvk 0,B3);/*round to nearest*/n _asm(mvc B3,FADCR);n _asm(mvc B3,FMCR);n#endifn /*-*/n /*GET THE POINTER TO THE AUTOINITIALIZATION TABLES INTO THE FIRST */n /*ARGUMENT REGISTER(A4)*/n /*-*/n _asm(.global cin

13、it);n _asm(mvkl cinit,A4);n _asm(mvkh cinit,A4);n /*-*/n /*PASS THE CURRENT DP TO THE AUTOINITIALIZATION ROUTINE.*/n /*-*/n _asm(mv DP,B4);n /*-*/n /*CALL THE AUTOINITIALIZATION ROUTINE.*/n /*-*/n _asm(.global _auto_init);n _asm(mvkl$aiRL,B3);n _asm(mvkh$aiRL,B3);n _asm(mvkl _auto_init,B0);n _asm(mvkh _auto_init,B0);n _asm(b B0);/*far call*/n _asm(NOP 5);n _asm($aiRL:);n /*-*/n /*CALL THE USERS PROGRAM.*/n /*-*/n main();n /*-*/n /*CALL EXIT.*/n /*-*/n exit(1);n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(CC运行时环境课件.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|