1 / 26

第六讲 系统初始化

第六讲 系统初始化. 学习内容. 一、数据初始化 汇编程序的数据初始化 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

sahara
Download Presentation

第六讲 系统初始化

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六讲 系统初始化 第六讲 系统初始化

  2. 学习内容 一、数据初始化 • 汇编程序的数据初始化 • C程序的数据初始化 二、程序复位 • 汇编程序的复位 • C程序的复位 第六讲 系统初始化

  3. 一、数据初始化 汇编程序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 第六讲 系统初始化

  4. 数据初始化方法 1. 调试器加载程序(loader)自动完成 2. 人工初始化-在应用程序前插入数据初始化程序段 MVK MVKH STW 3. 拷贝法 数据从ROM拷贝到RAM 第六讲 系统初始化

  5. 1、用Loader完成数据初始化 程序开发阶段使用, 不适用于嵌入式系统 · 用.short,.word等汇编指令生成变量及其初始值 · 连接器为这些变量分配地址 · 调试器从.out文件中读取变量初值,通过主机接口,放入目标存储器中相应的变量地址 第六讲 系统初始化

  6. .sect "myData" m .short 10 x .short 5 b .short 2 y .short 0 MVK m, A0 MVKH m, A0 STH 10, *A0 . . . 缺点: 每个数据的初始化要用 三条指令,占用很大程序空间 2、人工初始化-在应用程序前插入数据初始化程序段 第六讲 系统初始化

  7. 存储器 “init_code” 数据初始化代码 “code”应用程序 ROM MVK MVKH ST “dat” 数据变量 RAM 人工初始化法原理 第六讲 系统初始化

  8. 3、拷贝法 变量声明 数据初始化 算法代码 第六讲 系统初始化

  9. 变量初值 变量 拷贝法原理 在嵌入式系统内,变量 初值必须存放在ROM内 第六讲 系统初始化

  10. 三种方法比较 • Loader法:只适用于系统开发阶段,不能用于独立的嵌入式系统 • 人工初始化法:占用程序存储空间大 • 拷贝法:最优 第六讲 系统初始化

  11. 拷贝法使用步骤 1. 常量定义 2. 定义变量 3. 变量初始化 4. 数据段分配:在连接器命令文件内做*.cmd 第六讲 系统初始化

  12. 第一步:常量定义 伪指令.int,.short, .byte 第六讲 系统初始化

  13. 第二步:变量定义 用于定义用户的未初始化数据段 第六讲 系统初始化

  14. 汇编代码-ROM 数据常量-ROM 数据变量-RAM 变量也可以定义在默认段.bss内 .bss var, 2 汇编器产生的三个默认段 第六讲 系统初始化

  15. table 变量初值表首地址 m 需要初始化的变量首地址 应用程序开始地址 第三步:变量初始化-循环拷贝 第六讲 系统初始化

  16. 第四步:数据段分配 第六讲 系统初始化

  17. ! C编译器自动完成 变量声明 数据初始化 BOOT.C-C编译器初始化程序 连接器选项-c 或-cr + rts6201.lib 则连接器会自动连接BOOT.C 算法代码 C程序内的数据初始化 第六讲 系统初始化

  18. C编译器产生的默认段 第六讲 系统初始化

  19. C初始化所用到的段 • C编译器所产生的两个默认段 • 变量初值(常量) “.cinit” • 变量 “.bss” 记住在连接器命令 文件内分配地址! 第六讲 系统初始化

  20. 二、程序复位- C62xx复位向量 0 1 应用程序 2 第六讲 系统初始化

  21. 汇编程序复位 第六讲 系统初始化

  22. 复位程序 .sect “vectors” label B .S1 start nop nop nop nop nop nop nop Start-应用程序开始地址 跳转指令有5个延迟间隙 复位向量必须占满一个取指包 第六讲 系统初始化

  23. 复位代码必须放在0地址 连接器命令文件 第六讲 系统初始化

  24. C程序的复位 • 复位向量必须调用BOOT.C b .s1 _c_int00 nop 5 • 连接时必须加入运行支持库,并使用选项-c或-cr: -l rts6201.lib 第六讲 系统初始化

  25. C代码的复位程序 .sect “vectors” reset: B .S1 _c_int00 nop nop nop nop nop nop nop 第六讲 系统初始化

  26. 连接器命令文件 应用程序 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地址 第六讲 系统初始化

More Related