K60 启动过程分析
很高兴老师借给我一K60的开发板,趁着暑假好好鼓捣鼓捣!
有了上图的过程分析我想心里大概有个低了吧!
以下看代码:
/* CodeWarrior ARM Runtime Support Library
* Copyright �2012 Freescale Semiconductors. All rights reserved.
*
* $Date: 2013/02/08 07:14:44 $
* $Revision: 1.6 $
*/
/*
* __arm_start.c - entry-point for ARM programs
*
*/
#include <string.h>
#include <stdlib.h>
#include <runtime_configuration.h>
_EWL_BEGIN_EXTERN_C
#if SUPPORT_SEMIHOST_ARGC_ARGV
#define __MAX_CMDLINE_ARGS 10
static char *argv[__MAX_CMDLINE_ARGS] = { 0 };
#else
static char *argv[] = { 0 };
#endif
#if __GNUC__
#define __call_static_initializers __init_cpp
#endif
#if SUPPORT_SEMIHOST_ARGC_ARGV
extern int __argc_argv(int, char **);
#endif /* SUPPORT_SEMIHOST_ARGC_ARGV */
extern void __call_static_initializers(void);
extern int main(int, char **);
#ifdef __VFPV4__
extern void __fp_init(void);
#endif /* __VFPV4__ */
extern void __init_registers();
extern void __init_hardware();
extern void __init_user();
#if defined(__APCS_ROPI)
extern void __init_pic();
#endif
#if defined(__APCS_RWPI)
extern void __init_pid();
#endif
#if defined(__APCS_ROPI) || defined(__APCS_RWPI)
extern void __load_static_base();
#endif
#if defined(__SEMIHOSTING)
extern void __init_semihost(void) _EWL_WEAK;
#endif
#if SUPPORT_ROM_TO_RAM
extern void __copy_rom_sections_to_ram(void);
extern char __S_romp[];
#endif
static void zero_fill_bss(void)
{
extern char __START_BSS[];
extern char __END_BSS[];
memset(__START_BSS, 0, (__END_BSS - __START_BSS));
}
#ifndef __thumb // Thumb version
#error Thumb startup
#endif
// To keep iar debugger happy
void __iar_program_start(void) _EWL_NAKED;
void __thumb_startup(void);
void __iar_program_start()
{
__thumb_startup();
}
void __thumb_startup(void) _EWL_NAKED;
void __thumb_startup(void)
{
// Setup registers
__init_registers();
// setup hardware
__init_hardware();
#if defined(__APCS_ROPI) || defined(__APCS_RWPI)
// static base register initialization
__load_static_base();
#endif
#if defined(__APCS_RWPI)
// -pid
// setup static base for SB relative position independent data
// perform runtime relocation
__init_pid();
#endif
#if defined(__APCS_ROPI)
// -pic
// perform runtime relocation for position independent code
__init_pic();
#endif
// zero-fill the .bss section
zero_fill_bss();
#if SUPPORT_ROM_TO_RAM
if (__S_romp != 0L)
__copy_rom_sections_to_ram();
#endif
// initialize the floating-point library
#ifdef __VFPV4__
__fp_init();
#endif
// call C++ static initializers
__call_static_initializers();
// initializations before main, user specific
__init_user();
#if defined(__SEMIHOSTING)
// semihost initializations
__init_semihost();
#endif
// call main(argc, &argv)
#if SUPPORT_SEMIHOST_ARGC_ARGV
exit(main(__argc_argv(__MAX_CMDLINE_ARGS, argv), argv));
#else
exit(main(0, argv));
#endif
// should never get here
while (1);
}
_EWL_END_EXTERN_C
封尘浪用的库为 苏州大学 的库这两天一直在移植,各种问题,整体来说苏州的库还是不错的。就是资料有点少。这个暑假准备拿下K60,(鸭梨山大)好了,有时间在把学习过程与大家共享受!
同时,欢迎您来交流和共同探讨,解决这个问题。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
K60 启动过程分析的更多相关文章
- ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...
- 开机SystemServer到ActivityManagerService启动过程分析
开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /** ...
- Neutron分析(2)——neutron-server启动过程分析
neutron-server启动过程分析 1. /etc/init.d/neutron-server DAEMON=/usr/bin/neutron-server DAEMON_ARGS=" ...
- linux视频学习7(ssh, linux启动过程分析,加解压缩,java网络编程)
回顾数据库mysql的备份和恢复: show databases; user spdb1; show tables; 在mysql/bin目录下 执行备份: ./mysqldump -u root - ...
- Activity启动过程分析
Android的四大组件中除了BroadCastReceiver以外,其他三种组件都必须在AndroidManifest中注册,对于BroadCastReceiver来说,它既可以在AndroidMa ...
- Spark Streaming应用启动过程分析
本文为SparkStreaming源码剖析的第三篇,主要分析SparkStreaming启动过程. 在调用StreamingContext.start方法后,进入JobScheduler.start方 ...
- ActivityManagerService启动过程分析
之前讲Android的View的绘制原理和流程的时候,讲到过在Android调用setContentView之后,Android调用了一个prepreTravle的方法,这里面就提到了Activity ...
- Disconf源码分析之启动过程分析下(2)
接上文,下面是第二次扫描的XML配置. <bean id="disconfMgrBean2" class="com.baidu.disconf.client.Dis ...
- Service启动过程分析
Service是一种计算型组件,用于在后台执行一系列的计算任务.由于工作在后台,因此用户是无法直接感知到它的存在.Service组件和Activity组件略有不同,Activity组件只有一种运行模式 ...
随机推荐
- JS类定义方式
// 方法1 对象直接量 var obj1 = { v1 : "", get_v1 : function() { return this.v1; }, set_v1 : funct ...
- jquery 弹出登陆框,简单易懂!修改密码效果代码
在网上找了一大堆,看的眼花瞭乱,还是研究原码,自已搞出来了! ui原地址:http://jqueryui.com/dialog/#modal-form 可以把js,css下载到本地,要不然不联网的话, ...
- Linux下一个C(编程入门.h档,.c档,而路多文件的调用)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0 ...
- JS多语种方式
方案: 在不同的移动平台(IOS.Android)上,并建立了HTML页面通信框架.主要业务逻辑HTML发展:我要支持多语言开发. 动机: 通过积极主动的信息方式,前一页完成初始化,获取当前语言选项. ...
- firefox os 2.0版模拟器QQ初体验
供firefox os 爱侣.firefox os 手机迟迟没有感到些许遗憾在中国上市会,但是,我们必须相信firefox os 登陆中国是迟早的事,腾讯QQ已经登陆firefox os 应用市场,今 ...
- Eclipse工具的问题
1 Eclipse采用ctrl抄 粘贴很卡 Eclipse -- Windows->Preferences->General->Editors->Text Editors-&g ...
- iOS 中client和server的 Web Service 网络通信 (2)
在实际的应用开发过程中,同步请求的用户体验并非非常好:我们都知道.Apple是非常重视用户体验的.这一点也成为了行业的标杆,没实用户哪里来的好产品.所以用户体验是极其重要的.貌似废话有点多.接下来进入 ...
- POJ 1384 Piggy-Bank 背包DP
所谓的全然背包,就是说物品没有限制数量的. 怎么起个这么intimidating(吓人)的名字? 事实上和一般01背包没多少差别,只是数量能够无穷大,那么就能够利用一个物品累加到总容量结尾就能够了. ...
- c++ stl algorithm: std::find, std::find_if
std::find: 查找容器元素, find仅仅能查找容器元素为<基本数据类型> [cpp] view plaincopy #include <iostream> #incl ...
- 解决Fedora升级时nvidia显卡问题
升级到新版Fedora后登录不了gnome 小编最近升级了Fedora 20到21,结果就如之前从Fedora 19升级到20时类似,又出问题了.Fedora你到底行不行... gnome登录不了 ...