分散加载疑问
背景:
团队开发项目,为了实现每个人的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;
这个可以看下MAP文件,如果有对应的section就可以。 eric2013 发表于 2024-2-21 09:48
这个可以看下MAP文件,如果有对应的section就可以。
MAP文件有对应的section的。只是感觉奇怪,以前都是得在分散加载文件里面指定对应的section的,现在不知道都是可以的,不知道啥原因。 庄永 发表于 2024-2-21 11:31
MAP文件有对应的section的。只是感觉奇怪,以前都是得在分散加载文件里面指定对应的section的,现在不知 ...
通过分散加载主要是方便设置section到指定的存储空间。
直接attribute也是有的section的,像RTX5的调试组件就是这种玩法。 群主分享下这个玩法,很感兴趣 eric2013 发表于 2024-2-21 14:01
通过分散加载主要是方便设置section到指定的存储空间。
直接attribute也是有的section的,像RTX5的调 ...
明白了,感谢硬汉 yklstudent 发表于 2024-2-21 14:39
群主分享下这个玩法,很感兴趣
就是将通过宏DEBUG_INIT修饰初始化函数,将这些函数指定放在DEBUG_INIT段,然后主函数里面通过遍历DEBUG_INIT$$Base到DEBUG_INIT$$Limit之间的内容并调用实现初始化,不用将那些初始化函数一一调用,这样团队内部开发人员自己的调试文件就可以隔离开来,在自己的本地,不会由于每个人都有自己的调试信息导致代码很乱
页:
[1]