260 likes | 413 Views
第六讲 系统初始化. 学习内容. 一、数据初始化 汇编程序的数据初始化 C 程序的数据初始化 二、程序复位 汇编程序的复位 C 程序的复位. 一、数据初始化. 汇编程序 y=mx+b. .sect "myData" m .short 10 x .short 5 b .short 2 y .short 0. RAM 内的变量 m, x, b, y 如何初始化?. .sect "myCode" init: mvk .s1 m,A0 mvkh .s1 m,A0 . . b $ ; endless loop
E N D
第六讲 系统初始化 第六讲 系统初始化
学习内容 一、数据初始化 • 汇编程序的数据初始化 • C程序的数据初始化 二、程序复位 • 汇编程序的复位 • C程序的复位 第六讲 系统初始化
一、数据初始化 汇编程序y=mx+b .sect "myData" m .short 10 x .short 5 b .short 2 y .short 0 RAM内的变量 m, x, b, y 如何初始化? .sect "myCode" init: mvk .s1 m,A0 mvkh .s1 m,A0 . . b $ ; endless loop nop 5 第六讲 系统初始化
数据初始化方法 1. 调试器加载程序(loader)自动完成 2. 人工初始化-在应用程序前插入数据初始化程序段 MVK MVKH STW 3. 拷贝法 数据从ROM拷贝到RAM 第六讲 系统初始化
1、用Loader完成数据初始化 程序开发阶段使用, 不适用于嵌入式系统 · 用.short,.word等汇编指令生成变量及其初始值 · 连接器为这些变量分配地址 · 调试器从.out文件中读取变量初值,通过主机接口,放入目标存储器中相应的变量地址 第六讲 系统初始化
.sect "myData" m .short 10 x .short 5 b .short 2 y .short 0 MVK m, A0 MVKH m, A0 STH 10, *A0 . . . 缺点: 每个数据的初始化要用 三条指令,占用很大程序空间 2、人工初始化-在应用程序前插入数据初始化程序段 第六讲 系统初始化
存储器 “init_code” 数据初始化代码 “code”应用程序 ROM MVK MVKH ST “dat” 数据变量 RAM 人工初始化法原理 第六讲 系统初始化
3、拷贝法 变量声明 数据初始化 算法代码 第六讲 系统初始化
变量初值 变量 拷贝法原理 在嵌入式系统内,变量 初值必须存放在ROM内 第六讲 系统初始化
三种方法比较 • Loader法:只适用于系统开发阶段,不能用于独立的嵌入式系统 • 人工初始化法:占用程序存储空间大 • 拷贝法:最优 第六讲 系统初始化
拷贝法使用步骤 1. 常量定义 2. 定义变量 3. 变量初始化 4. 数据段分配:在连接器命令文件内做*.cmd 第六讲 系统初始化
第一步:常量定义 伪指令.int,.short, .byte 第六讲 系统初始化
第二步:变量定义 用于定义用户的未初始化数据段 第六讲 系统初始化
汇编代码-ROM 数据常量-ROM 数据变量-RAM 变量也可以定义在默认段.bss内 .bss var, 2 汇编器产生的三个默认段 第六讲 系统初始化
table 变量初值表首地址 m 需要初始化的变量首地址 应用程序开始地址 第三步:变量初始化-循环拷贝 第六讲 系统初始化
第四步:数据段分配 第六讲 系统初始化
! C编译器自动完成 变量声明 数据初始化 BOOT.C-C编译器初始化程序 连接器选项-c 或-cr + rts6201.lib 则连接器会自动连接BOOT.C 算法代码 C程序内的数据初始化 第六讲 系统初始化
C编译器产生的默认段 第六讲 系统初始化
C初始化所用到的段 • C编译器所产生的两个默认段 • 变量初值(常量) “.cinit” • 变量 “.bss” 记住在连接器命令 文件内分配地址! 第六讲 系统初始化
二、程序复位- C62xx复位向量 0 1 应用程序 2 第六讲 系统初始化
汇编程序复位 第六讲 系统初始化
复位程序 .sect “vectors” label B .S1 start nop nop nop nop nop nop nop Start-应用程序开始地址 跳转指令有5个延迟间隙 复位向量必须占满一个取指包 第六讲 系统初始化
复位代码必须放在0地址 连接器命令文件 第六讲 系统初始化
C程序的复位 • 复位向量必须调用BOOT.C b .s1 _c_int00 nop 5 • 连接时必须加入运行支持库,并使用选项-c或-cr: -l rts6201.lib 第六讲 系统初始化
C代码的复位程序 .sect “vectors” reset: B .S1 _c_int00 nop nop nop nop nop nop nop 第六讲 系统初始化
连接器命令文件 应用程序 c_file.obj vectors.obj -o c_file.out -m c_file.map -c -l rts6201.lib MEMORY { VECS: org = 0 , len = 200h EPROM: org = 200h , len = 600h SBSRAM: o = 80000000h, l = 4000h } SECTIONS { .vectors:> VECS .text:> EPROM .const:> EPROM .cinit:> EPROM .bss:> SBSRAM .stack:> SBSRAM .sysmem:> SBSRAM } 复位程序 复位代码必须放在0地址 第六讲 系统初始化