应该是: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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |