完成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中的全局变量问题从头映射问题,不然会呈现异常。