赞
踩
下面开始看cyg_start()
< redboot/v3_0/src/main.c>
void cyg_start(void)
(CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL)
详细说明一下
CYG_HAL_TABLE_BEGIN( __RedBoot_INIT_TAB__, RedBoot_inits );
CYG_HAL_TABLE_END( __RedBoot_INIT_TAB_END__, RedBoot_inits );
#define CYG_LABEL_DEFN(_name_) _name_
扩展后如下:
#define CYG_HAL_TABLE_BEGIN( _label, _name )
.section ".ecos.table.RedBoot_inits.begin","aw"
__RedBoot_INIT_TAB__ :
.previous
.section ".ecos.table.RedBoot_inits.finish","aw"
__RedBoot_INIT_TAB_END__
又有
typedef void void_fun(void);
typedef void_fun *void_fun_ptr;
struct init_tab_entry {
} CYG_HAL_TABLE_TYPE;
#define _RedBoot_init(_f_,_p_)
struct init_tab_entry _init_tab_##_p_##_f_
#define RedBoot_init(_f_,_p_) _RedBoot_init(_f_,_p_)
#define CYG_HAL_TABLE_QUALIFIED_ENTRY( _name, _qual ) \
#
说明运行RedBoot_init(_f_,_p_)时会把代码放到segment
.ecos.table. RedBoot_inits.data. _p_##_f_ 里面
查找RedBoot_init,结果如下:
Decompress.c (redboot\v3_0\src):RedBoot_init(_zlib_init, RedBoot_INIT_FIRST);
Fconfig.c (redboot\v3_0\src):RedBoot_init(load_flash_config, RedBoot_INIT_SECOND);
Flash.c (redboot\v3_0\src):RedBoot_init(_do_flash_init, RedBoot_INIT_FIRST);
Flash_load.c (redboot\v3_0\src):RedBoot_init(flash_load_init, RedBoot_INIT_LAST);
Ide.c (redboot\v3_0\src\fs):RedBoot_init(ide_init, RedBoot_INIT_FIRST);
Net_io.c (redboot\v3_0\src\net):RedBoot_init(net_init, RedBoot_INIT_NET);
RedBoot_init(ide_init, RedBoot_INIT_FIRST)就表示ide_init代码存放在segment:
.ecos.table. RedBoot_inits.data. 0000ide_init 里面
:: mem_segments[0].end = workspace_end;
è cyg_plf_redboot_startup()
:: 用函数RedBoot_cmd实现对命令的声明
此后就开始执行所输入命令
原文见:http://blog.sina.com.cn/s/blog_559f6ffc0100mkbi.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。