【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 系统初始化 -- main函数 --(十一)_bes外设初始化
💌 所属专栏:【BES2500x系列】
😀 作 者:我是夜阑的狗🐶
🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!
💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘
您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩
文章目录
<>
前言
大家好,又见面了,我是夜阑的狗🐶,本文是专栏【BES2500x系列】专栏的11篇文章;
今天开始学习BES2500x系列的一天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
专栏地址:【BES2500x系列】, 此专栏是我是夜阑的狗对BES2500x系列开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
1 系统初始化
前面学习了嵌入式系统启动的基本流程,可以分为 引导程序
和 系统初始化程序
这两部分,并对引导程序 boot loader
进行了详细讲解。接下来就来 系统初始化程序
是怎么跑的吧。话不多说,让我们原文再续,书接上回吧。
1.1 系统启动(System Startup)
mian
函数不再以一个线程的形式运行,因此在 main
函数运行之前,RTX5 不会干预系统的启动。main
函数运行之后,推荐按照以下的流程初始化硬件并启动内核:
Step1、硬件的初始化和配置,包括外设,内存,引脚,时钟和中断系统。
Step2、使用 CMSIS-Core
函数更新系统核心时钟。
Step3、使用 osKernelInitialize
函数初始化 CMSIS-RTOS
内核。
Step4、使用 osThreadNew
函数创建一个主线程(例如 app_mian
),然后在这个线程中创建和启动对象。当然也可以直接在main函数中创建和启动对象。
Step5、使用 OSKernelStart
启动 RTOS
调度器,该函数会配置 system tick
定时器以及初始化 RTOS 相关中断。如果这个函数运行成功,则不会在返回,因此该函数之后的代码将不会被执行。
🚨 🚨 🚨 注意:在上述流程之后,不推荐应用程序修改NVIC的优先级和分组;在执行 osKernelStart
之前,只能调用 osKernelGetInfo
、osKernelGetState
和对象创建函数(osXxxNew
)。
- 代码
__WEAK void software_init_hook (void) { __asm ( \".syntax unified\\n\" \".thumb\\n\" \"movs r0,#0\\n\" \"movs r1,#0\\n\" \"mov r4,r0\\n\" \"mov r5,r1\\n\" \"bl SystemCoreClockUpdate\\n\" \"bl osKernelInitialize\\n\" \"ldr r0,= __libc_fini_array\\n\" \"bl atexit\\n\" \"bl __libc_init_array\\n\" \"mov r0,r4\\n\" \"mov r1,r5\\n\" \"bl set_main_stack\\n\" \"ldr r0,=main\\n\" \"movs r1,#0\\n\" \"ldr r2,=os_thread_attr_main\\n\" \"bl osThreadNew\\n\" \"bl osKernelStart\\n\" \"bl exit\\n\" );}
- 参数/函数讲解
这段代码是一个软件初始化钩子函数,使用了 __WEAK
关键字,表示这是一个弱符号,允许在其他地方重新定义同名函数。函数内部包含了一段嵌入式汇编代码,执行了一系列初始化操作,主要用于系统启动时进行一些必要的初始化工作。
1.2 系统 main 函数
执行完成这些创建好主线程后,就能来到 main
函数了,因为第一个线程os_thread_attr_main
就是 main
,可以在 main.cpp
文件中看到该 main
函数。
- 代码
这里由于 main
函数代码过多,这里不就放出来了,只讲解一下其中的各个函数作用。
int main(void){ uint8_t sys_case = 0; int ret = 0;#if !defined(BLE_ONLY_ENABLED) app_wdt_open(15);#else app_wdt_open(30);#endif......省略后续......}
注意:该函数并不是完整的函数,只截取部分代码
- 参数/函数讲解
main
函数详细讲解,这些函数调用涉及到了系统的初始化、配置以及关机过程的一些操作:
<>
总结
感谢观看,这里就是 系统初始化 – main函数的讲解,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹
也欢迎你,关注我。👍 👍 👍
原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉
更多专栏订阅:
😀 【LeetCode题解(持续更新中)】
🥇 【恒玄BES】
🌼 【鸿蒙系统】
💎 【蓝牙协议栈】
🎃 【死机分析】
👑 【Python脚本笔记】
🚝 【Java Web项目构建过程】
💛 【微信小程序开发教程】
⚽ 【JavaScript随手笔记】
🤩 【大数据学习笔记(华为云)】
🦄 【程序错误解决方法(建议收藏)】
🔐 【Git 学习笔记】
🚀 【软件安装教程】
订阅更多,你们将会看到更多的优质内容!!