【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的起始地址:
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文件的好处吧。
【AT91SAM3S】英蓓特EM-SAM3S开发板例子工程中的启动文件分析的更多相关文章
- RP4412开发板烧写Ubuntu12.04失败原因分析解决
Ubuntu烧写失败可能是卡的问题 问:用RP4412开发板,卡烧了光盘中的fastboot失败,现在如何补救呢? 答:INAND格式化,利用usb来升级啊. 也有文档,看升级文档. 问:这个是怎么回 ...
- 下载uboot的调试版本到开发板的sdram中运行
开发环境:开发板:FriendlyARM Tiny6410 主机:CentOS release 6.4 (Final) 开发板与主机通过串口线连接 调试用的uboot源码为开发板光盘提供的u-boot ...
- 使用Xilinx K7 KC705开发板调试PCIe中的问题【持续更新】
开发板:Xilinx K7 KC705 软件:ISE14.7 1.由于应用需求,我们要将开发板作为主机端,通过PCIe接口转接板外接一个NVMe PCIe SSD.并由FPGA控制SSD的数据读写. ...
- 开发板和centos服务器tftp传文件
CentOS下使用TFTP向目标板传送文件http://www.linuxidc.com/Linux/2010-10/29218.htm 1.安装相关软件包 为了使主机支持TFTP,必须确保TFTP后 ...
- C#.NET常见问题(FAQ)-使用SharpDevelop开发 如何在项目中添加类文件
点击文件-新建-文件,然后再工程内创建文件 或者工程-添加-新建项 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai12 ...
- iOS开发之解决CocoaPods中“.h”头文件找不到的问题,简单粗暴的方法
如果是拖进工程中的framework或者第三方文件,如果找不到,删除了重新添加或者修改search path地址,如果不知道怎么修改,在工程文件夹中,找到对应的文件,然后将文件拖到修改文件地址的位置, ...
- 基于麒麟座开发板2.0的MQTT实现例程
链接--->https://sanwen8.cn/p/649shZ1.html OneNET现已全面适配标准MQTT协议,相信这一功能的增加会**便于开发者进行设备的接入. OneNET提供了M ...
- 第五章 搭建S3C6410开发板的测试环境
在PC上可以开发Linux驱动,重新编译成ARM架构的Linux驱动模块,但最后还是要在开发板上进行测试.目前最流行的是基于三星S3C6410 ARM11架构的开发板,很多厂商在其基础上进行了扩展,开 ...
- 搭建测试环境——针对S3C6410开发板
(一)前言 目前市面上的开发板型号和种类很多,但目前最流行的是基于三星S3C6410 ARM11架构的开发板.国内很多厂商在S3C6410 ARM11架构的开发板的基础上进行了扩展,开发了扩展板,本博 ...
随机推荐
- guava学习--hashing
128位的MurmurHash(烽火使用过): 看一下Java标准库中的非加密哈希算法你会发现少了MurmurHash,这是一个简单高效且还是分布式的算法,在许多语言中都有着很好的支持.我们并不是说要 ...
- Java:Collection List Set
Java:集合 常见集合:List Set List 特点:元素是有序的,而且元素可以重复,因为该集合体系有索引. 常见的三个子类:ArrayList.LinkedList.Verctor List集 ...
- SQL Server Profiler教程
SQL Server Profiler是SQL Server企业版自带的一个sql 语句跟踪和分析工具,功能十分强大.熟练地使用它,对我们分析数据库性能问题很有帮助,比如当数据访问使用EF等ORM框架 ...
- Web Service平台概述
Web Service平台主要涉及的技术有SOAP(Simple Object Access Protocal,简单对象访问协议), WSDL(Web Service Descriptio ...
- Regsvr32.exe 用法
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/u] [/n] [/i[:cmdline]] dllname /u - 取消注册服务器 /i - 调用 DllInstall,为 ...
- hidesBottombarWhenPushed的副作用
在UITabbarController包含的UINavigationController应用中,如果UINavigationController某一页(某个level)需要隐藏Tabbar,之前的做法 ...
- SAP常用命令及BASIS操作
Pfcg 角色,权限参数文件配置Su53 查看权限对象 st01 跟踪St22 看dump,以分析错误 eg.找到ABAP程序出错的地方,找出fou ...
- XCode6.0的iOS免证书真机测试方法(MAC及黑苹果均有效)
目前在XCode上开发的iOS程序只能在模拟器Simulator中运行,如果要放到真机上测试,需要苹果官方认证的开发者账号,购买开发者证书iDP,99美金一年啊!!! 作为刚开始学习iOS编程的菜鸟, ...
- Http协议访问DataSnap Rest 服务器
用TIDHttp访问DataSnap Rest服务器,在服务器采用了用户验证的情况下,客户端需要注意下面的细节,否则不能正常连接. 假如服务器有如下的用户验证: procedure TSC.DSAut ...
- php中json_encode UTF-8中文乱码问题
最近在接口代码当中用到过json_encode,在网上找到说json_encode编码设置为UTF-8中文就不会乱码,经验证这办法确实是有效果的,但是不知道为什么,代码在用过一段时间之后就不太管用了. ...