ucos在s3c2410上运行过程整体剖析之基础知识--ADS编译、链接器

发布者:平凡梦想最新更新时间:2017-01-19 来源: eefocus关键字:ucos  s3c2410  ADS编译  链接器 手机看文章 扫描二维码
随时随地手机看文章

我在学习嵌入式操作系统UCOS时,有很大的迷茫之处,在于我不知道我用的工具到底帮我干了些神马工作。下面就说一下我当时的疑问:

1:编译器和链接器干了些神马?我现在也还没能力知道它是怎么干的这些工作。以后慢慢来呗。但当时我连它干了神马都不清楚。

2:它输入的是源程序,那他输出的是什么?有格式吗?是什么样子那?

重重疑问。

 

ADS编译器的目的是怎么把高级语言编程能在ARM平台上直接运行的东东。

而我们的目的是看看他干了些神马,让我们了解一下它以及他链接出来的东东是什么样子。对嵌入式整个工程开发做了哪些贡献,这样我们就能更好的使用它了。是不是。

关于ARM嵌入式开发的要点和步骤请参考基于ARM的嵌入式系统程序开发要点.pdf,这里不做详细介绍。

 

UCOS运行的硬件环境是ARM芯片我们已经在芯片知识章节介绍了,那UCOS 绝大多数代码是用C语言写的,那C语言怎么变成在ARM芯片上运行的代码也是一个问题,因为我们要讲解的是UCOS在具体平台上的具体运行效果。

 

先说一下编译、链接后ARM程序的组成:

 

ARM程序的组成
 此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。
            一个ARM程序包含3部分:RO,RW和ZI
            RO是程序中的指令和常量
            RW是程序中的已初始化变量
            ZI是程序中的未初始化的变量
            由以上3点说明可以理解为:
            RO就是readonly,
            RW就是read/write,即已初始化的变量
            ZI就是zero,程序员未初始化的变量,一般默认初始化为0

(2)
        ARM映像文件的组成
            所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
            Image文件包含了RO和RW数据。
            之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
            Q:为什么Image中必须包含RO和RW?
            A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。
   (3)

    ARM程序的执行过程
            从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。
            实际上,ROM中的指令至少应该有这样的功能:
            1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。
            2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中
            在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。

也就是说经过编译器编译出来的可执行程序在内存中有两种状态,一种是刚装载到内存时的状态,即按照你写的函数调用的顺序组织成的连续的二进制代码。另一种是程序运行时的状态。但一般程序真正执行时要把我们写的程序分为代码段、数据段<包括已经初始化的变量和没有初始化的变量>。你想代码段放到内存之后,什么也不用提前做,只等着被取出执行就行。但数据段就不一样了,你想一想,数据段要有本身的属性的(初始化为具体数值或者0),那这些属性必须在程序没有执行前赋给这些变量。怎么赋予它们这些属性那,一般是由编译器产生一些专门负责这些工作的代码来完成。现在大家理解为什么说编译器编译出来的可执行程序在内存中有两种状态了吧。一个是LOAD时的状态,一个是运行时的状态。

 

我们现在知道了ADS编译出来的程序的样子了,以及编译好的代码要想真正运行还需要做的工作。但问题又出现了,我们怎么利用ADS这个工具使其产生我们所需要的代码的样子以及怎样让他变成真正运行时的样子那?

 

编译器把源文件编译成ELF的目标文件,然后经连接器最终生成.bin 文件,这种文件可以用于直接烧录到flash中。也即去除了ELF那些格式。

 

你可以通过简单地配置进行设置编译出的代码的装载地址和运行地址。你也可以用分散加载文件来实现比较复杂的内存映射。有关编译器编译出的代码的装载和运行地址的相关概念请参考:ARM开发工具ADS原理与应用的第十章。


关键字:ucos  s3c2410  ADS编译  链接器 引用地址:ucos在s3c2410上运行过程整体剖析之基础知识--ADS编译、链接器

上一篇:ucos在s3c2410上运行过程整体剖析之基础知识- ARM9芯片知识
下一篇:ucos在s3c2410上运行过程整体剖析之基础知识-c语言和堆栈

推荐阅读最新更新时间:2024-03-16 15:31

ucos-ii示例6:消息量集测试
环境: 主机:WIN8 开发环境:MDK4.72 ucgui版本:3.90 ucos版本:ucos-ii mcu: stm32f103VE 说明: 本示例中task2设置信号量集的最后2位为1,task1读取最后2位,发现是1则显示 源码: #define TASK_STK_SIZE 512 /********************************************************************* * 静态函数 *****************************************************
[单片机]
S3C2410串口波特率的计算
要正确计算串口波特率,首先要搞清楚芯片的时钟工作原理,这部分在s3c2410/s3c2440datasheet上写的比较详细,但对新手来说结合thisway同志 s3c2410完全开发流程 中的TIMER和CLOCK两个实验,边做实验边看资料,更容易理解。 我这里只根据我的失败经验谈一下设置波特率寄存器UBRDIVn的值的计算要注意的一个问题。 datasheet上UBRDIVn寄存器部分写着: UART BAUD RATE DIVISOR REGISTER There are three UART baud rate divisor registers including UBRDIV0, UBRDIV1 and UBRDIV
[单片机]
基于S3C2410处理实现3G无线网卡接入无线网络功能的设计
本研究的目的是实现一个具有3G无线网络接入功能的嵌入式系统。系统的硬件平台是基于ARM系列的S3C2410微处理器。文章简要介绍了该系统的体系结构,给出USB主机接口硬件电路。研究基于USB接口的3G无线网卡的无线网络接入功能实现,包括研究Linux USB设备驱动程序、实现USB Serial设备的驱动、定制Cramfs文件系统。最后移植和配置PPP拨号程序,实现嵌入式系统通过3G无线网卡接入无线网络的功能。 目前,嵌入式技术已广泛应用于工业控制、无线通讯、网络应用、消费类电子产品、成像和安全产品等各类产品。随着3G牌照的发放,无线网络的带宽大幅扩展,具有3G无线网络接入功能的嵌入式系统更加具有发展前景。本文将介绍中兴的AC
[单片机]
基于<font color='red'>S3C2410</font>处理<font color='red'>器</font>实现3G无线网卡接入无线网络功能的设计
关于S3C2410的存储
s3c2410的存储控制器的的主要特性如下: 1.可通过软件设置大端/小端模式. 2.分为8个bank,每个bank为128M,总共为1G. 3.每个bank的数据宽度都可以设为8/16/32bit方式(bank0除外,因为bank0要用作系统引导) 4.bank0-5支持ROM SRAM等,bank6-7支持ROM SRAM,SDRAM等等. 5.bank0-6的起始地址空间固定,bank7可变. 6.bank6-7的空间大小可以调整 7.可编程所有bank的访问时序. 8.可用外部等待模式延长访问周期. 9支持SDRAM的自刷新模式和power down模试. 其空间分配情况如下: 当从nor flash引导时,空间0
[单片机]
关于<font color='red'>S3C2410</font>的存储<font color='red'>器</font>
S3C2410简易JTAG详解
常见的JTAG cable结构都比较简单,一端是DB25,接到电脑的并口上,中间经过74HC244和一些电阻实现电平转换(5V3.3V?)(也有比较猥琐的只用了 几个100 Ohm电阻的方案),另一端的JTAG header接到目标板的JTAG interface。 并口DB25原先主要是用来连接打印机,其引脚定义如下: 25 Pin D-Sub SPP SIGNAL DIRECTION IN/OUT 1 /Strobe In/Out 2 Data 0 Out 3 Data 1 Out 4 Data 2 Out 5 Data
[单片机]
基于S3C2410的磁场测量系统的设计
1 引言 随着科技的发展,嵌入式操作系统在越来越多的领域发挥着重要的作用,目前已成为产品技术水平的标志之一。其中Linux因为其拥有开放性、多用户、多任务、良好的用户界面、丰富的网络功能、可靠的系统安全和良好的可移植等特性被广泛的应用到仪器测量设备中。    传统的磁场测量设备(持斯拉计、高斯计)普遍存在精度低(典型测量精度为1.5%)、操作不便等缺点。本文提出一种基于嵌入式Linux的中频磁场测量系统,它不但可以满足当前磁场测量数据采集的需要,还因为其嵌入了操作系统Linux,使具有可靠性好、升级方便的特点,既提高了磁场测量的准确性,又为仪器的功能升级带来便利。可应用于实验室仪器,医疗仪器,姿态控制,安全检测等需磁场检测的领域。
[单片机]
基于<font color='red'>S3C2410</font>的磁场测量系统的设计
ucos-ii示例7:内存管理测试
环境: 主机:WIN8 开发环境:MDK4.72 ucgui版本:3.90 ucos版本:ucos-ii mcu: stm32f103VE 说明: 本示例中task2请求内存分区,然后往分区内写数据,再将数据通过邮箱发送给task1 效果图: 源码: #define TASK_STK_SIZE 512 /********************************************************************* * 静态函数 **********************************************************************/ st
[单片机]
<font color='red'>ucos</font>-ii示例7:内存管理测试
基于S3C2410的TFT-LCD驱动电路设计
引言 随着电子技术的迅猛发展,具有耗电少、亮度高、体积小等特点的液晶显示器被广泛应用于嵌入式系统中。S3C2410是三星公司开发的一款以ARM920T为核心的16/32位嵌入式处理器。它主要面向手持设备以及高性价比、低功耗的应用。LTS350Q1-PE1是三星电子公司生产的一款非晶硅有源矩阵TFT-LCD,它具有功耗低、亮度高和体积小等特点,目前在嵌入式设备中应用非常广泛。 基于S3C2410,采用LTS350Q1-PE1作为显示设备可以构成一个基于嵌入式平台的液晶显示系统,如图1所示,该系统可以满足大多数嵌入式手持设备的功能要求。但是,要想S3C2410的LCD控制器可以正确有效地控制TFT-LCD,需要设计两者之间
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved