如何把APP中固定函数移植到bootloade.doc
《如何把APP中固定函数移植到bootloade.doc》由会员分享,可在线阅读,更多相关《如何把APP中固定函数移植到bootloade.doc(2页珍藏版)》请在三一文库上搜索。
1、如何把APP中固定函数移植到bootloade实现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 = 5free(p);p = NULL;return k;在APP的
2、代码调用以上函数调用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 = 5free(p);p = NULL;return k;此时,发现p竟然分配到0x00开头的地址,而不是0x20000000以后的地址。经过了,在QQ的学习更肯定我的想法是没有错的。接着通过调试代码,发现,Bootloader中原来存在一个全局变量未被重新映射,而在调用的时候会使用到该变量。进而,导致到动态分配内存出现奇怪地址的问题。总结,原来的设想是正确的,bootloader的动态内存分配函数malloc失效之后,可以使用app的动态内存分配函数,解决导出函数因内存失效而无法使用函数的问题。特别要注意,bootloader中的全局变量问题重新映射问题,否则会出现异常。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 APP 固定 函数 移植 bootloade
链接地址:https://www.31doc.com/p-3427375.html