DSP-C语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《DSP-C语言程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP_C 语言程序设计 课件
- 资源描述:
-
1、第第6章章 C/C+语言程序设计语言程序设计6.1 C55X C/C+语言概述语言概述6.2 C55X C/C+语言编程基础语言编程基础6.5 C语言与汇编语言的混合编程语言与汇编语言的混合编程 6.5.1 在在C语言中直接嵌入汇编语言语言中直接嵌入汇编语言 6.5.2 C语言调用汇编模块的接口语言调用汇编模块的接口补充:补充:TI DSP软件开发平台软件开发平台l汇编语言依赖于计算机硬件,程序的可读性和汇编语言依赖于计算机硬件,程序的可读性和可移植性比较差。一般高级语言具有很好的可可移植性比较差。一般高级语言具有很好的可移植性,但是难以实现汇编语言的某些功能移植性,但是难以实现汇编语言的某些
2、功能(如对内存地址的操作、位操作等)。(如对内存地址的操作、位操作等)。lC/C+语言作为一种高级语言,既可以访问物语言作为一种高级语言,既可以访问物理地址又可以进行位操作,能直接对硬件进行理地址又可以进行位操作,能直接对硬件进行操作,适合用作操作,适合用作DSP开发语言。开发语言。6.1.1 C/C+语言概况语言概况6.1 C55X C/C+语言概述语言概述6.1.2 C55x C/C+语言概况语言概况lC55x C/C+编译器全面支持编译器全面支持ANSI C/C+语言标准,能够把按照标准语言标准,能够把按照标准ANSI C/C+规范编写的源程序进行全面优化,编译成规范编写的源程序进行全面
3、优化,编译成C55x 汇编语言源程序。汇编语言源程序。lC55x C/C+编译器工具拥有完整的实时编译器工具拥有完整的实时运行库运行库,所有的库函数均符合所有的库函数均符合ANSI库标准。库标准。C55X C/C+语言编程基础语言编程基础类型类型长度长度内容内容最小值最小值最大值最大值signed char(有符号有符号字符字符)16位位ASCII码码-3276832767unsigned char(无符号字符无符号字符)16位位ASCII码码065535short,signed short(短整型短整型)16位位二进制二进制补码补码-3276832767unsigned short(无无符号
4、短整型符号短整型)16位位二进制二进制数数065535类类 型型长长 度度内内 容容最最 小小 值值最最 大大 值值int,signed int(整型)(整型)16位位二进制二进制补码补码 3276832767unsigned int(无符号无符号整型)整型)16位位二进制二进制数数065535long,signed long(长(长整型)整型)32位位二进制二进制补码补码 2 147 483 6482 147 483 647unsigned long(无符号(无符号长整型)长整型)32位位二进制二进制数数04 249 967 295long long(40位长整型)位长整型)40位位二进制二
5、进制补码补码 549 755 813 888549 755 813 887unsigned long long(40位无符号长整型)位无符号长整型)40位位二进制二进制数数01 099 511 627 775emum(枚举型)(枚举型)16位位二进制二进制补码补码 3276832767float(浮点型)(浮点型)32位位32位浮位浮点数点数1.175 494e 383.40 282 346e+38类类 型型长长 度度 内内 容容最最 小小 值值最最 大大 值值double(双精度浮点(双精度浮点数)数)32位位32位浮位浮点数点数1.175 494e 383.40 282 346e+38lo
6、ng double(长双精(长双精度浮点数)度浮点数)32位位32位浮位浮点数点数1.175 494e 383.40 282 346e+38大存储器模式大存储器模式23位位二进制二进制数数00 x7FFFFFpointers(程序指针)(程序指针)24位位二进制二进制数数00 xFFFFFF6.2.2 关键字关键字1.const lC55x C编译器支持标准编译器支持标准C语言的语言的const关键字。关键字。l将这个关键字使用到对任意变量或数组的定义上将这个关键字使用到对任意变量或数组的定义上可以确保它们的值不改变。可以确保它们的值不改变。l如果定义一个对象为如果定义一个对象为const,那
7、么,那么const段就会为段就会为该对象分配存储空间。使用该对象分配存储空间。使用const关键字可以定义关键字可以定义大常数表并将它们分配到系统大常数表并将它们分配到系统ROM中。中。C55X C/C+语言编程基础语言编程基础 例:例:6.2.2 关键字关键字 int *const p=&x;const int *q=&x;定义指向变量定义指向变量int的常量指针的常量指针p定义指向常量定义指向常量int的变量指针的变量指针q 注意:注意:例,例,ioport关键字的使用。关键字的使用。ioport int k void foo(void)ioport int i ioport int*j
8、;/*正确正确*/;/*错误错误*/;/*正确正确*/例:定时器初始化例程例:定时器初始化例程 void TIMER_init(void)ioport unsigned int *tim0;ioport unsigned int *prd0;ioport unsigned int *tcr0;ioport unsigned int *prsc0;tim0 =(unsigned int*)0 x1000;prd0 =(unsigned int*)0 x1001;tcr0 =(unsigned int*)0 x1002;prsc0=(unsigned int*)0 x1003;*tcr0=0 x0
9、4f0;*tim0=0;*prd0=0 x0ffff;*prsc0=2;*tcr0=0 x00e0;4.c_int00是是C/C+程序的入口点,这个函数名被系统程序的入口点,这个函数名被系统复位中断保留,该中断服务程序用来初始化系统并调用复位中断保留,该中断服务程序用来初始化系统并调用main函数。函数。关于中断的几个要点关于中断的几个要点:中断服务程序不能中断服务程序不能被普通被普通C C代码调用。代码调用。关键字关键字例:中断服务程序例:中断服务程序Void INTR_init(void)IVPD=0 xd0;IVPH=0 xd0;IER0=0 x10;DBIER0=0 x10;IFR0=
10、0 xffff;asm(BCLR INTM);interrupt void timer().无参数无参数设置中断寄存器设置中断寄存器IER0IER0保存中断入口的现场信息保存中断入口的现场信息(所用所用寄存器或全部寄存器)寄存器或全部寄存器)通过通过.sect.sect指令创建中指令创建中断向量表。断向量表。.sect .vectors .ref _c_int00 .ref _timer rsv:B _c_int00 NOP .align 8nmi:.loop 8 nop.endloopint0:.loop 8nop.endloopint2:B _timernop.align 8tint:B
11、_timernop.align 8在汇编语言中,中断程序名在汇编语言中,中断程序名前加下划线,如前加下划线,如 _timer。关于中断的几个要点关于中断的几个要点:中断处理程序可以处理单个中中断处理程序可以处理单个中断或多个中断,断或多个中断,c_int00除外除外保存中断入口的现场信息保存中断入口的现场信息 (所用寄存器或全部寄存器)所用寄存器或全部寄存器)volatile-存储器访问存储器访问定义格式:定义格式:register 变量类型变量类型 变量名变量名变量类型:变量类型:整型、浮点型整型、浮点型和和指针类型指针类型register6.2.4 asm指令指令-插入一条汇编指令插入一条
12、汇编指令指令格式:asm(“assembler text”);main()int i;unsigned int uWork;while(1)for(i=0;ii,i=T0 RET;在定义汇编函数时,在函在定义汇编函数时,在函数名前加下划线数名前加下划线“_”.声明为外部函数声明为外部函数3:在在C代码中访问汇编语言变量代码中访问汇编语言变量l访问访问.bss段或段或.usect段中没有初始化的变量:段中没有初始化的变量:u使用使用.bss或或.usect指令来定义变量指令来定义变量u使用使用.global指令来定义为外部变量指令来定义为外部变量u在汇编语言中的变量前加下划线在汇编语言中的变量前
13、加下划线“_”u在在C代码中声明变量为外部变量并正常地访问它代码中声明变量为外部变量并正常地访问它(b)C程序:程序:extern int var;/*外部变量外部变量*/var=1;/*使用变量使用变量*/(a)汇编语言程序:)汇编语言程序:.bss var,1;定义变量定义变量 .gloabal var;声明变量为外部变量声明变量为外部变量l非非.bss.bss段中变量访问段中变量访问-定义指向该变量的指针定义指向该变量的指针u定义变量定义变量u声明一个指向该变量起始地址的全局指针声明一个指向该变量起始地址的全局指针u在程序中,必须先声明该对象为在程序中,必须先声明该对象为externex
14、tern型。型。3:在在C代码中访问汇编语言变量代码中访问汇编语言变量(a)汇编程序:)汇编程序:.global _sine .sect ”sine_tab”_sine:.float 0.0 .float 0.015987 .float 0.022145(b)C程序:程序:extern float sine;float*sine_p=sine;f=sine_p2;4.在在C语言中访问汇编语言常数语言中访问汇编语言常数l使用使用.set和和.global指令定义汇编语言全局常数。指令定义汇编语言全局常数。l使用使用&运算符来取值。运算符来取值。(a)汇编语言程序:)汇编语言程序:_table_s
15、ize .set 10000;定义常量定义常量.global _table_size;定义该常量为全局常量定义该常量为全局常量例:例:(b)语言程序:)语言程序:extern int table_size;#define TABLE_SIZE (int)(&table_size)For(i=0;iTABLE_SIZE;+i)C和汇编语言的接口注意:和汇编语言的接口注意:例:利于混合编程的方式实现例:利于混合编程的方式实现y=a+b,主程序用主程序用C实现,子函数实现,子函数asmf采用汇编语言采用汇编语言,已知已知a,b,y均为整数。均为整数。主程序:主程序:Main()int a,int b
16、;int y;a=3;b=5;y=asmf(a,b);extern int asmf(int a,int b);汇编源程序:汇编源程序:.global _asmf.text_asmf:add T1,T0,T0 RET习题:习题:利于混合编程的方式实现利于混合编程的方式实现 已知主程序如下,请将汇编源程序补充完整。已知主程序如下,请将汇编源程序补充完整。40iiixayMain()int anb=2,3,4,5;int xnb=1,2,3,4;int y;y=asmf(&a,&x,nb);extern long asmf(int*,int*,int);主程序:主程序:汇编源程序:汇编源程序:.g
17、lobal _asmf.text_asmf:.RET#define nb 5;P249 作业作业 3,4,5,6,7,9,10小结:软件开发过程第一步,分析任务需求并用高级语言写出软件流程。第一步,分析任务需求并用高级语言写出软件流程。写流程可以采用编写写流程可以采用编写“伪代码伪代码”的方式完成。可以清楚地定义的方式完成。可以清楚地定义信号的处理机制,并为今后程序的调试和扩展预先留好接口。在流信号的处理机制,并为今后程序的调试和扩展预先留好接口。在流程描述中,可以将每一个关键的处理环节用函数(或直接用语言描程描述中,可以将每一个关键的处理环节用函数(或直接用语言描述)来表示,确定软件的框架。
18、述)来表示,确定软件的框架。第二步,根据第一步的工作写主流程的第二步,根据第一步的工作写主流程的C或者汇编程序。或者汇编程序。整个工作过程可以充分参照例子工程做。整个工作过程可以充分参照例子工程做。第三步,细化主流程程序,按功能编写每一个函数。第三步,细化主流程程序,按功能编写每一个函数。第四步,完成中断服务程序的编写。第四步,完成中断服务程序的编写。第五步,编写链接用第五步,编写链接用cmd命令文件,确定汇编程序中各命令文件,确定汇编程序中各段代码和数据摆放的位置。段代码和数据摆放的位置。通常情况下,程序放置在通常情况下,程序放置在SARAM内,而数据放置在内,而数据放置在DARAM。注意程
19、序的编制需需调程序的模块化、常量的符号化、注意程序的编制需需调程序的模块化、常量的符号化、变量名有意义等软件工程的基本要素。在汇编级编程的时候,变量名有意义等软件工程的基本要素。在汇编级编程的时候,需要做汇编语句级的优化。需要做汇编语句级的优化。小结:软件开发过程软件组成:软件组成:由代码和数据组成由代码和数据组成运行:运行:要运行的程序其代码和数据必须存放在要运行的程序其代码和数据必须存放在CPU的存储空间的存储空间存放存放:以代码块和数据块的形式存放:以代码块和数据块的形式存放 代码块和数据块是程序的最小单元代码块和数据块是程序的最小单元 一个代码块或数据块在存储空间中连续、顺序存放一个代
20、码块或数据块在存储空间中连续、顺序存放 不同的代码块或数据块,可以存放于不同的存储空间中不同的代码块或数据块,可以存放于不同的存储空间中定位:定位:编译时定位:编译时定位:MCU系统采用编程时由系统采用编程时由ORG语句确定代码块和数据块的语句确定代码块和数据块的绝对地址编译器以此地址为首地址,连续、顺序地存放该代码块或数绝对地址编译器以此地址为首地址,连续、顺序地存放该代码块或数据块据块 链接时定位:链接时定位:DSP系统采用编程时由系统采用编程时由“SECTION”伪指令,以区分不伪指令,以区分不同的代码块或数据块编译器每遇到一个同的代码块或数据块编译器每遇到一个“SECTION”伪指令,
21、从伪指令,从0地址地址重新开始一个代码块或数据块链接器将同名的重新开始一个代码块或数据块链接器将同名的“SECTION”合并,并合并,并按按.cmd文件中的文件中的“SECTION”命令进行实际的定位命令进行实际的定位 加载时定位:加载时定位:PC机系统采用编程、编译和链接时均未对程序进行绝对机系统采用编程、编译和链接时均未对程序进行绝对定位程序运行前,由操作系统对程序进行重定位,并加载到存储空间定位程序运行前,由操作系统对程序进行重定位,并加载到存储空间中中DSP C语言:C运行环境(1)存储模型:存储模型:C程序的代码和数据如何定位程序的代码和数据如何定位系统定义系统定义.cinit存放存
22、放C程序中的变量初值和常量程序中的变量初值和常量.const 存放存放C程序中的字符常量、浮点常量和用程序中的字符常量、浮点常量和用const声明的常量声明的常量.switch 存放存放C程序中程序中switch语句的跳针表语句的跳针表.text 存放存放C程序的代码程序的代码.bss为为C程序中的全局和静态变量保留存储空间程序中的全局和静态变量保留存储空间.far 为为C程序中用程序中用far声明的全局和静态变量保留空间声明的全局和静态变量保留空间.stack 为为C程序系统堆栈保留存储空间,用于保存返回地址、函数程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保
展开阅读全文