zoukankan      html  css  js  c++  java
  • 【AT91SAM3S】英蓓特EM-SAM3S开发板例子工程中的启动文件分析

    手上一块英倍特的EM-SAM3S开发板,拿到已经有一个月了。本来是做uLoong活动使用的板子,可当初由于不熟悉这个芯片,使用了STM32F4当作了替代。最近准备抽点时间折腾下这个板子。

    这个板子的资源如下:

    MCU:ATMEL Cortex M3 AT91SAM3S4C (主频 64MHz )

    FLASH:片内256KB,片外2Gb NandFlash

    SDRAM :片内48KB

    接口:MicroSD I/F、LCD I/F、RS232 I/F 、USB I/F、JTAG I/F、 Audio I/F 、RS485 I/F

    其他功能:RTC、LED×2、USE Button、Zigbee、QTOUCH接口、Free IO、AD

    电源:USB供电或者外接5V电源

    今天从启动开始看看。以下内容是我分析英倍特提供的例程时的产物。

    【预备知识】

    Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。

    【启动分析】

    在例子程序中,MCU启动时,会将vector中定义的第二个地址作为程序的入口地址。即Reset_Handler。

    至于为什么会从vector加载,可以查看分散加载文件(.sct)。这里有这么一段:

    Vector_region 0x400000

    {

        board_cstartup_keil.o (vectors, +FIRST)

    }

    这个声明就是让链接器将board_cstartup_keil.o加载到0x400000。

    而0x400000就是内部flash的起始地址:

    clip_image002

    board_cstartup_keil.o由board_cstartup_keil..c生成。这个文件中,定义了两个东西:__vector_table[]和static void _Reset_Handler( void )

    __vector_table就是中断向量表,__vector_table的第二个地址就是_Reset_Handler。因此,MCU启动时将向量表加载完成后,就开始执行_Reset_Handler这个函数。

    在这个函数中跳转到main函数。好了,花花丽丽的C开始了。

    (至于为什么加载到了0x400000是__vector_table而不是_Reset_Handler,那是因为那个+FIRST这个属性)

    【总结一下】

    1、在分散加载文件中,设置程序加载到的位置。加载到0x400000这个地址的,就会在启动时候执行。

    2、这里的启动文件有很简单的两个东西,中断向量表和函数_Reset_Handler。中断向量表的第二个地址就是复位中断程序入口地址。

    3、汇编文件workaround.s没用了。删掉里边的内容都没关系。于是一行汇编代码都没有了,这也算是自己写sct文件的好处吧。

  • 相关阅读:
    Educational Codeforces Round 83 --- F. AND Segments
    Educational Codeforces Round 83 --- G. Autocompletion
    SEERC 2019 A.Max or Min
    2019-2020 ICPC Southwestern European Regional Programming Contest(Gym 102501)
    Educational Codeforces Round 78 --- F. Cards
    今天我学习了一门全新的语言
    codeforces 1323D 题解(数学)
    Educational Codeforces Round 80 (Div. 2) 题解 1288A 1288B 1288C 1288D 1288E
    Educational Codeforces Round 81 (Div. 2) 题解 1295A 1295B 1295C 1295D 1295E 1295F
    Codeforces Round #617 (Div. 3) 题解 1296C 1296D 1296E 1296F
  • 原文地址:https://www.cnblogs.com/zyqgold/p/3201527.html
Copyright © 2011-2022 走看看