第四章C语言程序编写和调试环境简介.ppt

上传人:ga****84 文档编号:316563 上传时间:2018-09-21 格式:PPT 页数:14 大小:266.50KB
下载 相关 举报
第四章C语言程序编写和调试环境简介.ppt_第1页
第1页 / 共14页
第四章C语言程序编写和调试环境简介.ppt_第2页
第2页 / 共14页
第四章C语言程序编写和调试环境简介.ppt_第3页
第3页 / 共14页
第四章C语言程序编写和调试环境简介.ppt_第4页
第4页 / 共14页
第四章C语言程序编写和调试环境简介.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、第三章 C语言程序编写和调试环境简介,DSP软件开发平台主要包括DSP代码生成过程中所必需的C编译器,汇编器和链接器. C编译器:将C语言源代码程序自动地编译成DSP汇编语言源代码程序. 汇编器:将汇编语言源代码文件汇编成机器语言COFF目标文件. 链接器:把汇编生成的可重定位的COFF目标模块和目标库文件组合成一个可执行的COFF目标模块,3.1 C编译器概述,DSP C语言以ANSI C为基础,并对ANSI C进行了相应的 限定和扩展。TMS320C2XX C编译器:主要功能是把标准的ANSI C语言程序转换为C2XX能够识别执行的汇编语言代码。TMS320C2x/C2xx/C5x的C编译

2、器可以在编译器输出的汇编语言中直接嵌入汇编语言指令。这种能力是C语言的扩展asm语句。asm语句能够实现一些C无法实现的功能。例:asm( clrc INTM);, 对于嵌入的汇编指令,编译器不会进行语法检查,编程者必须确认嵌入的指令合理有效。 使用asm指令的时候应小心不要破坏C语言的环境。如果C代码中插入跳转指令和标识符可能会引起不可预料的操作结果。能够改变块或其它影响汇编环境的指令也可能引起麻烦。 对带asm语句的代码使用优化器时要特别小心。尽管优化器不能删除asm指令,但它可以重新安排asm指令附近的代码顺序,这样就可能会引起不期望的结果 不要修改C变量,但可以任意读取C变量当前值。

3、不要在内嵌汇编语句中书写修饰性汇编代码(如.text、.data等),否则会破坏汇编环境。 内嵌汇编语句可以用来在编译输出结果中添加注释,以改善编译器输出汇编程序的可读性。 asm(“ * this is an assembly language comment”);,3.2 访问I/O空间 要在程序中访问io空间地址,必须首先用关键字“ioport”对要访问的地址进行定义。 语法:ioport type port hex_num ioport 声明io空间端口变量的关键字; type变量类型,可以为char, short, int或unsigned int; port hex_num端口号,

4、port后面接16进制数字。 /*/ ioport unsigned int port10; /*/ 注:声明io空间地址必须在C文件起始声明,不允许在函数中使用ioport声明io空间地址。例如: ioport unsigned port10; /*定义I/O空间变量10h*/ port10=a; /*将a写到端口10h*/ b=port10; /*从端口10h读入b*/ ,3.3 访问数据空间,访问DSP数据空间是利用指针来实现的.例如: *(unsigned int *)0x1000=a; /*将a的值写入数据空间1000h地址*/ b = *(unsigned int *)0x1000

5、; /*读出数据空间1000h地址的值,赋给b*/可见访问DSP数据空间地址不需要对要访问的单元预先定义,利用指针直接访问就可以了.,3.4 系统初始化 C程序开始运行时,必须首先初始化C运行环境,这是通过c_int0函数完成的,这个函数在运行支持库(rts,runtime-support library)中。连接器会将这个函数的入口地址放置在复位中断向量处,使其可以在初始化时被调用。 c_int0函数进行以下工作以建立C运行环境: 为系统堆栈产生.stack块,并初始化堆栈指针。 从.cinit块将初始化数据拷贝到.bss块中相应的变量。 调用main函数,开始运行C程序。 用户可以对c_i

6、nt0函数进行修改,修改后的函数必须完成以上任务。,3.5 利用TMS320C2XX C编译器开发应用程序的步骤 开发DSP的C语言应用程序,需要四种类型的文件: 1、C语言文件或汇编语言文件(.C或.ASM) 复位和中断向量需要用汇编语言编写 2、头文件(.H) 定义DSP内部寄存器的地址分配,一般具有通用性,书写一次以后可被其他程序反复使用 3、命令文件(.CMD) 主要定义堆栈、程序空间和数据空间分配等 4、库文件rts2xx.lib 默认情况下,该文件可以在“:tic2xxc2000cgtoolslib”目录中找到 注:这4中类型的文件必须存储在同一个文件夹中,3.6 头文件和链接器命

7、令文件示例1、头文件 定义LF240X DSP内部寄存器的地址分配 2、链接器命令文件链接器对命令文件名的大小写是敏感的,空格和空行是没有 意义的,但可以用做定界符MEMORY和SECTIONS是链接命令. MEMORY:标示实际存在的目标系统中可被使用的存储器范围,每个存储器范围都有名字、起始地址和长度。其中PAGE0规定程序存储器,PAGE1规定数据存储器。,SECTIONS:规定在存储器内何处放置输出段,即定义逻辑段与目标存储器的对应关系。 已初始化的段: .cinit:标号标识部分存放已明确初始化的全局变量和静态变量Page 0 .switch :标号标识部分存放对于大型的switch

8、语句的跳转表Page 0 .const:标号标识部分存放已明确初始化的字符串常量、全局常量和静态常量Page 1 .text:标号标识部分存放可执行代码和浮点数常量Page 0 未初始化的段: .bss:标号标识部分存放没有初始化的全局变量和静态变量Page 1 .stack:用该标号定义软件堆栈Page 1,3.7 中断向量定义,.title cvectors.asm ;前面需空格 .ref _c_int0,_nothing ;前面需空格 .sect .vectors ;前面需空格reset: b _c_int0 ;RESET 00H,前面需顶格int1: b _nothing ;_INT1

9、_ISR 02H,前面需顶格int2: b _nothing ;_INT2_ISR 04H,前面需顶格int3: b _nothing ;_INT3_ISR 06H,前面需顶格int4: b _nothing ;_INT4_ISR 08H,前面需顶格int5: b _nothing ;_INT5_ISR 0AH,前面需顶格int6: b _nothing ;_INT6_ISR 0CH,前面需顶格.ref伪指令定义了文件中将引用的中断处理函数_nothing和_c_int0,这两个函数在语言中定义时前面没有“”.sect定义了一个段.vectors,表示开始定义中断向量段,再接下来则开始定义各个

10、中断向量,文本中的每一行对应程序存储器中的两个地址,从h开始(对应复位向量),第二行对应程序地址h(INT1) 每一行的开始(如”RSVECT”)仅仅是一个标志,重要的是在”B”后面,要写明发生此中断时要跳转的地址.,3.8 DSP程序烧写 DSP程序编写完成,调试无误后,就可以将程序烧写到DSP的FLASH(EEPROM)中,使DSP可以脱离仿真器独立运行。 烧写DSP程序也要通过仿真器来进行,仿真器制造者会提供相应的烧写程序。要注意不同型号的DSP往往使用不同的烧写程序,不同类型的仿真器对烧写环境也会有不同的要求,使用前要详细阅读相应说明(readme)。 MP/MC*模式置为0(微计算机

11、模式)仿真RAM不被PS*信号选中DSP烧写步骤:清除flash内容(bc0.bat, bc1.bat) 将FLASH(EEPROM)中的所有位清零(set to 0)。擦除flash内容(be0.bat, be1.bat) 将FLASH(EEPROM)中的所有位置位(set to 1)。把目标程序写进flash中(bp16k.bat, bp32k.bat) 将FLASH(EEPROM)中的所有选中的位清零(set to 0)。,复习,1 已知系统的晶振频率为10MHz,求上电复位后系统的时钟频率为多少,指令周期为多少?2 已知系统的晶振频率为10MHz,SCSR1的配置值为81FEh,求系统

12、的时钟频率为多少?3 对于系统控制和状态寄存器2(SCSR2)中的WD保护位,复位时的缺省值是多少,如何通过软件对其清0?4 对于2407的引脚BOOT EN,将其拉到高电平,当系统复位之后,系统从哪个地址开始执行程序?,5 对于以2407DSP为核心组成的系统,如果程序从片内程序地址0000h开始执行,请问2407的引脚MP/MC应该接高电平还是低电平?6 当一个可屏蔽中断被响应时,( )的中断标志位自动清0。2407有两个中断向量表( )和( )。当需要打开一个外设中断时,需要打开的中断屏蔽位有( )、( )和( )对于2407的DARAM,共有三个块( )、( )和( ),其中的块( )

13、根据配置位既可以映射到程序存储器,也可以影射到数据存储器。 中央算术逻辑单元CALU是( )位,辅助算术逻辑单元是( )位,两者( )同时进行运算。,11 数据存储器页面指针DP是( )位指针,共可以选择( )页。 12输入数据定标移位器ISCALE的移位需要额外占用( )个指令周期。13乘法器MPY进行的是( )位的乘法运算,结果是( )位。乘法运算占用( )个指令周期,运算结果是二进制( )码。14假设溢出方式位OVM1, ACC=7FFF FFFFh,那么ACC加上100后,ACC的结果是多少?15 51系列单片机总线采用的是( )结构,2407DSP总线采用的是( )结构。16 决定程序存储器配置的两个因素是( )和( )。,

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。