版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 C/C+语言程序设计,6.2 C55x C/C+语言编程基础,数据类型 关键字 存储器分配 中断处理,一、 数据类型,C55x C语言支持的数据类型:,二、关键字,1. const,-定义常量,2. ioport,-对I/O寻址,例6-1,ioport关键字的使用。,ioport int k ; /*正确* / void foo(void) ioport int i ; /*错误* / ioport int *j ; /*正确* / ,二、 关键字,-定义中断函数,-声明一个特殊指针,3. interrupt,4. onchip,例6-2 onchip 关键字的使用 onchip in
2、t x100; /* 数组声明 */ onchip int *p; /* 指针声明 */,5. volatile,-存储器访问,定义格式: register 变量类型 变量名 变量类型: 整型、浮点型和指针类型,二、 关键字,6. register,-定义寄存器变量和参数,7. asm,-插入一条汇编指令,指令格式: asm (“assembler text”);,三、 存储器模式,编译器支持两种存储器模型: 小存储模式 大存储器模式,链接器不允许同时存在大存储器模式和小存储器模式。,1.小存储器模式(默认模式),在单页(64KB)存储器内的以下段必须都分配合适: .bss和.data段(所有
3、静态和全局数据)。 .stack和sysstack段(第一和第二系统堆栈)。 .sysmem段(动态存储空间)。 .const段。,对.text段(代码)、.switch段(switch语句)和.cinit段(变量初始化)的大小和位置没有限制。 编译器使用16位数据指针来访问数据。XARn寄存器的高7位用来设置指向包含.bss段的存储页。,2.大存储器模式,数据指针为23位,在存储器中占2字空间。.stack和.sysstack段必须在同一页上。 编译代码时,必须和rts55x.lib运行时间库链接。应用程序中的所有文件都必须使用相同的存储器模式。,四、 存储器分配,五、 中断处理,1.关于中
4、断的几个要点,中断服务程序不能被普通C代码调用。,关键字,例6-3:中断服务程序 void INTR_init( void ) IVPD=0 xd0; IVPH=0 xd0; IER0=0 x10; DBIER0 =0 x10; IFR0=0 xffff; asm( BCLR INTM); interrupt void timer( ) . ,无参数,设置中断寄存器IER0,在汇编语言中,中断程序名前加下划线,如 _timer。,中断处理程序可以处理单个中断或多个中断,c_int00除外,五、 中断处理,通过.sect指令创建中断向量表。,.sect .vectors .ref _c_int0
5、0 .ref _timer rsv: B _c_int00 NOP .align 8 nmi: .loop 8 nop .endloop int0:.loop 8 nop .endloop int2: B _timer nop .align 8 tint:B _timer nop .align 8 ,保存中断入口的现场信息 (所用寄存器或全部寄存器),6.5 C55x C和汇编语言混合编程,寄存器规则 函数结构和调用规则 C和汇编语言的接口,6.5.2 寄存器规则,6.5.3 函数结构和调用规则,例,函数调用时的堆栈使用情况,1父函数如何调用其它函数,编译器对参量分类,有3类: 数据指针(in
6、t *,long * 等) 16位数据(char,short,int) 32位数据(long,float,double,函数指针),(1)将所要传递到子函数的参数放入寄存器或堆栈。,(2)子函数保存所有的入口保存寄存器 (T2、T3、AR5AR7)。 父函数必须通过压入堆栈来保存其它在调用后会用到 寄存器的值。,(3)父函数对子函数进行调用。,短数据 T0 长数据 AC0 数据指针(X)AR0 结构体 在本地堆栈中分配相应大小的空间。父函数将该空间地址作为第一个隐含参量传送给子函数,这个参数被看成一个数据指针。,(4)父函数收集返回值。,1父函数如何调用其它函数,例6-8,寄存器参量规则。,s
7、truct big long x10; ; struct small int x; ; T0 T0 AC0 AR0 int fn(int i1, long l2, int *p3); AC0 AR0 T0 T1 AR1 long fn(int *p1, int i2, int i3, int i4); AR0 AR1 struct big fn(int *p1); T0 AR0 AR1 int fn(struct big b, int *p1);,AC0 AR0 struct small fn(int *p1); T0 AC0 AR0 int fn(struct small b, int *p
8、1); T0 stack stack. int printf(char *fmt, . ); AC0 AC1 AC2 stack T0 void fn(long l1, long l2, long l3, long l4, int i5); AC0 AC1 AC2 AR0 AR1 void fn(long l1, long l2, long l3, int *p4, int *p5, AR2 AR3 AR4 T0 T1 int *p6, int *p7, int *p8, int i9, int i10);,2被调用函数(子函数)的响应,(1)被调用函数为局部变量、临时存储空间及函数可能调用的
9、参数分配足够的存储空间。 (2)如果子函数修改一些入口保存寄存器(T2、T3、AR5AR7),必须将这些值压入堆栈或存储到一个没用的寄存器中。被调用函数可以修改其它的寄存器而不用保存其中的值。 (3)如果子函数的参数是一个结构体,则它所接收到的是一个指向该结构体的指针。,(4)子函数执行代码。 (5)如果子函数返回一个值,它将该值按照以下规则放置: 短整型数据值T0 长整型数据值AC0 数据指针值(X)AR0 结构体-(X)AR0作为指针指向结构体。要返回这个结构体,被调用函数只要将该结构体复制到被这个指针所指的存储模块中。 (6)子函数恢复在第2步中保存的寄存器。 (7)子函数将堆栈恢复成其
10、原始值。 (8)函数返回。,6.5.4 C和汇编语言的接口,C代码和汇编语言代码混合使用方法: 使用几个独立的汇编代码模块,并将它们与编译了的C模块进行链接. 最通用的方法。 在C源代码中使用汇编语言变量和常数。 在C源代码中直接嵌入汇编语言。 在C源代码中使用本征函数直接调用汇编语言语句。,1. 在C代码中访问汇编语言函数,在定义汇编函数时,在函数名前加下划线“_”. 声明为外部函数,例6-9,从C代码中访问汇编语言函数。(a)C程序:extern int asmfunc(int,int *); /*声明汇编函数*/int gvar ; /*定义全局变量*/main() int i;i=as
11、mfunc(i,/*调用函数*/,(b)汇编程序:_asmfunc:ADD *AR0,T0,T0 ; T0+gvar=i,i=T0 RET;,2. 在C代码中访问汇编语言变量,(1) 访问.bss段或.usect段中没有初始化的变量: 使用.bss或.usect指令来定义变量 使用.global指令来定义为外部变量 在汇编语言中的变量前加下划线“_” 在C代码中声明变量为外部变量并正常地访问它,例6-10,从程序中访问定义在.bss段的变量,(a)C程序: extern int var;/* 外部变量 */ var = 1;/* 使用变量 */,(b)汇编语言程序: .bss var,1;定义
12、变量 .gloabal var;声明变量为外部变量,(2) 非.bss段中变量访问-定义指向该变量的指针 定义变量 声明一个指向该变量起始地址的全局指针 在程序中,必须先声明该对象为extern型。,2. 在C代码中访问汇编语言变量,(a)汇编程序: .global _sine .sect ”sine_tab” _sine: .float 0.0 .float 0.015987 .float 0.022145,例6-10,在C代码中访问非 .bss段中变量。,(b)C程序: extern float sine ; float *sine_p=sine; f=sine_p2;,3. 在C语言中访问汇编语言常数,使用.set和.global指令定义汇编语言全局常数。 使用定义常量 .global _table_size;定义该常量为全局常量,例6-11,在C代码中访问汇编语言常数。,(b)语言程序: extern int tab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学主题班会课件:体验历史与文化传承
- 远离言语伤害守护心灵阳光小学主题班会课件
- 2026新产业面试题库及答案
- 通知项目的延期与重新规划(3篇)
- 2026年度付款凭证确认函3篇范文
- 2026政治面试题目及答案解析
- 感恩父母小宝贝:学会感恩与表达小学主题班会课件
- 2026公园扰民面试题及答案
- 中华传统节日:感受民族文化小学主题班会课件
- 商洽供应商合作条款调整函种(5篇)
- (2026)全国应急管理普法知识竞赛试题库及答案
- 2026年河南省中考真题道德与法治试卷和答案
- 2026中国航空发动机集团总部招聘36人笔试备考题库及答案详解
- 2026年全国通信专业技术人员考试高、中级(通信专业实务终端与业务)模拟试题及答案
- 2026年初二物理基础测试题及答案
- 防灾减灾安全知识普及课件
- 建筑材料检测送检指南(机电类)
- 北京市第四中学2026届高一数学第二学期期末联考试题含解析
- 2025年国控私募基金招聘笔试题库及答案汇编
- 2025年消防员历年面试题及答案
- 闲鱼培训教学课件
评论
0/150
提交评论