我们知道vxWorks的启动过程是一步一步逐渐引导加载的过程。她分为基本、扩展、映像阶段。各个阶段内存的分配是用宏来分配使用的。如果某个项目中应用部分代码超出了这个分配的限制,编译的时候会编译不通过,因为编译文件中调用了VXSIZEPRO宏函数,而这个东东是tonado下的vxsize.exe,vxsize.exe其实就是系统函数vxSize的封装调用,大家可以查查这个函数在风河提供的接口说明中看看,就明白了,她就是通过RAM_LOW_ADRS和RAM_HIGH_ADRS两个宏来实现控制编译出来的映像文件大小不超过她俩之差,就保证编译出的映像可以正常加载到内存,不踩到其他内存区域。
当然这样的设计非常好,可以防止超大映像踩到其他内存区域,但如果我们的映像真的比这个大了呢?或者映像的内存池不够用了?(映像代码增加导致创建的内存池减小)怎么办?这就需要改变这种默认的内存使用方式和分配。内存分配,特别是为操作系统本身运行的代码分配空间非同小可,我们需要了解整个系统的加载过程以及在这个过程中内存的分配和使用,然后再做这个手术。下面我们就先介绍这个启动过程吧。
首先在基本阶段将几K的代码拷贝到内存4MRAM_LOW_ADRS的位置,这些代码运行将存放在非易失性存储介质的压缩了的代码解压缩并拷贝到内存地址RAM_HIGH_ADRS处,并调到RAM_HIGH_ADRS处运行,运行后将最终的映像文件拷贝到4MRAM_LOW_ADRS的地方运行,映像的结束地址到SYS_MEM_TOP之间空间的1/16作为测试内存池,即WDB_POOL_SIZE,这个空间是tornado测试工具使用的内存池。在测试内存池结束到SYS_MEM_TOP之间的内存区域作为系统内存池。
---------------------------------------------------SYS_MEM_TOP
---------------------------------------------------RAM_HIGH_ADRS
---------------------------------------------------RAM_LOW_ADRS 4M
---------------------------------------------------SYS_MEM_BOTTOM
图片无法上传,郁闷! 待续