vxworks初始化流程代码分析

上传人:小** 文档编号:89127938 上传时间:2019-05-19 格式:DOC 页数:3 大小:22.50KB
返回 下载 相关 举报
vxworks初始化流程代码分析_第1页
第1页 / 共3页
vxworks初始化流程代码分析_第2页
第2页 / 共3页
vxworks初始化流程代码分析_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《vxworks初始化流程代码分析》由会员分享,可在线阅读,更多相关《vxworks初始化流程代码分析(3页珍藏版)》请在金锄头文库上搜索。

1、VxWorks映像(RAM)初始化流程代码分析Bootrom的部分目前不分析0xfff00100- Bootrom初始化必要的硬件,关闭中断,把VxWorks映像板移到RAM_LOW_ADRS指定的地址入口: RAM_LOW_ADRSsysAlib.s/sysInit清寄存器,初始化OR BR 跳转到usrInit函数/proj/projectxx/prjConfig.c/usrInit函数描述首先调用sysStart函数清除bss段和设置中断向量表基地址。/comps/src/usrstartup.c/sysStart函数void sysStart (startType)#ifdefCLEA

2、R_BSS /CLEAR_BSS宏在VxWorks的kernel Components中配置bzero (edata, end - edata);/清除bss段 ,edata和end符号见link.ram文件#endif#if (CPU_FAMILY = PPC) 初始化全局标准输入/输出/错误为空文件描述符 ioGlobalStdSet (STD_IN, ERROR); ioGlobalStdSet (STD_OUT, ERROR); ioGlobalStdSet (STD_ERR, ERROR);#endif sysStartType = startType; intVecBaseSet

3、(FUNCPTR *) VEC_BASE_ADRS);/初始化向量表基地址为VEC_BASE_ADRS,VEC_BASE_ADRS在VxWorks的memory中设置#if (CPU_FAMILY = PPC) & defined(INCLUDE_EXC_SHOW)/如果定义了INCLUDE_EXC_SHOW宏,那么调用excShowInit函数装载异常,中断,崩溃显示函数(打印到标准输出)INCLUDE_EXC_SHOW宏在show routines中设置 excShowInit ();#endif 调用excVecInit函数初始化向量表vxwork_srctargetsrcarchppc

4、excArchLib.c其实是把所有的异常向量指向一个默认的异常处理程序,可以观察该函数执行后异常入口的地址(如0x100,0x200)被填入的汇编代码。调用BSP的sysHwInit函数初始化硬件configbspsyslib.c跳转到usrKernelInit函数配置操作系统compssrcusrKernel.cvoid usrKernelInit (void) classLibInit ();/初始化类目标taskLibInit ();/初始化任务目标/初始化一些队列 qInit (&readyQHead, Q_PRI_BMAP, (int)&readyQBMap, 256); qIni

5、t (&activeQHead, Q_FIFO); /* FIFO queue for active q */ qInit (&tickQHead, Q_PRI_LIST); /* simple priority semaphore q*/workQInit ();/* queue for deferred work */跳转到kernelInit函数 kernelInit (FUNCPTR) usrRoot, ROOT_STACK_SIZE, MEM_POOL_START, sysMemTop (), ISR_STACK_SIZE, INT_LOCK_LEVEL);/参数说明/usrRoot

6、 根任务(第一个任务)入口函数/ROOT_STACK_SIZE 根任务堆栈大小/ MEM_POOL_START 系统内存池起始地址,位于end符号之后的内存/ sysMemTop () 系统内存池结束地址/ISR_STACK_SIZE 中断堆栈大小/ INT_LOCK_LEVEL 中断禁止级别kernelInit函数对齐各种地址用0xee填充中断堆栈设置中断堆栈启动root任务以下为VxWorks系统内存结构* .CS* - HIGH MEMORY -* - - pMemPoolEnd* | | We have to leave room for this block headers* | 1

7、 BLOCK_HDR |so we can add the root task memory to the pool.* | |* -* | | * | WIND_TCB |* | |* - - pRootStackBase;* | |* | ROOT STACK |* | |* -* | | We have to leave room for these block headers* | 1 FREE_BLOCK |so we can add the root task memory to the pool.* | 1 BLOCK_HDR |* | |* - - pRootMemStart;

8、* -* | |* FREE MEMORY POOL pool initialized in kernelRoot()* | |* - - pMemPoolStart + intStackSize; vxIntStackBase* | |* | INTERRUPT STACK |* | |* - - pMemPoolStart; vxIntStackEndl - LOW MEMORY Root任务函数,注意该任务由VxWorks配置决定void usrRoot (char *pMemPoolStart, unsigned memPoolSize) usrKernelCoreInit (); /

9、* core kernel facilities */ memInit (pMemPoolStart, memPoolSize); /* full featured memory allocator */ memPartLibInit (pMemPoolStart, memPoolSize); /* core memory partition manager */ sysClkInit (); /* System clock component */ selectInit (NUM_FILES); /* select */ usrIosCoreInit (); /* core I/O syst

10、em */ usrKernelExtraInit (); /* extended kernel facilities */ usrIosExtraInit (); /* extended I/O system */ usrNetworkInit (); /* Initialize the network subsystem */ selTaskDeleteHookAdd (); /* install select task delete hook */ usrToolsInit (); /* software development tools */ usrAppInit (); /* cal

11、l usrAppInit() (in your usrAppInit.c project file) after startup. */usrKernelCoreInit()函数void usrKernelCoreInit (void) eventLibInit (); /* VxWorks events */ semBLibInit (); /* binary semaphores */ semMLibInit (); /* mutex semaphores */ semCLibInit (); /* counting semaphores */ msgQLibInit (); /* message queues */ wdLibInit (); /* watchdog timers */taskHookInit (); /* user callouts on task creation/deletion/context switch */memInit()函数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号