应该是:LOCAL_MEM_SIZE 64M
USER_RESERVED_MEM 32M
RAM_HIGH_ADRS不要超过32M范围,在29M处比较合适吧。
在sysLib.c里面用memAddToPool函数添加,,,,很多参考bsp里面有例子。
启动后,用大型内存块分配来测试是否成功。
应该是:LOCAL_MEM_SIZE 64M
USER_RESERVED_MEM 32M
RAM_HIGH_ADRS不要超过32M范围,在29M处比较合适吧。
在sysLib.c里面用memAddToPool函数添加,,,,很多参考bsp里面有例子。
启动后,用大型内存块分配来测试是否成功。
内存起始地址定义:0x30000000
LOCAL_MEM_SIZE 64M
USER_RESERVED_MEM 32M
RAM_LOW_ADRS 0x30001000
RAM_HIGH_ADRS 0x30200000
正常启动后,内存大小为32M,此时加载应用程序loadmodule()正常
但,如果添加到内存池后,通过memAddToPool(0x32000000,0x2000000);
加载应用程序会像以前一样报出:“Relocation value does not fit in 26 bits.”
而且感觉两部分内存没有连接上,memAddToPool之后,用malloc来测试,
发现动态加载32M不成功,加载两个20M成功,20M的内存指针分别位于低32M和高32M中
所有两块内存没有连接统一管理。
分支和带链接分支寻址+—32M,添加内存池后,寻址范围还是超过32M。
只有采用-mlongcall(或类似指令),来解决此问题才能确保安全、稳定。
目前库文件中的26bit编码无法重新编译,无源码,考虑新板件只保留32M,足够用了:)
可否给出不安全,不稳定的原因呢?看了EABI等规范和VxWorks的文档,仅仅指令跳转有32M绝对地址限制,通常具体涉及到的汇编指令就是bl和bla。
我现在能想到的超过32M范围的情况在VxWorks下只有:
1. 从Flash 跳到RAM执行;
2. 从RAM跳到Flash执行;
3. 从正常执行跳到异常扇区以及异常处理挂接代码的跳转(如果异常扇区与RAM不在32M内,如异常扇区放高地址)。
但这三种情况VxWorks都做了很好的处理。一时想不出哪里不安全,不稳定,可否指导下。谢谢了。
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |