如何解决 vxWorks 系统中存放映像的空不够用的问题

     我们知道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

图片无法上传,郁闷!  待续

 

 

 

 

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值