开始
获取一个经过编译的代码
经过编译的代码树如下图,须经过编译,因为编译会生成autogen文件夹和其中的文件,后面会用到
找到并打开main.cpp
不要打开Board中的main.c,它是cubeMX生成的且不被使用
可以看到,首先读取uid作为通讯的ID并经行数字转字符(line 645-657)
然后调用board.c中的system_init();
跳转发现经行了hal库和系统时钟的配置
值得注意的是它还经行了otp的指针设置FLASH_OTP_BASE在stm32fxxx.h中定义。
然后进入check_board_version函数检查硬件版本,其中的宏应该是全局宏定义(暂时找不到)可以在tup.config里改。
回到main()
函数,接着经行了配置项的读取和加载
ps:odrv.misconfigured_
为无效的配置,即后面要更新加载配置项,配置加载可详细在 了解(目前还没写)
紧接着进行board_init();
进入board_init
,里面是对各种外设的初始化,值得注意的是
---- 1.它经行了条件判断,根据配置项初始化了不同的外设(基本是通讯相关)
---- 2.它的cubeMx生成的init函数中不进行GPIO的初始化而是在后面进行,也有一部分在board_init
之后完成。它对GPIO进行了映射,具体见 此处
回到main()
中,后面很大的代码是进行GPIO的初始化,之后进行信号量的创建,并创建rtos_main
线程和启动rtos,如图
同时在rtos_main
线程中创建各个线程,而且在完成后就就将自己删除了。
本片完,To be countinue…