版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,1,CCS中C语言软件开发基础,.,2,两个目标: 能理解进而编写.CMD文件 学会如何在C语言中访问外设寄存器,.,3,本讲内容 1 公共目标文件格式(COFF) 2 .CMD文件编写 3 C语言中外设寄存器的访问,.,4,1 COFF公共目标文件格式,COFFCommon Object File Format,COFF文件格式的程序关键是运用基于代码块和数据块的概念。, 更利于模块化编程,并为管理代码段和目标系统存储器提供了更强有力和更加灵活的方法; 基于COFF格式编写的汇编程序或高级语言程序时,不必为程序代码或变量指定目标地址,这为程序编写和程序移植提供了极大的方便。,.,5,1.
2、1 块(Section,也可翻译为段),目标文件中最小的单位称作块,一个块就是最终在TMS320存储器映像中占据连续空间的一块代码或数据。,未初始化块,已初始化块,.sect,.text,.bss,.usect,通常包含可执行代码,.data,.asect,通常包含已初始化的数据,通常为未初始化的数据保留的空间,.,6,未初始化块,已初始化块,.const,.text,.bss,.stack,包含可执行代码和字符串,.cinit,包含已初始化的变量和常数表,保留全局和静态变量空间,C编译器产生的块,包含字符串和switch表,为系统堆栈分配存储器,.system,为动态存储器函数分配空间,这些
3、块都是C编译器自动生成。有关详细的内容可参见TI公司C编译器说明。,.,7,1.2 汇编器对块的处理,汇编器的主要任务是为确定汇编语言程序的各部分分别属于哪个特定的段。,汇编语言命令.bss和.usect创建未初始化块,.text、.data、.sect及.asect创建已初始化块,.,8,1.3 链接器对块的处理,链接器对段的处理主要有两个功能: 将COFF目标文件中的段组合起来,建立可执行的COFF输出模块; 为输出段选择存储器地址,格式命令: MEMORY:用于定义目标系统的存储器,可以定义每一段存储器指定的起始地址和长度; SECTIONS:告诉链接器如何组合输入段以及将输出段放至存储
4、器何处。,链接器命令必须放在.CMD文件中。,.,9,链接器默认的存储器分配,.,10,1.4 重新定位,1链接时重新定位 将各个段定位到存储器中,每个段都从合适的地址开始。 将符号值调整到相对于新的段地址的数值。 调整对重新定位后符号的引用。,.,11,2运行时重新定位 将代码装入存储器的一个地方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的ROM中,但希望在较快的RAM中运行。 链接器提供了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址。,.,12
5、,1.5 程序装入,(1)硬件仿真器和CCS集成开发环境,具有内部的装入器,调用装入器的LOAD命令即可装入可执行程序。 (2)将代码固化在片外存储器中,采用Hex转换工具(Hex conversion utility),例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash。,.,13,2 .CMD文件的编写与使用,2.1 MEMORY伪指令及其使用 2.2 SECTIONS伪指令及其使用,.,14,CMD文件其实就是用户的“声明” ,包括两方面的内容: 1、用户声明整个系统的存储器资源。 无论是 DS
6、P 芯片自带的,还是用户外扩的,凡是可以使用的、需要用到的存储器和空间,用户都要一一声明出来:有哪些存储器,它们的位置和大小。如果有些资源根本用不到,可以视为不存在,不必列出来,当然列出来也可以。 2、用户如何分配这些存储器资源,即关于资源分配情况的声明。 用户根据自己的需要,结合芯片的要求,把各种段(代码段、数据段)分配到适当种类、适当特点、适当长度的存储器区域。,.,15,2.1 MEMORY伪指令及其使用,MEMORY伪指令就是用来指定目标存储器的模型。 MEMORY伪指令的一般语法为: MEMORY PAGE 0: name 1 (attr) : origin = constant,
7、length = constant , fill = constant; PAGE 1: name 2 (attr) : origin = constant, length = constant , fill = constant; . . PAGE n: name n (attr) : origin = constant, length = constant , fill = constant; ,.,16,2.2 SECTIONS伪指令及其使用,SECTIONS伪指令功能如下: 说明如何将输入段组合成输出段。 在可执行程序中定义输出段。 指定输出段在存储器中存放的位置。 允许对输出段重新命
8、名。,SECTIONS name:property ,property ,property . name:property ,property ,property . name:property ,property ,property . ,.,17,MEMORY PAGE 0 : /* For this example, H0 is split between PAGE 0 and PAGE 1 */ /* BEGIN is used for the boot to HO bootloader mode */ /* RESET is loaded with the reset vector
9、only if */ /* the boot is from XINTF Zone 7. Otherwise reset vector */ /* is fetched from boot ROM. See .reset section below */ RAMM0 : origin = 0 x000000, length = 0 x000400 BEGIN : origin = 0 x3F8000, length = 0 x000002 PRAMH0 : origin = 0 x3F8002, length = 0 x000FFE RESET : origin = 0 x3FFFC0, le
10、ngth = 0 x000002 PAGE 1 : /* For this example, H0 is split between PAGE 0 and PAGE 1 */ RAMM1 : origin = 0 x000400, length = 0 x000400 DRAMH0 : origin = 0 x3f9000, length = 0 x001000 ,.,18,SECTIONS /* Setup for boot to H0 mode: The codestart section (found in DSP28_CodeStartBranch.asm) re-directs ex
11、ecution to the start of user code. Place this section at the start of H0 */ codestart : BEGIN, PAGE = 0 ramfuncs : PRAMH0 PAGE = 0 .text : PRAMH0, PAGE = 0 .cinit : PRAMH0, PAGE = 0 .cio : RAMM0, PAGE = 0 .pinit : PRAMH0, PAGE = 0 .switch : RAMM0, PAGE = 0 .reset : RESET, PAGE = 0, TYPE = DSECT /* n
12、ot used, */ .stack : RAMM1, PAGE = 1 .ebss : DRAMH0, PAGE = 1 .econst : DRAMH0, PAGE = 1 .esysmem : DRAMH0, PAGE = 1 ,.,19,.,20,3 在C语言中访问外设寄存器,(1)寄存器文件结构体: 所谓寄存器文件是指属于某一外设的所有寄存器,可以称之为寄存器组。F2812中的外设寄存器都是映射到数据存储空间中的寄存器(MMR),对这些外设寄存器的访问可以使用象访问数据存储空间中的存储单元一样的指令。而一般来说,属于某一外设的寄存器文件在存储空间中所占用的地址是连续的(可能有保留的地
13、址),利用构造C语言中结构体类型(辅以联合类型及位域访问),将属于某个指定外设的所有寄存器组成一个集合(即一个结构体变量)。这样对某一寄存器的访问就转变为对结构体变量的一个成员的访问。这就是所谓的寄存器文件结构体。在编译的时候(通过链接器)把每个C结构体变量的实际地址映射到属于某个外设的数个寄存器(即寄存器组)的(第一个寄存器的)内存地址上。这一地址映射允许编译器通过使用CPU的数据页指针寄存器(DP)直接访问外设寄存器。 (2)定义位域: 另外,多数寄存器都定义了位域,辅以C语言中的共用体,从而在程序中能直接读取或者操作某个寄存器中的单个位域。,.,21,/C语言中,一个结构体的例子 /仅仅
14、定义了一个结构体类型CPUTIMER_REGS, /还没有定义变量 structCPUTIMER_REGS Uint32TIM; /定时器计数寄存器 Uint32PRD; /定时器周期寄存器 Uint16TCR; /定时器控制寄存器 Uint16rsvd1; /保留 Uint16TPR; /定时器预定标寄存器低位 Uint16TPRH; /定时器预定标寄存器高位 ;,3 在C语言中访问外设寄存器,.,22,Table 1. SCI-A Configuration and Control Registers,使用传统的#define的方法来访问外设寄存器,.,23,Table 1. SCI-B
15、Configuration and Control Registers,.,24,.,25,.,26,#define方法的优点和缺点 Some advantages of traditional #define macros are: Macros are simple, fast, and easy to type. variable names exactly match register names; variable names are easy to remember. Disadvantages to traditional #define macros include the f
16、ollowing: Bit fields are not easily accessible; you must generate masks to manipulate individual bits. You cannot easily display bit fields within the Code Composer Studio watch window. Macros do not take advantage of Code Composer Studios auto-completion feature. Macros do not benefit from duplicat
17、e peripheral reuse.,.,27,Table 2. SCI-A and SCI-B Common Register File,.,28,.,29,注意以下几点: (1)寄存器名出现的顺序必须与它们在内存中被安排的顺序相同; (2)在结构体中,通过使用保留变量(rsvd1,rsvd2 等)来预留内存中的保留位置。这种保留结构仅仅用以预留内存中的空间; (3)Uint16 和Uint32 分别是无符号16 位或者32 位数的类型定义。在DSP281x中,则用来定义无符号整型和无符号长整型,这样使用起来就方便一些。相应的类型定义声明在DSP281x_Device.h文件中。 关键字v
18、olatile 在变量声明中十分重要。它告诉编译器,这些变量的内容可由硬件改变,并且编译器无须优化使用volatile 变量的代码。,3 在C语言中访问外设寄存器,.,30,.,31,分配专用的数据区: 单有上面两个定义是不够的,还必须为结构体变量分配数据区。分配给某个寄存器组结构体变量的在数据空间的起始地址必须与系统已定义的该寄存器组中第一个寄存器的数据空间中的地址一致。 这可通过在C语言源程序中,使用 DATA_SECTION 等指令来完成。否则,编译器将其视为普通的结构体类型变量而统一分配数据区,导致不能有效地访问外设寄存器。 C语言程序中使用DATA_SECTION pragma的语法: #pragma DATA_SECTION (symbol,secti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 滑雪馆场地内部管理制度
- 煤矿公司内部规章制度
- 煤矿安监科内部制度
- 猫咖内部处罚制度
- 环境内部审核制度
- 皇氏乳业内部管理制度
- 监理部内部例会制度
- 科协内部考评制度
- 科室内部轮换制度汇编
- 管理部门内部控制制度
- 2025年湖南国防工业职业技术学院单招职业技能考试试题及答案解析
- 2025年郑州电力职业技术学院单招职业技能考试试题及答案解析
- 2026湖北荆门市急需紧缺人才引进1502人考试备考试题及答案解析
- 新苏教版科学二年级下册第1课《今天天气怎么样》教学课件
- 节后危险化学品安全管理与复工防护培训
- (2026春新版)部编版三年级道德与法治下册全册教案
- 湖南湘潭市高职单招职业适应性测试考试真题及答案
- 小儿支气管哮喘用药
- 殡仪服务合同范本
- 2026年江西单招装备制造大类高分突破卷含答案
- 2025年广东省高职院校五年一贯制转段考试文化课测试(英语)
评论
0/150
提交评论