你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

APP程序与Bootload程序调用同一段代码的实现

[复制链接]
Mr.梁 提问时间:2017-2-5 18:01 /
    问题是这样的,我有一段代码都是一些接口函数,而这些接口函数在APP程序与Bootload程序中都需要调用,我不想把这些接口函数编译成.a库文件调用,因为APP程序与Bootload程序都需要包含这个编译好的.a库文件,这样会浪费空间,我希望是编译成.bin文件烧录到stm32中固定的地址,然后APP与Bootload都可以调用。我知道这个是可以实现的,但是具体的方法不太懂,有哪位大神做过这方面的,可以指教一下嘛?
收藏 2 评论20 发布时间:2017-2-5 18:01

举报

20个回答
zoomdy 回答时间:2017-2-6 21:38:18
wofei1314 发表于 2017-2-6 13:23
请教一下,执行完函数(共享的那部分)以后如何返回Bootloader或者APP....

函数执行完就回到调用它的位置的下一条指令呀,如果是bootloader调用就回到bootloader,如果是app调用就回到app,调用函数前会把返回地址保存到LR寄存器的,具体可以参考BLX指令。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

Mr.梁 回答时间:2017-2-5 18:02:57
求助求助
freeelectron 回答时间:2017-2-5 20:28:43
貌似不行,
zoomdy 回答时间:2017-2-5 21:09:53
把共享函数放到bootloader,在bootloader区域某个固定的位置存储共享函数地址表,App定义指向bootloader函数地址表的函数指针,用函数指针调用就可以了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

海迹天涯 回答时间:2017-2-6 08:40:37
zoomdy 发表于 2017-2-5 21:09
把共享函数放到bootloader,在bootloader区域某个固定的位置存储共享函数地址表,App定义指向bootloader函 ...

这样可以吗,坐等楼主测试
Mr.梁 回答时间:2017-2-6 09:11:13
zoomdy 发表于 2017-2-5 21:09
把共享函数放到bootloader,在bootloader区域某个固定的位置存储共享函数地址表,App定义指向bootloader函 ...

这个共享函数地址表怎么弄的,可以详细说一下嘛,或者给点资料,不胜感谢
zoomdy 回答时间:2017-2-6 12:35:17
  1. //bootloader.c
  2. void func1(int a)
  3. {
  4. }

  5. int func2(int a, int b)
  6. {
  7. }

  8. // func_table定位到固定位置,固定方法与编译器有关,请百度
  9. const uint32_t func_table[] =
  10. { (uint32_t)&func1,
  11. (uint32_t)&func2};

复制代码
  1. //app.c
  2. // 声明函数指针
  3. void (func1*)(int a);
  4. void (func2*)(int a, int b);

  5. void app_init(void)
  6. {
  7. // 取函数表基地址
  8. uint32_t *table_base = (uint32_t*)(0x08004000/* func_table基地址,这里随便给个值*/);

  9. //初始化函数指针
  10. func1 = (void (*)(int))(table_base[0] | 0x1);
  11. func2 = (int (*)(int, int))(table_base[1] | 0x1);

  12. // 调用函数
  13. func1(11);
  14. }
复制代码



评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zoomdy 回答时间:2017-2-6 12:36:05
楼上的代码没有编译过,原理就是这样的,细节自己搞定。
wofei1314 回答时间:2017-2-6 13:23:13

请教一下,执行完函数(共享的那部分)以后如何返回Bootloader或者APP....
Mr.梁 回答时间:2017-2-6 13:48:08
zoomdy 发表于 2017-2-6 12:36
楼上的代码没有编译过,原理就是这样的,细节自己搞定。

好的,非常感谢
123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版