Keil基础知识

合集下载

51单片机及C语言入门教程

51单片机及C语言入门教程

51单片机及C语言入门教程本教程将介绍51单片机及C语言的入门知识,帮助初学者快速掌握这两个方面的基本内容。

以下是本教程的详细内容:一、51单片机概述(200字)51单片机是由Intel公司推出的一种常见的单片机芯片,具有广泛应用的特点。

它采用了Harvard结构,具有8位数据总线和16位地址总线。

其主要特点是结构简单、易于学习、应用广泛,适用于各种嵌入式系统。

二、C语言基础(300字)C语言是一种高级编程语言,具有跨平台、可移植性强等特点,被广泛应用于各种软件开发和嵌入式系统中。

学习C语言的基础知识是学习51单片机编程的必要前提。

C语言基础知识主要包括数据类型、变量、常量、运算符、表达式、流程控制语句等内容。

这些知识是学习C语言和51单片机编程的基础,需要仔细理解和掌握。

三、51单片机编程入门(400字)1. 搭建开发环境:首先需要安装51单片机的开发工具,如KeilC51等。

然后,连接单片机开发板和电脑,确保硬件连接正确。

2.了解开发板:学习使用51单片机的开发板是学习51单片机编程的第一步。

具体包括开发板上各个接口的功能和使用方法。

3.编写第一个程序:根据教材或教程,编写第一个简单的程序,如让LED灯闪烁等。

学习如何通过C语言编写程序,将其烧录到单片机中,并运行和调试。

四、C语言与51单片机的应用(300字)在学习了C语言和51单片机的基础知识之后,可以进一步学习它们的应用。

1.输入输出操作:学习如何通过51单片机与外部设备进行输入输出操作,如控制LED灯的亮灭、读取按键输入等。

2.定时器和中断:学习如何使用51单片机的定时器和中断功能来实现定时任务和外部事件处理。

3.串口通信:学习如何通过51单片机的串口通信功能与其他设备进行数据交换和通信。

五、实例项目及拓展应用(200字)完成了基础学习后,可以尝试一些实例项目,如温度测量系统、遥控器、电子钟等。

同时,可以进一步学习其他相关知识,如LCD显示、SPI 通信等,以扩展自己的应用能力。

keil_protues介绍

keil_protues介绍
VSM是一个基于ProSPICE混合模型仿 是一个基于ProSPICE Proteus VSM是一个基于ProSPICE混合模型仿 真器的,完整的嵌入式系统软、 真器的,完整的嵌入式系统软、硬件设计仿 真平台 。 单片机系统的仿真是 VSM的主要特色 的主要特色。 单片机系统的仿真是PROTEUS VSM的主要特色。 用户可在Proteus中直接编辑、编译、 Proteus中直接编辑 用户可在Proteus中直接编辑、编译、调试代 并直观地看到仿真结果。 码,并直观地看到仿真结果。 CPU模型有ARM7(LPC21xx)、PIC、 模型有ARM7 )、PIC CPU模型有ARM7(LPC21xx)、PIC、Atmel AVR、 HCXX以及8051/8052系列 以及8051/8052系列。 AVR、Motorola HCXX以及8051/8052系列。 同时模型库中包含了LED/LCD显示 键盘、 显示、 同时模型库中包含了LED/LCD显示、键盘、按 开关、常用电机等通用外围设备。 钮、开关、常用电机等通用外围设备。
(7)生成HEX文件 生成HEX文件
转到Output选项页, 是选择编译输出的路径, 转到Output选项页,1是选择编译输出的路径,2是 Output选项页 设置生成的文件名,3是决定是否要创建HEX文件。 设置生成的文件名, 是决定是否要创建HEX文件。 HEX文件
二、Proteus 的使用
Proteus是一个虚拟实验室, Proteus是一个虚拟实验室, 是一个虚拟实验室 提供了大量的虚拟仪器、 提供了大量的虚拟仪器、仪 激励源和分析工具: 表、激励源和分析工具: 13类激励源 13类激励源 直流、正弦、脉冲…… 直流、正弦、脉冲 13类曲线图表 13类曲线图表 模拟、数字、频率…… 模拟、数字、频率 12类虚拟仪器 12类虚拟仪器 示波器、逻辑分析仪、 示波器、逻辑分析仪、 调试器…… SPI/I2C调试器 电压/ 电压/电流探针

手把手教你学51单片机(C语言)

手把手教你学51单片机(C语言)




C-51的数据类型扩充定义
sfr:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位声明 bit:位变量声明 例:sfr SCON = 0X98; sfr16 T2 = 0xCC; sbit OV = PSW^2;

C-51的包含的头文件
通常有:reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h reg52.h (定义特殊功能寄存器和位寄存器); math.h (定义常用数学运算);
总线(BUS)是计算机各部件之间传送信息 的公共通道。微机中有内部总线和外部总 线两类。内部总线是CPU内部之间的连线。 外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DB(Data Bus), 地址总线 AB(Address Bus)和 控制总线 CBControl Bus)。
80C51的引脚封装
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST/VPD P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD XTAL2 XTAL1 VSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA/VPP ALE/PROG PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 RST P3.0/RXD P3.1/TXD XTAL2 XTAL1 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 GND 1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 11 VCC P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1/AIN1 P1.0/AIN0 P3.7

第二讲 单片机仿真调试及Keil51集成开发环境

第二讲 单片机仿真调试及Keil51集成开发环境

单 片机仿真 调试 的一般过 程
单 片机应用系统( 或产品 ) 的开发不同于一般 电子产品 这 是 因为一个成熟 的单片机应用系统是 由软硬件综舍成 的, 二者 相辅相成 , 缺一不可 可 以这样形容软件和硬件两者之 间的关 系, 硬件 是系统的 载体” 而软件则是使 “ , 载体 产生动 力的发
起的 .而这些子程序往往是通用 的, 如键盘 、显示 、 通信等 等。 将这些 子程序通 过不 同的主程序灵活地组 织起来 ,便可
构完全相同 . 但如果软件 编写不 同, 那幺表现出来的结果就会 迥然相异。所以才说在一个单 片机应用系统中 ,硬件是基础 ,

构成多个功能完 全不 同的应用系统 。因此 . 不断在实践 中总结

机仿真调试的念, 下面就简要介绍一下单片机仿真调试的过
程。
段程序 ,可 以灵活 自如地通过单 片机的 1 0口控制一组发 /
我们知道 , 成熟 的单片机应用系统应包含硬件和软 件 一个
的设计 硬件设计 是整个系统的基础和基石 . 它包含诸多方面
行 指 令 M V O
光二极管 ,但 要你同样通过这几个 端 口去控制一组发动机或 方法退出待机方式 这样极大地节省 了功耗 , 特别适 合在便携
电机。如何理解呢?也许有的电子爱好者早已发现 , 同样两片
以单片机为核心的电路 , 所采用 的元器件也 完全相 同, 但功能 却大相径庭。之所 以这样 就是因为果用了单片机 单 片机英 文直为译微处理器 ( c 0 lr. Mi n k ) 即它是处理器而不是 具有 某 种固定 功能 的集成 电路 同型号的两蚨单片机内部硬件结
在会控制一组发光二报管 ,能编写 一个简单 的程序让 C U奏 P 出一段音乐。 如何才能真正学好单片机呢? 单片机应 用技 术讲 座就是要解决这个问题。本讲座主要从 实践” “ 用” 和 实 的角

C51单片机编程基本知识

C51单片机编程基本知识

C51单片机编程基本知识全文选段:该控制指令将C文件编译生成汇编文件(.SRC),该汇编文件可改名后,生成汇编.ASM文件,再用A51进行编译。

第三节 Keil C51软件包中的通用文件在C51\LiB目录下有几个C源文件,这几个C源文件有非常重要的作用,对它们稍事修改,就可以用在自己的专用系统中。

1. 动态内存分配init_mem.C:此文件是初始化动态内存区的程序源代码。

它可以指定动态内存的位置及大小,只有使用了init_mem( )才可以调回其它函数,诸如malloc calloc,realloc等。

calloc.c:此文件是给数组分配内存的源代码,它可以指定单位数据类型及该单元数目。

malloc.c:此文件是malloc的源代码,分配一段固定大小的内存。

realloc.c:此文件是realloc.c源代码,其功能是调整当前分配动态内存的大小。

全文内容:本章讨论以下内容:l 绝对地址访问l C与汇编的接口l C51软件包中的通用文件l 段名转换与程序优化第一节绝对地址访问C51提供了三种访问绝对地址的方法:1. 绝对宏:在程序中,用“#include〈absacc.h〉”即可使用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD具体使用可看一看absacc.h便知例如:rval=CBYTE[0x0002];指向程序存贮器的0002h地址rval=XWORD [0x0002];指向外RAM的0004h地址2. _at_关键字直接在数据定义后加上_at_ const即可,但是注意:(1)绝对变量不能被初使化;(2)bit型函数及变量不能用_at_指定。

例如:idata struct link list _at_ 0x40;指定list结构从40h开始。

xdata char text[25b] _at_0xE000;指定text数组从0E000H开始提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧在嵌入式系统开发中,串口调试是一项非常重要的技术。

Keil软件是一个广泛应用于嵌入式系统开发的软件平台,通过其内置的串口调试助手,我们可以方便地进行仿真的串口调试。

本文将介绍如何使用串口调试助手Keil软件仿真的串口调试技巧。

1. 了解串口基础知识在开始使用串口调试助手之前,首先需要了解一些串口的基础知识。

串口通信是一种通过串行传输数据的通信方式,常用的串口通信标准有RS232、RS485等。

了解波特率、数据位、停止位、校验位等串口通信参数的含义和选择是必要的。

2. 配置串口参数打开Keil软件后,选择对应的工程文件,并进入工程配置页面。

在这里,我们可以找到串口调试助手的配置选项。

根据实际需求,设置串口通信的参数,如波特率、数据位、停止位、校验位等。

确保与目标设备的串口参数一致,才能正常进行串口通信。

3. 编写串口发送与接收代码在代码中,我们需要编写串口发送和接收的相关代码。

通过Keil软件提供的API函数,我们可以方便地实现数据的发送和接收。

在发送数据时,需要将数据写入到相应的寄存器,以便传输到串口。

而在接收数据时,需要从寄存器中读取数据。

通过合理设计代码,可以实现稳定可靠的串口通信。

4. 仿真运行程序完成代码编写后,我们可以进行仿真运行,以验证串口调试功能的正确性。

在Keil软件中,可以选择进行单步调试、断点调试或连续运行调试。

通过监视寄存器的值变化、观察串口发送与接收的数据情况,可以帮助我们进行串口调试。

5. 使用串口调试助手测试在完成仿真运行后,我们可以使用串口调试助手进行测试。

打开串口调试助手,并选择与目标设备串口参数一致的配置。

点击打开串口,即可开始接收串口发送的数据。

通过观察串口调试助手输出的数据,可以验证串口通信的正确性。

6. 调试技巧与注意事项在使用串口调试助手Keil软件进行串口调试时,还需要注意一些调试技巧与注意事项。

首先,确保串口连接正确可靠,避免松动或接触不良导致数据传输错误。

keil实验心得体会

keil实验心得体会

keil实验心得体会通过这次keil实习,我不仅加深了对keil理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。

作为一名自动化专业的快大三学生,我觉得做keil实习是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力,如何把我们所学的专业基础课理论知识运用到实践中去,我想做类似实习就为我们提供了良好的实践平台学习keil没有捷径,不能指望两三天就学会,要坚持不懈,重在积累keil是一门应用性和实践性很强的学科,要多动手,多做实验。

(4)要学会参考别人的程序,减少自己琢磨的时间,迅速提高自己的编程能力。

(5)碰到问题可以借助网络来搜寻答案和对自己有帮助的问题,一定会有所收获。

(6)小组要团结,小组之间要多交流。

技术是靠不断的积累和交流才会进步的,封闭自守只会更加落后通过这次keil设计N也唤黾由盍硕缘テ机理论的理解=理论很好地应用到实际当中去M时也使我认识到自身存在的不足之处N蘼凼抢砺凵匣故怯龅轿侍獾拇理能力上都还有待提高6且这也激发了我今后努力学习的兴趣。

发现问题、提出问题、分析问题、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。

1、不管做什么事,计划是很重要的。

没有一个完好的计划,做事情就会没有一个好的顺序,做事情会比较乱,很难成功。

而有一个好的计划,不管做什么事都会事半功倍,做事心中有数,明确重点和缓急,不会有疏漏。

这样才能提高成功率。

2、做事要多动脑,选出最好的方法。

一件事往往有多种解决方法,一个好的方法,不仅能使事情事半功倍,而且往往决定最后的成与败,所以做事时一定要多动一下脑筋,想出最好的方法。

3、要注意细节。

细节决定成败,这句话在这次课题中不仅一次得到了印证,特别是在软件的编程过程中,一点点的错误就会使你整个程序不能运行。

单片机考试知识点

单片机考试知识点

单片机考试知识点一、单片机基础知识1. 单片机的定义和分类- 单片机是一种微型计算机,包含中央处理器、存储器和输入输出接口。

- 常见的单片机有8051系列、PIC系列、AVR系列等。

2. 单片机的主要特点- 内部完整的计算机系统,包括CPU、存储器和I/O接口。

- 使用单一的芯片实现功能,体积小、功耗低。

- 简化电路设计和制造工艺。

二、单片机开发环境1. 开发软件- 常见的单片机开发软件有Keil、CCS等。

2. 开发工具- 下载工具:JTAG、ISP等。

- 编程器:TL866、ST-Link等。

3. 开发板- 常见的开发板有STC89C52、Arduino、Raspberry Pi等。

三、单片机的主要功能模块1. GPIO口- 用于实现与外部器件的数据交互。

2. 定时器/计数器- 用于生成各种定时、计数和PWM信号。

3. 中断系统- 用于处理外部事件的中断请求。

4. 串行通信接口- 包括UART、SPI、I2C等。

5. 存储器- 包括RAM和ROM。

四、单片机的编程语言1. 汇编语言- 以汇编指令为主要编程方式。

2. C语言- 以高级语言为主要编程方式,利用编译器将C语言转换为机器语言。

五、单片机实例应用1. LED控制- 使用GPIO控制LED的亮灭。

2. 温度传感器- 使用温度传感器获取环境温度。

3. 超声波测距- 利用超声波模块实现距离测量。

4. 无人机控制- 利用单片机控制无人机的姿态和飞行。

六、单片机考试注意事项1. 熟练掌握单片机的基础知识和常见功能模块的原理和应用。

2. 多进行实际操作,掌握单片机的编程技巧和调试方法。

3. 注意阅读题目要求,细心审题,避免出现低级错误。

4. 在考试中注重时间分配,合理安排答题顺序。

综上所述,单片机作为一种微型计算机,在嵌入式系统中有着广泛的应用。

掌握单片机的基础知识、开发环境以及常见功能模块的原理和应用是加深对单片机理解的关键。

在考试中,需注重综合应用能力的培养,同时要注意时间分配和题目细节的处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RW_RAM1 0x32000000 0x08000000 { ; RW data .ANY (+RW +ZI)
} }
2.1 Scatter file 语法
Scatter file (加载描述文件)用于指定映像文件内部各区域的装载域与运行域的位置。 arm 连接器将会根据 scatter file 生成一些区域相关的符号,他们是全局的供用户建立运行时 环境时使用。
... } }
2.1.1 加载域:
Load_region_name: 加载时域名称,最大 31 个 ASCII 字符,只用于标识一个加载时域; Base_designator: 本加载时域的起始地址,它有两种形式: 1 )base_address:本加载时域中的对象在连接时的起始地址,必须字对齐; 2 )+offset :本加载时域中的对象在连接时的起始地址是在前一个加载时域的结束地 址后偏移 offset(字节)处。 attribute_list: 本加载时域的属性,可选项;属性包括:PI,OVERLAY,ABSOLUTE,FIXED,UNINIT。 PI: 位置独立。与位置无关的代码 OVERLAY: 覆盖。只执行一次的代码,可以指示被覆盖
2.1.3 输入段
module_select_pattern:选择的模块名称(目标文件,库文件成员,库文件),模块 名可以使用通配符(*匹配任意多个字符,?匹配任意一个字符),名称不区分字母 大小写,如:
- disp*.o (+RO):匹配所有以 disp 开始的.o 目标文件作为输入段; - *pmic.lib(+RW):匹配所有以 pmic 结束的.lib 文件作为输入段; - .ANY(+ZI):匹配所有前面未匹配到的输入段,并指定连接器自行安排该输入段的 位置; 每一个模块都有自己的属性,一个用逗号分割的模式列表跟随在,模块名后面。该列表 中的每个模式定义了输入段名称或输入段属性的匹配方式: input_section_attr:按属性加载。输入段属性选择,表示该链接文件中,具有某种
属性的部分内容。 input_section_attr: 每个 input_section_attr 必须跟随在“+”后;且大小写不敏感; RO-CODE 或 CODE RO-DATA 或 CONST RO 或 TEXT 同时包含 RO-CODE 和 RO-DATA RW-DATA RW-CODE
RW 或 DATA 同时包含 RW-CODE 和 RW-DATA ZI 或 BSS ENTRY 说明在当前段中存在入口点. 还有两个伪属性: FIRST,如果各段的先后顺序比较重要时,可以使用 FIRST 标示一个执行区域的第一个 段。 LAST,如果各段的先后顺序比较重要时,可以使用 LAST 标示一个执行区域的最后一 个段。 例 1:os_main_init.o (INIT , FIRST) FIRST 表示放于本执行区域的开始处。 例 2:*libtx.a ( RO) RO 表示*libtx.a 的只读部分。 input_section_pattern:按段名称加载,通常为汇编代码某个区域,前面不用“+”,
用于声明某个链接文件中的特定段。 例 1:os_main_init.o (INIT , FIRST) 只包含 os_main_init.o 文件中的 INIT 段,而且需要放到最前面。 例 2:os_stackheap.o (heap) 只包含 os_stackheap.o 中的 heap 段。
2.1.4 分段加载
Scatter File 实际上是一个具有简单语法规则的文本文件,可以用来描述 ARM 连接器生 成映像文件时所需的信息:
各个加载时域的加载地址、最大尺寸和属性; 从每个加载时域中分割出的运行时域; 各个运行时域的起始地址、最大尺寸和属性; 各个运行时域存储访问特性; 各个运行时域中包含的输入段; 典型的 Scatter File 构成如下图所示(以一个加载时域为例): Load_region_name Base_designator [attribute_list] [max_size] {
因此对于嵌入式系统来说 scatter file 是必不可少的,因为嵌入式系统采用了 ROM, RAM,和内存映射的 IO。
6、存储器容量不足
2.1.5 分段加载的方法
在 KEIL4 中配置分段加载方法: 就是不选择 Use Memory Layout from Target Dialog,然后指定一个 Scatter File,点击 Edit 按 钮,编辑文件,如下图所示:
2.1.6 分段加载的输出
编译后 keil 会以加载域为单位输出多个文件,而且文件会放进一个文件夹中,如图所示: 例如,uart 文件夹中会出现 2 个文件。 为了实现这一目的,须在 USER 选项中添加命令如下:
如图所示,输出应为文件夹。 如下图所示,文件内容表示,将 2440init.s 的文件代码放到第一个装载域 0x0 的地方,将 uart.o 的代码放到第二个装载域 0x4800 的地址,将变量放到 RAM 装载域 0x30008000 的地址。
Keil 基础知识
同为嵌入式培训中心 作者:古志东 版本:V0.1
时间:2013/8/25
1、ARM 镜像文件结构
ARM 镜像文件的结构如下图所示: ARM 映像文件各组成部分在存储系统中的地址有两种: 一种是映像文件在运行之前,位于存储器中时的地址,称之为加载地址; 一种是映像文件在运行时,位于存储器中的地址,称之为运行地址。 之所以有这两种地址,是因为映像文件在运行时,其中的有些域是可以移动的新的存储 区域。比如,已经初始化的 RW 属性的数据所在的段运行之前可能保存系统的 ROM 中,在 运行时,他被移动至 RAM 中。 一个映像文件,如我们将一个工程编译最终输出 bin 文件。这时我们将 bin 文件下载, 下载地址被称为加载域,当程序要真正运行时还需要将加载域中的数据或代码进行搬移,这 是会出现多个运行域。通常情况下有一个加载域,多个运行域,如下图所示。但是一个完整 的镜像文件实际上可以包括有一个或多个加载域,一个或多个运行域,每个域包含一个或多 个输出段,每个输出段包含一个或多个输入段,各输入段中包含了目标文件中的代码和数 据。
说明:*(InRoot$$Sections)段为 keil 库的一段声明,必须包含在第一个执行域中,其中包含 了一段数据搬移指令,可是选数据段的搬移
通常情况下一个镜像文件只有一个加载域,部分情况下需要将镜像文件进行分散加载。 如下图所示:
下面介绍需要分散加载的情况: 1、存在复杂的地址映射:例如代码和数据需要分开放在在多个区域。 2、存在多种存储器类型:例如包含 Flash,ROM,SDRAM,快速 SRAM。我们根据代码与 数据的特性把他们放在不同的存储器中,比如中断处理部分放在快速 SRAM 内部来提高响 应速度,而把不常用到的代码放到速度比较慢的 Flash 内。 3、函数的地址固定定位:可以利用 Scatter file 实现把某个函数放在固定地址,而不管 其应用程序是否已经改变或重新编译。 4、利用符号确定堆与栈: 5、内存映射的 IO:采用 scatter file 可以实现把某个数据段放在精确的地指处。
如下图所示:
通常,一个映像文件包含若干个域,各域又包含若干的输出段。ARM 连接器需要知道 如下的信息,已决定如何生成相应的映像文件。
**分组信息 决定如何将每个输入段组织成相应的输出段和域。 **定位信息 决定每个域在存储空间地址中的起始地址。 根据映像文件中地址映射的复杂程度,有两种方法来告诉 arm 连接器这些相关信息。 对于映像文件中地址映射关系比较简单的情况,可以使用命令行选项;对于映像文件中地址 映射关系比较复杂的情况,可以使用一个配置文件,这就是 keil 的 scatter file。
Exec_region1_name Base_designator [attribute_list] [max_size] {
module_select_pattern(input_section_attr,input_section_pattern) } Exec_region2_name Base_ห้องสมุดไป่ตู้esignator [attribute_list] [max_size] {
的。 域: 一个域中包含 1-3 个输出段,其中个输出段的属性各不相同。各输出段的排列顺序是由
其属性决定的。其中 RO 属性的输出段排在最前面,其次是 RW 属性的输出段,最后是 ZI 属性的输出段。一个域通常映射到一个物理存储器上,如 ROM 或 RAM。
在一个简单的嵌入式计算机系统中,存储器一般被分成 ROM 和 RAM。连接器生成的 映像被分成“Read -Only”段(包含代码和只读数据)和“Read-Write ”段(包含已初始数 据和未初始化数据,未初始化数据也叫 ZI 数据)。通常,在程序下载(烧入)的时候,它 们会被一块下载到 ROM 上;而在程序开始执行时,Read-Write 段会从 ROM 被 Copy 到 RAM。
2、加载文件
加载文件(即 scatter file 后缀为.sct)是一个文本文件,当工程被成功编译之后,会生 成一个加载文件,里面详细记录了每个加载域、运行域的地址和内容。例:
LR_ROM1 0x30000000 0x02000000 { ; load region size_region ER_ROM1 0x30000000 0x02000000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) }
输入段: 输入段中包含了四类内容:代码、已经初始化的数据、未经初始化的存储区域、内容初 始化成 0 的存储区域。每个输入段有相应的属性,可以为只读的(RO)、可读写的(RW) 以及初始化成 0 的(ZI)。ARM 连接器根据每个输入段的属性将这些输入段分组,再组成不 同的输出段及域。 输出段: 一个输出段中包含了一系列的具有相同的 RO、RW 和 ZI 属性的输入段。输出段的属性 与其中包含的输入段的属性相同。在一个输出段的内部,各输入段是按照一定的规则排序
相关文档
最新文档