WQ7033 SDK介绍和启动流程
这篇文章简要介绍了SDK目录结构以及通过SDK代码介绍WQ7033的启动和运行流程, 为刚入门WQ7033芯片开发的朋友提供了参考, 如果需要搭建WQ7033的开发环境, 可以参考上一篇文章: WQ7033开发环境的搭建
WQ7033 SDK介绍
-
SDK压缩包解压后SDK文件结构如图
prebuild 目录内包含已经编译好的wpk文件
src 目录内包含源码文件
tools 目录内包含编译时使用的一些python脚本 -
源码文件下的目录结构如图
app: 包含各应用模块的代码
config: 芯片配置相关代码(寄存器映射, flash分区等相关代码)
customer: 不同项目的配置, UI相关代码
driver: 硬件驱动相关代码
lib: 一些实现app应用模块底层实现的细节(里面也是源码形式, 不是lib的形式提供)
os: 操作系统相关代码, 代码中用到的是freeRTOS
project: 项目主函数入口
vendor: 一些外设的驱动, 入耳传感器的驱动, flash驱动, ntc驱动等
由上面SDK结构可以看出, 开发过程中一般只需要修改app, customer目录中的代码就好
SDK代码启动流程分析
-
软件的启动是从SDK目录下的src\project\tws\core0中的start.S开始的. start.S文件是SDK中的核心启动文件
-
首先调用到了 software_init() 函数, 做了一些内存的初始化和中断的初始化处理
-
然后调用跳转到了main()函数进行初始化
初始化了片上硬件资源, 配置时钟以及操作系统OS的初始化等
-
进入main_lib_init()函数中创建了app_entry任务, freeRTOS中创建好的任务进入就绪态, 等待调度
-
main函数末尾调用了os_start_kernel开启任务调度器
-
开启调度器后, app_entry任务得到调度, 进入app_entry函数
-
进入app_main_entry() 函数中创建了APP模块中使用到的信号量, 创建了消息队列, 还创建了app_main任务
-
app_main任务创建后进入就绪态, 得到调度后, 进入app_main_task_func()
-
在app_main任务中进行各个应用模块的初始化, 在初始化时候, 各个应用模块通过调用app_register_msg_handler(), 注册本模块消息接收处理回调, 到这里初始化就已经完成了.
-
接着这个任务就一直在死循环while(1), 即app_main任务会一直阻塞等待信号量, 等待事件的发生app_main任务中main_queue有区分高优先级和低优先级消息.
-
整个应用软件都是以消息驱动的方式实现. 应用程序会创建一个操作系统级的主任务app_main任务,各个模块会把消息发送给主任务, 主任务等待各种事件的到达, 并调用相应模块提供的服务进行处理, 如图为消息驱动处理方式