寄存器文件的空间分配
(1) 使用data section方法将寄存器文件分配到数据空间
(2) 数据段映射到寄存器对应的存储空间
条件编译
预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。 条件编译有三种形式,下面分别介绍:
1. 第一种形式:
#ifdef 标识符 程序段1 #else
程序段2 #endif
它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为: #ifdef 标识符
第七章 存储器的结构、映像及cmd文件的编写 总线结构为哈佛结构
什么叫分页机制?
http://www.eefocus.com/article/09-05/71862s.html
分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址。
分页机制管理的对象是固定大小的存储块,称之为页(page)。分页机制把整个线性地址空间及整个物理地址空间都看成由页组成,在线性地址空间中的任何一页,可以映射为物理地址空间中的任何一页(我们把物理空间中的一页叫做一个页面或页框(page frame))。
使用段的好处在于实现模块化编程
Cmd文件的编写:
1、注释支持:/* */但不支持//,有些关键字必须大写如SECTIONS/MEMORY 2、通过MEMORY伪指令来指示存储空间和SECTIONS分配存储空间。 格式如下:
SECTIONS {
/* Allocate program areas: */
.cinit : > FLASHA PAGE = 0 .pinit : > FLASHA, PAGE = 0 .text : > FLASHA PAGE = 0 Codestart : > BEGIN PAGE = 0 Ramfuncs : LOAD = FLASHD, RUN = RAML0,
LOAD_START (_RamfuncsLoadStart), LOAD_END (_RamfuncsLoadEnd), RUN_START (_RamfuncsRunStart), PAGE = 0
Csmpasswds : > CSM_PWL PAGE = 0 csm_rsvd : > CSM_RSVD PAGE = 0
/* allocate uninitialized data sections: */
.stack : > RAMM0 PAGE = 1 .ebss : > RAML1 PAGE = 1 .esysmem : > RAMH0 PAGE = 1
/* For SDFlash to program these, they must be allocated to page 0 */ .econst : > FLASHA PAGE = 0 .switch : > FLASHA PAGE = 0
/* allocate IQ math areas: */
IQmath : > FLASHC PAGE = 0 /* Math Code */ IQmathTables : > ROM PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */
/* .reset is a standard section used by the compiler. It contains the */ /* the address of the start of _c_int00 for C Code. /* /* When using the boot ROM this section and the CPU vector */ /* table is not needed. Thus the default type is set here to */
/* DSECT */
.reset : > RESET, PAGE = 0, TYPE = DSECT Vectors : > VECTORS PAGE = 0, TYPE = DSECT
}
烧到FLASH中时,程序运行速度将大大降低,因此希望一些对时间要求较精准的子程序在RAM中运行。
那又如何做到呢??
1、 在FLASH.CMD中划分一段来设置RAM的载入和运行地址
2、 在源文件中利用调用函数memcpy()将FLASH中的内容复制到RAM中运
行。
3、 在头文件中定义新变量
F2812片内拥有18k*16位的ram空间和128k*16位的flash空间
第八章 时钟和系统控制
1、振荡器和锁相环
时钟就像人的心跳一样,对于系统而言他是很重要的。