LPC1768 eCos 启动代码分析(1)系统复位

发布者:真诚的友谊最新更新时间:2021-08-27 来源: eefocus关键字:LPC1768  eCos  启动代码  系统复位 手机看文章 扫描二维码
随时随地手机看文章

要了解eCos的CortexM启动代码,需要理清下面几个文件的编译和链接关系。

packages/hal/cortexm/arch/current/src/vector.S

packages/hal/cortexm/arch/current/src/hal_misc.c

packageshalcortexmlpc17xxlpc1766stkcurrentincludepkgconfmlt_cortexm_lpc1766_rom.ldi

 mlt_cortexm_lpc1766_rom.ldi:


// eCos memory layout


#include

#include


MEMORY

{

    ram  : ORIGIN = 0x10000000, LENGTH = 0x00008000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE

    ahb_sram_bank0  : ORIGIN = 0x2007C000, LENGTH = 0x00004000

    ahb_sram_bank1  : ORIGIN = 0x20080000, LENGTH = 0x00004000

    flash : ORIGIN = 0x00000000, LENGTH = 0x00040000

}


SECTIONS

{

    SECTIONS_BEGIN

    SECTION_rom_vectors (flash, 0x00000000, LMA_EQ_VMA)

    SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA)

    SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA)

    USER_SECTION (ahb_sram0, ahb_sram_bank0, 0x2007C000 (NOLOAD), LMA_EQ_VMA)

    USER_SECTION (ahb_sram1, ahb_sram_bank1, 0x20080000 (NOLOAD), LMA_EQ_VMA)

    SECTION_data (ram, 0x10000400, FOLLOWING (.got))

    SECTION_sram (ram, ALIGN (0x8), FOLLOWING (.data))

    SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA)

    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);

    SECTIONS_END

}


hal_vsr_table = 0x10000000;

hal_virtual_vector_table = hal_vsr_table + 128*4;

hal_startup_stack = 0x10000000 + 1024*32;


packages/hal/cortexm/arch/current/src/vector.S

//==========================================================================


.syntaxunified


.thumb



//==========================================================================


//Initial exception vector table


//


//This only contains the stack and entry point for reset. The table


//to be used at runtime is constructed by code in hal_reset_vsr().



.section ".vectors","ax"



.global hal_vsr_table


hal_vsr_table_init:



.long    hal_startup_stack // 0 Reset stack


.long    hal_reset_vsr // 1 Reset entry


这里我们可以看到,hal_vsr_table_init开始的预留了8个byte,我们可以猜想这个就是系统的启动部分。


但是,要想了解eCos的启动代码,我们必须知道hal_startup_stack和hal_reset_vsr来源于何处如何设定。

//==========================================================================


观察map文件

我们通过arm-eabi-nm这样的工具把elf文件生成几个map文件看一看这些symbol的具体位置。


在命令行输入arm-eabi-nm hello


000009bc T hal_reset_vsr


10008000 A  hal_startup_stack


00000000 t  hal_vsr_table_init


00000008 A  _stext


00000008 A  __exidx_start


00000000 A  __rom_vectors_lma

00000000 A  __rom_vectors_vma


hal_reset_vsr是系统初始化的一个重要函数

hal_reset_vsr还调用了stm32变体层的初始化函数hal_system_init。


分析一下生成的binary文件

以ROM类型的二进制文件为例,使用命令行输入arm-eabi-objcopy kthread0 -O ihex kthread0.hex 把elf文件转换为二进制文件,他会默认的执行0x0000000也就是0x0800000,我们通过windows的notepad++来看这个二进制文件的前8个字节。


我们会看到


:0800000000800010610A0000FD

:10000800C432000001000000DC36000001000000DE


而之前我们通过map文件查到的


10008000 A  hal_startup_stack


000009bc T hal_reset_vsr


为什么和rickleaf说的不一样呢?


我用arm-eabi-readelf  hello 了一下, 发现输出的这个2个值还是一样的,我把程序烧录到板子里面去后,程序能正常运行


查阅lpc1768的资料发现,他的程序复位后是从0x000000处开始跑的,

关键字:LPC1768  eCos  启动代码  系统复位 引用地址:LPC1768 eCos 启动代码分析(1)系统复位

上一篇:ARM的AREA指令的使用
下一篇:LPC1788 emWin应用笔记

推荐阅读最新更新时间:2024-11-13 20:10

Cortex-M3学习LPC1768 - 按键实验
有输出总会有输入,今天测试一下按键的功能,第一节已经说过了与GPIO端口相关的寄存器,这里不在重复,想要从端口读取数据,首先把FIODIR这个寄存器设置为输入,再从 FIOPIN寄存器读取数据就可以了,这个寄存器具有读写功能。下面说一下这个实验的电路图,如下所示: 图1-1 Joystick按键连线图 这次实验没有涉及到外部中断,都是做普通的IO输入使用的,所以在这里外部中断就做学习总结了。下面给出这次实验的主程序: /********************************************************************************* 文件名称:mian.c 功
[单片机]
Cortex-M3学习<font color='red'>LPC1768</font> - 按键实验
stm32 启动代码应用技巧
前段时间对stm32的启动代码进行了一个小小的研究,发现了一些比较好用的技巧,在这分享下! 总体上说,整个启动代码就是中断初始化为主,以及中断之后如何进行调配函数! 首先看这么一段代码:Reset_Handler ; Reset handler Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SysInit IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =SysInit BLX R0
[单片机]
stm32 <font color='red'>启动</font><font color='red'>代码</font>应用技巧
STM32F103X启动代码详细分析
1. 在分析启动代码之前,先把STM32的存储结构说一下: 上面这张图来自CORTEX M3权威指南 STM32F103RTB6 有20k的SRAM,起始地址为0x20000000,128k的闪存flash,起始地址为0x08000000(处于code区域). 从主闪存存储器启动时,主闪存存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(0x08000000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x00000000或0x0800 0000。 通过boot0和boot1的配置可以选着三种启动方式: 当我们下载程序时,选着的是系统存储器启动,当我
[单片机]
STM32F103X<font color='red'>启动</font><font color='red'>代码</font>详细分析
ARM启动代码学习(一)RO和RW还有ZI代表什么?
一般而言,一个程序包括只读的代码段和可读写的数据段。在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly);可读写的全局变量和静态变量被称作RW段(ReadWrite);RW段中要被初始化为零的变量被称为ZI段(ZeroInit)。对于嵌入式系统而言,程序映象都是存储在Flash存储器等一些非易失性器件中的,而在运行时,程序中的RW段必须重新装载到可读写的RAM中。这就涉及到程序的加载时域和运行时域。简单来说,程序的加载时域就是指程序烧入Flash中的状态,运行时域是指程序执行时的状态。对于比较简单的情况,可以在ADS集成开发环境的ARM LINKER选项中指定RO BASE和RW BASE,告知连接器RO和R
[单片机]
lpc2124 启动代码详解
;/*****************************************************************************/ ;/* STARTUP.S: Startup file for Philips LPC2000 */ ;/*****************************************************************************/ ;/* Use Configuration Wizard in Context Menu */ ;/*************************
[单片机]
单片机最小系统解析(电源、晶振和复位电路)
电源 我们在学习过程中,很多指标都是直接用的概念指标,比如我们说 +5 V 代表1,GND 代表0等等。但在实际电路中的电压值并不是完全精准的,那这些指标允许范围是什么呢?随着我们所学的内容不断增多,大家要慢慢培养一种阅读数据手册的能力。 比如,我们要使用 STC89C52RC 单片机的时候,找到它的数据手册第11页,看第二项——工作电压:5.5 V~3.4 V(5 V 单片机),这个地方就说明这个单片机正常的工作电压是个范围值,只要电源 VCC 在 5.5 V~3.4 V 之间都可以正常工作,电压超过 5.5 V 是绝对不允许的,会烧坏单片机,电压如果低于 3.4 V,单片机不会损坏,但是也不能正常工作。而在这个范围内,最典型、
[单片机]
单片机最小<font color='red'>系统</font>解析(电源、晶振和<font color='red'>复位</font>电路)
STM32F4学习笔记2——时钟与复位系统
STM32F4采用了三种不同的时钟用来驱动系统时钟(SYSCLK) ·HSI振荡器时钟(内部时钟) ·HSE振荡器时钟(外部时钟) ·PLL时钟(锁相环时钟) 这些设备有以下两种二级时钟源 ·32kHz低速内部RC,可用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。 ·32.768kHz低速外部晶振也可以用来通过程序选择驱动RTC(RTCCLK)。 AHB总线最高支持168MHz的时钟,通过AHB总线分频APB2最高支持84MHz,APB1最高支持42MHz。 所有外设驱动全部来至于SYSCLK除了下面几个: ·USB OTG FS时钟48MHz,随机信
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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