硬汉嵌入式论坛

 找回密码
 立即注册
查看: 404|回复: 6
收起左侧

[MDK] 分散加载疑问

[复制链接]

75

主题

683

回帖

908

积分

金牌会员

积分
908
发表于 2024-2-20 20:00:40 | 显示全部楼层 |阅读模式

背景:
团队开发项目,为了实现每个人的Debug代码隔离开来,不提交同时也不影响其他人开发,将Debug相关的代码通过分散加载实现Debug相关代码的自动初始化流程。

原理:

#define CALL_NAME(f)           __debug_init_##f
#define CALL_SECTION            __attribute__((section("DEBUG_INIT")))
#define DEBUG_INIT(f)          CALL_SECTION static debug_init CALL_NAME(f) = f


个人需要Debug部分的代码模块化后,调用 DEBUG_INIT 宏将代码指定到DEBUG_INIT节,然后主函数遍历这个节进行初始化

现象:
按道理使用了这些节我应该在分散加载文件里面声明的,但是调试的时候忘记该分散加载文件了,只是定义很多初始化接口,结果,居然能够运行。下面的代码居然能够正常运行并且正常初始化,大佬们知道原因吗


extern uint32_t DEBUG_INIT$$Base;
extern uint32_t DEBUG_INIT$$Limit;


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-2-21 09:48:01 | 显示全部楼层
这个可以看下MAP文件,如果有对应的section就可以。
回复

使用道具 举报

75

主题

683

回帖

908

积分

金牌会员

积分
908
 楼主| 发表于 2024-2-21 11:31:52 | 显示全部楼层
eric2013 发表于 2024-2-21 09:48
这个可以看下MAP文件,如果有对应的section就可以。

MAP文件有对应的section的。只是感觉奇怪,以前都是得在分散加载文件里面指定对应的section的,现在不知道都是可以的,不知道啥原因。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-2-21 14:01:23 | 显示全部楼层
庄永 发表于 2024-2-21 11:31
MAP文件有对应的section的。只是感觉奇怪,以前都是得在分散加载文件里面指定对应的section的,现在不知 ...

通过分散加载主要是方便设置section到指定的存储空间。

直接attribute也是有的section的,像RTX5的调试组件就是这种玩法。
回复

使用道具 举报

6

主题

636

回帖

654

积分

金牌会员

积分
654
QQ
发表于 2024-2-21 14:39:35 来自手机 | 显示全部楼层
群主分享下这个玩法,很感兴趣
回复

使用道具 举报

75

主题

683

回帖

908

积分

金牌会员

积分
908
 楼主| 发表于 2024-2-21 14:48:31 | 显示全部楼层
eric2013 发表于 2024-2-21 14:01
通过分散加载主要是方便设置section到指定的存储空间。

直接attribute也是有的section的,像RTX5的调 ...

明白了,感谢硬汉
回复

使用道具 举报

75

主题

683

回帖

908

积分

金牌会员

积分
908
 楼主| 发表于 2024-2-21 14:51:48 | 显示全部楼层
yklstudent 发表于 2024-2-21 14:39
群主分享下这个玩法,很感兴趣

就是将通过宏DEBUG_INIT修饰初始化函数,将这些函数指定放在DEBUG_INIT段,然后主函数里面通过遍历DEBUG_INIT$$Base到DEBUG_INIT$$Limit之间的内容并调用实现初始化,不用将那些初始化函数一一调用,这样团队内部开发人员自己的调试文件就可以隔离开来,在自己的本地,不会由于每个人都有自己的调试信息导致代码很乱
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 04:32 , Processed in 0.183041 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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