第三章 C语言程序编写和调试环境简介 DSP软件开发平台主要包括DSP代码生成过程中所必需的C编译器,汇编器和链接器.

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

第四章 汇编语言程序开发工具 第一节 汇编语言程序的编写方法 第二节 汇编语言程序的汇编 第三节 COFF的一般概念 第四节 目标文件的链接.
2017年3月5日 单片机原理与应用 背景知识调查.
实验四 利用中规模芯片设计时序电路(二).
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
Hadoop I/O By ShiChaojie.
C54x的程序设计有两种语言:汇编语言和C语言。
C54x的程序设计有两种语言:汇编语言和C语言。
第二讲 搭建Java Web开发环境 主讲人:孙娜
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
走进编程 程序的顺序结构(二).
辅导课程六.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第二章 Java语言基础.
逆向工程-汇编语言
CPU结构和功能.
C54x的程序设计有两种语言:汇编语言和C语言。
第7章 在C/C++中使用汇编 罗文坚 中国科大 计算机学院
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
第十讲 C的性能优化 BIT/TI 第十讲 C的性能优化
VB与Access数据库的连接.
(Random Access Memory)
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
第三章 MCS 51的硬件结构.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第4章 Excel电子表格制作软件 4.4 函数(一).
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
实验2 中断模拟实验.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
College of Computer Science & Technology
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第9章 多媒体技术 掌握 Windows 画图工具的基本操作; 掌握 Windows 音频工具进行音频播放;
Python 环境搭建 基于Anaconda和VSCode.
本节内容 结构体.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
WEB程序设计技术 数据库操作.
24 or 1024? PWN Jawbone Up24 手环.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
工业机器人入门使用教程 ESTUN机器人 主讲人:李老师
考察点:switch\while\for System.in\Scanner char vs int
DSP技术与应用 电子与信息技术系.
一个实时嵌入式操作系统移植问题研究 报告人:荣峰华.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

第三章 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编译器可以在编译器输出的汇编语言中直接嵌入汇编语言指令。这种能力是C语言的扩展——asm语句。asm语句能够实现一些C无法实现的功能。例:asm(" clrc INTM");

•不要修改C变量,但可以任意读取C变量当前值。 •不要在内嵌汇编语句中书写修饰性汇编代码(如.text、.data等),否则会破坏汇编环境。 􀂾• 对于嵌入的汇编指令,编译器不会进行语法检查,编程者必须确认嵌入的指令合理有效。 􀂾 • 使用asm指令的时候应小心不要破坏C语言的环境。如果C代码中插入跳转指令和标识符可能会引起不可预料的操作结果。能够改变块或其它影响汇编环境的指令也可能引起麻烦。 􀂾 • 对带asm语句的代码使用优化器时要特别小心。尽管优化器不能删除asm指令,但它可以重新安排asm指令附近的代码顺序,这样就可能会引起不期望的结果 •不要修改C变量,但可以任意读取C变量当前值。 •不要在内嵌汇编语句中书写修饰性汇编代码(如.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端口号,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; /*读出数据空间1000h地址的值,赋给b*/ 可见访问DSP数据空间地址不需要对要访问的单元预先定义,利用指针直接访问就可以了.

3.4 系统初始化 C程序开始运行时,必须首先初始化C运行环境,这是通过c_int0函数完成的,这个函数在运行支持库(rts,runtime-support library)中。连接器会将这个函数的入口地址放置在复位中断向量处,使其可以在初始化时被调用。 c_int0函数进行以下工作以建立C运行环境: •为系统堆栈产生.stack块,并初始化堆栈指针。 •从.cinit块将初始化数据拷贝到.bss块中相应的变量。 •调用main函数,开始运行C程序。 用户可以对c_int0函数进行修改,修改后的函数必须完成以上任务。

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

3.6 头文件和链接器命令文件示例 1、头文件 定义LF240X DSP内部寄存器的地址分配 2、链接器命令文件 链接器对命令文件名的大小写是敏感的,空格和空行是没有 意义的,但可以用做定界符.MEMORY和SECTIONS是链接命令. MEMORY:标示实际存在的目标系统中可被使用的存储器范围,每个存储器范围都有名字、起始地址和长度。其中PAGE0规定程序存储器,PAGE1规定数据存储器。

SECTIONS:规定在存储器内何处放置输出段,即定义逻辑段与目标存储器的对应关系。 已初始化的段: .cinit:标号标识部分存放已明确初始化的全局变量和静态变量Page 0 .switch :标号标识部分存放对于大型的switch语句的跳转表Page 0 .const:标号标识部分存放已明确初始化的字符串常量、全局常量和静态常量Page 1 .text:标号标识部分存放可执行代码和浮点数常量Page 0 未初始化的段: .bss:标号标识部分存放没有初始化的全局变量和静态变量Page 1 .stack:用该标号定义软件堆栈Page 1

3.7 中断向量定义 .ref _c_int0,_nothing ;前面需空格 .sect ".vectors" ;前面需空格 .title "cvectors.asm" ;前面需空格 .ref _c_int0,_nothing ;前面需空格 .sect ".vectors" ;前面需空格 reset: b _c_int0 ;RESET 00H,前面需顶格 int1: b _nothing ;_INT1_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,这两个函数在C语言中定义时前面没有“_”. .sect定义了一个段.vectors,表示开始定义中断向量段,再接下来则开始定义各个中断向量,文本中的每一行对应程序存储器中的两个地址,从0h开始(对应复位向量),第二行对应程序地址2h(INT1) . 每一行的开始(如”RSVECT”)仅仅是一个标志,重要的是在”B”后面,要写明发生此中断时要跳转的地址.

3.8 DSP程序烧写 DSP程序编写完成,调试无误后,就可以将程序烧写到DSP的FLASH(EEPROM)中,使DSP可以脱离仿真器独立运行。 烧写DSP程序也要通过仿真器来进行,仿真器制造者会提供相应的烧写程序。要注意不同型号的DSP往往使用不同的烧写程序,不同类型的仿真器对烧写环境也会有不同的要求,使用前要详细阅读相应说明(readme)。 MP/MC*模式置为0(微计算机模式) 仿真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,求系统的时钟频率为多少? 3 对于系统控制和状态寄存器2(SCSR2)中的WD保护位,复位时的缺省值是多少,如何通过软件对其清0? 4 对于2407的引脚BOOT EN,将其拉到高电平,当系统复位之后,系统从哪个地址开始执行程序?

5 对于以2407DSP为核心组成的系统,如果程序从片内程序地址0000h开始执行,请问2407的引脚MP/MC应该接高电平还是低电平? 6 当一个可屏蔽中断被响应时,( )的中断标志位自动清0。 2407有两个中断向量表( )和( )。 当需要打开一个外设中断时,需要打开的中断屏蔽位有( )、( )和( ) 对于2407的DARAM,共有三个块( )、( )和( ),其中的块( )根据配置位既可以映射到程序存储器,也可以影射到数据存储器。 中央算术逻辑单元CALU是( )位,辅助算术逻辑单元是( )位,两者( )同时进行运算。

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