zoukankan      html  css  js  c++  java
  • 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,(鸭梨山大)好了,有时间在把学习过程与大家共享受!

    同时,欢迎您来交流和共同探讨,解决这个问题。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    java内存管理之内存模型
    HTTP协议
    12 数值的整数次方
    11 二进制中1的个数+二进制补充知识点
    10 矩形覆盖
    9 变态跳台阶
    8 跳台阶
    7斐波那契数列
    6旋转数组的最小数字
    5用两个栈实现队列
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4648355.html
Copyright © 2011-2022 走看看