stm32 BOOTLOADER 导出函数给APP调用出现malloc无法分配内存的问题
2016-07-19 17:05
429 查看
实现IAP升级APP这个功能没有什么问题,但是想把APP中相对固定的函数移植到bootloader中,从而减少APP空间代码,减少升级时间。
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以后的地址。
经过了,在QQ的学习更肯定我的想法是没有错的。接着通过调试代码,发现,Bootloader中原来存在一个全局变量未被重新映射,而在调用的时候会使用到该变量.进而,导致到动态分配内存出现奇怪地址的问题。
总结,原来的设想是正确的,bootloader的动态内存分配函数malloc失效之后,可以使用app的动态内存分配函数,解决导出函数因内存失效而无法使用函数的问题。
特别要注意,bootloader中的全局变量问题重新映射问题,否则会出现异常。
来自:http://blog.csdn.net/lan120576664
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以后的地址。
经过了,在QQ的学习更肯定我的想法是没有错的。接着通过调试代码,发现,Bootloader中原来存在一个全局变量未被重新映射,而在调用的时候会使用到该变量.进而,导致到动态分配内存出现奇怪地址的问题。
总结,原来的设想是正确的,bootloader的动态内存分配函数malloc失效之后,可以使用app的动态内存分配函数,解决导出函数因内存失效而无法使用函数的问题。
特别要注意,bootloader中的全局变量问题重新映射问题,否则会出现异常。
来自:http://blog.csdn.net/lan120576664
相关文章推荐
- ubuntu 16.04 创建android可见的手机wifi
- 【android学习】通过正则表达式解决数据传输过程中的堆包问题
- android圆形头像的实现类CircleImageView.java
- android autocompletetextview(自动匹配控件)类比listview
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- Android杂谈————软键盘、背景透明、粘贴板
- Android自定义控件之购物车数量加减器
- android的动画
- 分享下android 一个Listview下拉刷新的二次封装(第一次修订)
- Unity UGGUI RawImage 渲染小地图
- android studio 英文翻译插件安装及配置
- android之视频播放系统VideoView和自定义VideoView控件的应用
- Swift中FMDB的使用教程和事务的使用
- 通用的recyclerview adapter 适配
- iOS 多选删除(附tableViewTips及单选删除)
- Android串口操作,简化android-serialport-api的demo
- [精通Objective-C]三种实现并发编程的方式
- unity3d meshBaker 基本的使用
- 动画 AnimationDrawable 帧动画
- 微信网页授权接口代码示例