[STM32F4] stm32 BOOTLOADER 导出函数给APP调用出现malloc无法分配内存的问题

[复制链接]
1516|2
 楼主| lanjackg2003 发表于 2016-7-19 14:47 | 显示全部楼层 |阅读模式
APP通过调用bootloader导出的函数接口,实现相关功能的调用。
代码举例
在bootloader导出如下接口给APP使用
int exp_forapp_A(void)
{
        int k = 5;
        return k;
}

int exp_forapp_B(void)
{
        int k = 2;
        unsigned char *p = malloc(100);
        if(p)
        {
                k = 5
                free(p);
                p = NULL;
        }
        return k;
}

在APP的代码调用以上函数
调用exp_forapp_A函数,能够得到正确的返回值5
调用exp_forapp_B函数,永远只能得到返回值2

经过调试分析,由于exp_forapp_B在调用malloc时候,使用的bootloader内的malloc,此时由于跳转到app后ram空间已经重新划分了,因此malloc直接失败,返回NULL。
因此,尝试使用将app中的malloc函数传到bootloader中给exp_forapp_B使用
int exp_forapp_B(void)
{
        int k = 2;
        unsigned char *p = app_malloc(100);
        if(p)
        {
                k = 5
                free(p);
                p = NULL;
        }
        return k;
}
此时,发现p竟然分配到0x00开头的地址,而不是0x20000000以后的地址。

不知道有没有什么方法解决这样的问题呢?
我想到的方法是对ram重新进行划分,类似如下:
0x2000 0000~0x2000 ffff        bootloader
0x2001 0000~0x200F 0000        APP

但是这样有点浪费RAM,有没有其他方法不这么浪费RAM的?还有malloc分别失败的原因是什么(不可能是RAM空间不够,因为有192kb)?




 楼主| lanjackg2003 发表于 2016-7-19 16:56 | 显示全部楼层
问题找到了,由于bootloader中仍然有一个全局变量未被重映射,导致分配的内存在非0x2000 0000.
原来的设想是可行的。
等时间结贴,下一楼给分
soybean1998 发表于 2016-7-20 00:53 | 显示全部楼层
不明觉厉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

441

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部