应用框架常见问题¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
应用启动链路是什么?¶
unirtos_init() 先调用 components_init();
再调用 apps_init();
apps_init() 再统一分发所有已注册应用的init函数。
为什么我写了一个init函数,但应用没有启动?¶
最常见原因有以下几类:
只写了init函数,没写 UNIRTOS_APP_EXPORT。
写了注册宏,但源文件没有被CMake编进目标。
CMake编进去了,但对应Kconfig没打开。
应用目录放错位置,没被当前框架路径发现。
UNIRTOS_APP_EXPORT里的order是干什么的?¶
order 决定init执行顺序,数值越小越早执行。
一个应用的init函数里能不能直接写死循环业务?¶
不建议。
因为 apps_init() 会顺序调用所有注册的init函数,如果某个init直接进入长循环或做长时间阻塞,后续应用就没有机会初始化。
为什么应用已经编译进来了,但启动时还是没执行?¶
编译进来不等于注册成功。
最常见的两个根因:
源文件被编译了,但没有 UNIRTOS_APP_EXPORT
注册函数签名或可见性不对,导致实际没有生成有效注册项
这套框架要求的init函数签名很简单:
void init_fn(void)
不要把它写成带参数版本,也不要指望 apps_init 传上下文进去。
应用注册项有没有数量上限?¶
有。
当前 apps_init.c 里定义了:
UNIRTOS_APP_INIT_MAX_COUNT = 96
如果注册数量超过这个值,会打warning,并且只处理前96个。
这意味着:
不要无限制堆积注册项
如果你在做大量demo聚合,要注意上限
出现“部分应用始终不启动”时,别忘了检查是不是注册数溢出