杰理AC79初始化流程解读
本文解读了JieLi平台的系统初始化流程,以main函数为起点,按照"初始化→任务创建→OS启动→App消息循环"的顺序执行。初始化阶段包含架构/板级配置、定时器设置、OS内核准备和多优先级模块加载。随后创建App任务并启动OS调度,最终进入App核心逻辑:先完成业务初始化,再通过无限消息循环处理外部事件。整个流程具有严格的顺序性、模块化设计和事件驱动特性,符合嵌入式系统的典型
概述
本文档核心描述了 JieLi 平台的系统初始化全链路与App 核心任务处理逻辑,以main函数为入口,串联起初始化、任务创建、OS 启动、消息循环等关键环节,整体流程具有明确的先后顺序和模块划分。
一、整体流程框架
整个流程以main函数为起点,按 “初始化→任务创建→OS 启动→App 消息循环” 的逻辑递进,流程如下:

main → 各类初始化(架构 / 板级 / 定时器 / OS / 模块)→ task_create(创建 App 任务)→ os_start(启动 OS)→ app_core_init/app_main → 无限消息循环(while (1))
二、核心环节拆解
1. 入口函数:main
main是整个流程的总入口,内部按固定顺序执行 “初始化操作”“任务创建”“OS 启动” 三大核心动作,是流程的 “总指挥”。
2. 核心初始化阶段
此阶段是系统启动的基础,按 “架构→板级→定时器→OS→模块” 的顺序初始化底层资源,包含如下子模块:
| 初始化类型 | 涉及函数 | 核心作用 |
|---|---|---|
| 架构与板级初始化 | setup_arch |
完成架构相关基础初始化(如 CPU 架构配置) |
board_early_init |
早期板级初始化(板卡硬件的前置准备) | |
board_init |
后续板级初始化(板卡硬件的完整配置) | |
| 系统定时器初始化 | sys_timer_task_init |
定时器任务的初始化(创建定时器相关任务) |
sys_timer_init |
定时器核心初始化(配置定时器计数 / 中断等) | |
| 操作系统初始化 | os_init |
OS 内核基础初始化(如任务调度器、队列等) |
| 多优先级模块初始化 | __do_initcall(early_initcall) |
最早优先级:启动最早期的模块(如底层驱动) |
__do_initcall(platform_initcall) |
平台优先级:初始化平台相关模块(适配硬件) | |
__do_initcall(module_initcall) |
模块优先级:初始化普通业务 / 功能模块 | |
__do_initcall(initcall) |
通用优先级:执行通用初始化逻辑 | |
__do_initcall(late_initcall) |
最晚优先级:启动后期模块(如上层服务) |
注:
__do_initcall(xxx)是按优先级从高到低执行,确保底层模块先于上层模块初始化,避免依赖错误。
3. 任务创建与 OS 启动
初始化完成后,进入 “任务调度准备” 阶段,核心是创建 App 任务并启动 OS:
-
task_create(app_task_handler, NULL, "app_core"):创建 App 的核心任务,参数分别为 “任务处理函数(
app_task_handler)”“任务无参数(NULL)”“任务名(app_core)”,此任务是后续 App 逻辑的载体。 -
os_start:启动操作系统内核,开始任务调度,此时
app_core任务正式进入运行队列。
3. App 任务:app_task_hander
app_task_handler任务运行后,执行 App 的业务逻辑,核心是 “初始化 + 无限消息循环”:
-
app_core_init:App 核心业务的初始化(如业务模块配置、资源申请)。 -
__do_initcall:多优先级模块初始化,对多模块进行初始化调用。(如__do_initcall(early_initcall)、__do_initcall(late_initcall)) -
app_main:App 主逻辑入口,承接初始化后的业务流程。 -
while (1):无限消息循环:持续等待并处理外部消息,是 App 的 “事件驱动核心”,流程如下:
-
os_task_pend("taskq", msg, ARRAY_SIZE(msg)):阻塞等待 “
taskq消息队列” 的消息,将收到的消息存入msg数组(数组大小由ARRAY_SIZE(msg)定义),返回结果res(标识消息接收状态)。 -
app_core_msg_handler(msg):调用消息处理函数,解析并处理
msg中的具体消息(如硬件中断、上层指令等)。
4. App 任务:app_main
app_main:App 主任务业务逻辑。
注:
1、不要在此写while (1),有别于main函数。
2、创建相关应用任务即可。
三、部分代码
1. 入口函数:main
int main()
{
//init_for_stack_info();
/* early_puts("WL8X SDK RUN !!!\r\n"); */
__local_irq_disable();
setup_arch();
#if CPU_CORE_NUM == 1
EnableOtherCpu();
//cpu1_run_flag = 0; //如果运行在SFC模式下,不希望写FLASH的时候会挂起CPU1,则打开这句话,但是需要保证cpu1_main调用到的所有函数全部放到内部ram或者sdram,防止写flash过程中引起死机
#endif
os_init();
task_create(app_task_handler, NULL, "app_core");
#if CPU_CORE_NUM == 1 //本来改 prvIdleTask
__local_irq_enable();
#endif
os_start();
#if CPU_CORE_NUM > 1
__local_irq_enable();
#endif
#if defined CONFIG_UCOS_ENABLE
while (1) {
__asm__ volatile("idle");
}
#endif
return 0;
}
2. 任务函数:app_task_handler
static void app_task_handler(void *p)
{
sys_timer_init();
sys_timer_task_init();
#ifdef RTOS_STACK_CHECK_ENABLE
sys_timer_add(NULL, rtos_stack_check_func, 60 * 1000);
#endif
#ifdef MEM_LEAK_CHECK_ENABLE
malloc_debug_start();
sys_timer_add(NULL, malloc_debug_dump, 60 * 1000);
#endif
board_early_init();
__do_initcall(early_initcall);
#ifdef CONFIG_SDFILE_EXT_ENABLE
sdfile_ext_mount_init();
#endif
__do_initcall(platform_initcall);
board_init();
#ifdef RF_FCC_TEST_ENABLE
u8 rf_fcc_test_init(void);
if (rf_fcc_test_init()) {
#ifndef RF_FCC_IN_NORNAL_WORK
while (1) {
os_time_dly(10);
}
#endif
}
#endif
__do_initcall(initcall);
__do_initcall(module_initcall);
app_core_init();
__do_initcall(late_initcall);
app_main();
#ifdef CONFIG_FINSH_ENABLE
extern int finsh_system_init(void);
finsh_system_init();
#endif
int res;
int msg[32];
while (1) {
res = os_task_pend("taskq", msg, ARRAY_SIZE(msg));
if (res != OS_TASKQ) {
continue;
}
app_core_msg_handler(msg);
}
}
3. 应用函数:app_main
void app_main()
{
#ifdef CONFIG_CXX_SUPPORT
//注意:使用时也可以不放置在这里调用,但必须在使用c++前进行调用初始化c++环境
void cpp_run_init(void);
cpp_run_init();
#endif
printf("\r\n\r\n\r\n\r\n 1--------------- app_main run %s ---------------\r\n\r\n\r\n\r\n\r\n", __TIME__);
}
三、流程核心特点
1. 顺序性
从底层初始化(架构 / 板级)到上层业务(App 消息循环),按依赖关系有序执行。
2. 模块化
初始化、任务创建、消息处理拆分为独立模块,便于维护。
3. 事件驱动
App 通过无限消息循环响应外部事件,符合嵌入式系统的常见设计模式。
四、参考文档
1. AC791N 官方 Git 仓库
2. AC791N 官方技术文档
更多推荐


所有评论(0)