硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 枫华雪悦
收起左侧

[BOOT/IAP] 能否在一个MDK工程文件中实现bootload和app程序

  [复制链接]

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-11-3 08:51:32 | 显示全部楼层
会飞的猪_2020 发表于 2022-11-2 16:29
没意义啊。
你们领导不是技术出身的吗?搞这些花里胡哨的。
我们都是一个BOOT,一个APP,APP里编译后执行 ...

是做技术出生,他觉得做成一个工程好管理和维护
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-11-3 08:52:47 | 显示全部楼层
Acuity 发表于 2022-11-2 23:14
你领导半桶水吧。就搞这些没用的。本来就是两个执行程序,硬要搞一起。没事找事干。给他boot和app的合并脚 ...

确实是没事找事干
本来boot程序就只干boot的活。一定要组合在一起
回复

使用道具 举报

0

主题

121

回帖

121

积分

初级会员

积分
121
发表于 2022-11-3 09:02:39 | 显示全部楼层
枫华雪悦 发表于 2022-11-1 11:36
我也认为意义不大,可领导要求一个程序出来,即一个hex文件,说便于整机BOM管理。

领导要只有一个HEX文件,你就给他一个合并后的HEX就是了。难道领导还要求你的源码里面必须只有一个uvprojx文件,并且里面只有一个target吗?
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-11-3 10:35:40 | 显示全部楼层
apleilx 发表于 2022-11-3 08:10
你们领导就是个傻子。  APP和BOOT要保证运行在完全独立封闭的区间。 调用过同一个函数就会失去独立性,也就 ...

通过stc文件是可以设置app和boot独立的内存。他做这个的目的是为了远程升级。
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-11-3 10:37:45 | 显示全部楼层
ilcvm 发表于 2022-11-3 09:02
领导要只有一个HEX文件,你就给他一个合并后的HEX就是了。难道领导还要求你的源码里面必须只有一个uvproj ...

对,他主要是看能否按他要求完成这个任务。做技术出生的,程序归档需要领导看
回复

使用道具 举报

14

主题

65

回帖

107

积分

初级会员

积分
107
发表于 2022-11-3 12:49:48 | 显示全部楼层
枫华雪悦 发表于 2022-11-3 10:35
通过stc文件是可以设置app和boot独立的内存。他做这个的目的是为了远程升级。

没用的。比如APP和BOOT都调用了Hal库的USB函数,不论你这个函数放在APP区还是BOOT区,只要你修改了所在区域的任何代码该函数的地址就是发生变化。 这时候你升级APP,就会无法正确调用该函数。除非BOOT和APP同时升级,但boot也就没有存在的意义了。
回复

使用道具 举报

0

主题

121

回帖

121

积分

初级会员

积分
121
发表于 2022-11-3 16:12:51 | 显示全部楼层
apleilx 发表于 2022-11-3 12:49
没用的。比如APP和BOOT都调用了Hal库的USB函数,不论你这个函数放在APP区还是BOOT区,只要你修改了所在区 ...

正解。不仅HAL函数,所用调用库函数都有这问题,有时候你做个除法也会调用某些库函数。
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
QQ
发表于 2022-11-7 12:23:28 | 显示全部楼层
我就是bootloader和app一个工程,因为bootloader用到代码只是app的一部分,如初始化代码,usb代码等,一个工程只是配置不一样(如bootloader定义了_BOOTLOADER_,而App则没有定义)。
回复

使用道具 举报

3

主题

48

回帖

57

积分

初级会员

积分
57
发表于 2022-11-8 09:05:35 | 显示全部楼层
可以文件追加形式将两个bin文件合成一个,例如linux中的cat命令: cat app.bin >> bootloader.bin
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-11-9 18:20:02 | 显示全部楼层
pengshicao 发表于 2022-11-7 12:23
我就是bootloader和app一个工程,因为bootloader用到代码只是app的一部分,如初始化代码,usb代码等,一个 ...

那你的boot能单独运行吗?复位之后boot还能单独运行吗?
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-11-9 18:20:58 | 显示全部楼层
bigbigcong 发表于 2022-11-8 09:05
可以文件追加形式将两个bin文件合成一个,例如linux中的cat命令: cat app.bin >> bootloader.bin

很多种方式合并Hex文件,但是都是两个工程文件编译出来的Hex文件
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2023-2-8 10:46:36 | 显示全部楼层
MARK,留个记号
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

大帅哥

积分
34
发表于 2023-2-8 11:29:15 | 显示全部楼层
我觉得完全没有意义,维护起来不方便,对APP升级也会造成不必要的麻烦
回复

使用道具 举报

8

主题

151

回帖

175

积分

初级会员

积分
175
发表于 2023-2-8 11:59:13 | 显示全部楼层
这样反而失去了升级的意义了,全局变量的初始化都在__main里初始化, 所以app如果做了修改, 无法再次初始化全局变量。还有一些中间函数的问题,还要考虑升级中途断点的问题。
回复

使用道具 举报

12

主题

146

回帖

182

积分

初级会员

积分
182
发表于 2023-2-16 16:18:27 | 显示全部楼层
本帖最后由 gnail092 于 2023-2-16 17:29 编辑
apleilx 发表于 2022-11-3 12:49
没用的。比如APP和BOOT都调用了Hal库的USB函数,不论你这个函数放在APP区还是BOOT区,只要你修改了所在区 ...

我们公司的boot和app就是同一个工程的,通sct文件来分配boot和app的位置,boot只有负责从备份FLASH区的程序搬到主FLASH区的代码,这样就更精简,而且必须保证用到的所有函数都是单独的,这样保证与APP部分没有任何关系,这样升级app后boot部分不受影响,这也是比较麻烦的一个事情,而且把boot部分代码是放在内部FLASH的最后一个扇区的,我猜一个是每次上电运行程序不需要做跳转处理了,还有就是如果放在FLASH开始的地方,那IAP的代码需要调用一些初始化MCU的代码,为了更精简就放在FLASH的最后了。这种方法有两个问题:1、keil的版本一定要一样,不同版本编译出来是有差异的。 2、boot放在最后面的坏处,就是如果在最后阶段从备份FLASH区搬到主FLASH区的过程中出问题了,重新上电都不行了,那就成板砖了。
回复

使用道具 举报

8

主题

151

回帖

175

积分

初级会员

积分
175
发表于 2023-2-16 17:45:25 | 显示全部楼层
gnail092 发表于 2023-2-16 16:18
我们公司的boot和app就是同一个工程的,通sct文件来分配boot和app的位置,boot只有负责从备份FLASH区的程 ...

我有个疑惑不能理解, 就是全局变量怎么初始化。 全局变量是在boot之前就初始化的, 也就是__main函数里被初始化。那如果新的APP程序有增加全局变量, 那这部分全局变量该怎么初始化。个人感觉就是boot必须可以独立运行, 即使中途断电, 再次启动也能保证能启动boot。
回复

使用道具 举报

12

主题

146

回帖

182

积分

初级会员

积分
182
发表于 2023-2-16 21:04:50 | 显示全部楼层
tcs_stm32 发表于 2023-2-16 17:45
我有个疑惑不能理解, 就是全局变量怎么初始化。 全局变量是在boot之前就初始化的, 也就是__main函数里被 ...

没太明白你说的意思,全局变量初始化跟boot有什么关系
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-3-18 16:24:36 | 显示全部楼层
eric2013 发表于 2022-11-1 14:00
整了半天,仅仅是为了合并成一个hex吗?

这个超级简单啊。srec_cat.exe合并各种hex文件即可,一个MDK ...

请问这种方法如何实现CRC校验?谢谢。
回复

使用道具 举报

69

主题

345

回帖

567

积分

金牌会员

积分
567
发表于 2024-3-18 17:07:05 | 显示全部楼层
FreeRTOS2024 发表于 2024-3-18 16:24
请问这种方法如何实现CRC校验?谢谢。

校验整个的CRC就行了吧
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
发表于 2024-3-25 10:41:06 | 显示全部楼层
gnail092 发表于 2023-2-16 16:18
我们公司的boot和app就是同一个工程的,通sct文件来分配boot和app的位置,boot只有负责从备份FLASH区的程 ...

这样的话,其实是不分boot和app了吧?严格意义上来说就相当于app自更新
回复

使用道具 举报

0

主题

58

回帖

58

积分

初级会员

积分
58
发表于 2024-10-15 09:19:43 来自手机 | 显示全部楼层
eric2013 发表于 2022-11-1 11:23
合并到一个工程里面没问题,合成成一个程序,我认为意义不大,给自己找麻烦。

硬汉哥,想问一下,关于keil的muiti-target和multi-project应用场景有什么不一样,如果合并boot和app工程,用那个方式方便一点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 06:53 , Processed in 0.322467 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表