业界动态
RT-Thread 中的多线程
2025-01-03 05:03

🌊 作者主页:苏州程序大白

🌊 作者简介🏆CSDN人工智能域优质创作者🥇,苏州市凯捷智能科技有限公司创始之一,目前合作公司富士康、歌尔等几家新能源公司

💬如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和C#、Halcon、python+opencv、VUE、各大公司面试等一些订阅专栏哦

💅 有任何问题欢迎私信,看到会及时回复

当调度器调度线程切换时,先将当前线程上下文保存起来,当再切回到这个线程时,线程调度器将该线程的上下文信息恢复。

系统线程是指由系统创建的线程,用户线程是由用户程序调用线程管理接口创建的线程,在 RT-Thread 内核中的系统线程有空闲线程和主线程。

 
 

空闲线程是系统创建的最低优先级的线程,线程状态永远为就绪态。当系统中无其他就绪线程存在时,调度器将调度到空闲线程,它通常是一个死循环,且永远不能被挂起。另外,空闲线程在 RT-Thread 也有着它的特殊用途

若某线程运行完毕,系统将自动删除线程:自动执行 ,先将该线程从系统就绪队列中删除,再将该线程的状态更改为关闭状态,不再参与系统调度,然后挂入 僵尸队列(资源未回收、处于关闭状态的线程队列)中,最后空闲线程会回收被删除线程的资源。

空闲线程也提供了接口来运行用户设置的钩子函数,在空闲线程运行时会调用该钩子函数,适合钩入功耗管理、看门狗喂狗等工作。

 

系统启动后先从汇编代码 s 开始运行,然后跳转到 C 代码执行该代码 中执行了一些启动初始化工作

 

这部分启动代码,大致可以分为四个部分

1、初始化与系统相关的硬件

2、初始化系统内核对象,例如定时器、调度器、信号

3、创建 main 线程,在 main 线程中对各类模块依次进行初始化

4、初始化定时器线程、空闲线程,并启动调度器。

在 创建了主线程。

 
 
 
 
 

自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。

在系统启动流程图中,有两个函数: 与 ,其后的带底色方框内部的函数表示被自动初始化的函数,其中

1、“board init functions” 为所有通过 INIT_BOARD_EXPORT(fn) 申明的初始化函数。

2、“pre-initialization functions” 为所有通过 INIT_PREV_EXPORT(fn)申明的初始化函数。

3、“device init functions” 为所有通过 INIT_DEVICE_EXPORT(fn) 申明的初始化函数。

4、“components init functions” 为所有通过 INIT_COMPONENT_EXPORT(fn)申明的初始化函数。

5、“enviroment init functions” 为所有通过 INIT_ENV_EXPORT(fn) 申明的初始化函数。

6、“application init functions” 为所有通过 INIT_APP_EXPORT(fn)申明的初始化函数。

用来实现自动初始化功能的宏接口定义详细描述如下表所示

初始化顺序宏接口描述1INIT_BOARD_EXPORT(fn)非常早期的初始化,此时调度器还未启动2INIT_PREV_EXPORT(fn)主要是用于纯软件的初始化、没有太多依赖的函数3INIT_DEVICE_EXPORT(fn)外设驱动初始化相关,比如网卡设备4INIT_COMPONENT_EXPORT(fn)组件初始化,比如文件系统或者 LWIP5INIT_ENV_EXPORT(fn)系统环境初始化,比如挂载文件系统6INIT_APP_EXPORT(fn)应用初始化,比如 GUI 应用

初始化函数主动通过这些宏接口进行申明,如 INIT_BOARD_EXPORT(rt_hw_usart_init),链接器会自动收集所有被申明的初始化函数,放到 RTI 符号段中,该符号段位于内存分布的 RO 段中,该 RTI 符号段中的所有函数在系统初始化时会被自动调用。

例如

 
 

前面我们在潘多拉STM32L4上实现了一个按键控制 LED 和蜂鸣器的例子, 现在我们让该功能独立存在于一个文件中并自动启动独立线程执行。

在 创建文件 文件,然后修改 配置文件

 

接下来打开 Evn 生成新的 MDK5 工程 :

 

实现的代码如下

 

此时的 main 函数是空的,如下

 

此例中我们使用的是 进行动态创建,另外还有一个 可以初始化一个静态线程对象,有一点区别可以看源码,我们一般使用 创建线程。

 

这里需要注意的是线程优先级字段是一个 rt_uint8_t 的类型,所以不可用宏定义去定义优先级。

还有一个参数在使用上可能比较疑惑,那就是 ,设置多大合适呢?一般情况下我们先设置一个值,然后在 FinSH 控制台中使用 查看使用情况

我们设置的这个栈大小就比较合适,一般情况下使用率在 70% 附近比较理想,当然可以根据情况调整,不要浪费资源。

这里有各种学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。 ​ ​

❤️关注苏州程序大白公众号❤️

👇 👇👇
    以上就是本篇文章【RT-Thread 中的多线程】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/news/15045.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 https://sicmodule.kub2b.com/mobile/ , 查看更多   
最新文章
手机单扬声器和双扬声器有什么区别?原来差别这么大手机扬声器「手机单扬声器和双扬声器有什么区别?原来差别这么大」
随着手机的普及和发展,音频体验成为消费者选择手机的重要因素之一。而在手机音频方面,单扬声器和双扬声器是常见的设计方案。那
手机维修知识大全维修手机「手机维修知识大全」
修理手机维修知识大全手机是高科技精密电子产品。工作原理、制造工艺、软件和硬件、测试、技术标准在所有的电器设备中是最复杂的
2k分辨率手机有哪些(2k分辨率的手机哪款性价比最高)
  关于《2K分辨率手机有哪些》的文章  随着科技的不断发展,手机已经成为了我们日常生活中不可或缺的一部分。而在手机的各种
红手指云手机苹果版(红雀浏览器) v1.0.23 iPhone版红手指云手机「红手指云手机苹果版(红雀浏览器) v1.0.23 iPhone版」
红手指手游专用虚拟手机是一款非常实用的手机挂机软件,在这里玩家随时随地离线挂机、自动帮助你闯关升级,非常强大的游戏挂机神
1手机2(一加11手机)
  《手机2》:探索科技与生活的无限可能  在当今数字化时代,智能手机无疑是我们生活中不可或缺的一部分。随着科技的飞速发
手机NFC是什么?怎么使用?手机nfc「手机NFC是什么?怎么使用?」
但很多人不知道的是,除了这三种无线通信技术外,很多智能手机里还有一种无线通信技术,那就是NFC。2004年,飞利浦半导体,诺基
360手机 官网(360手机官网入口)
  探索《360手机官网》:一站式手机技术与服务的平台  在当今数字化时代,手机已经成为我们日常生活中不可或缺的一部分。而
关于手机电池的冷知识:机身温度过高,会永久降低手机电池容量手机电量「关于手机电池的冷知识:机身温度过高,会永久降低手机电池容量」
相信大家在日常使用手机时,最关注的就是我们手机的电量还剩多少,尤其是现在我们一般出门都不带现金,直接通过手机进行支付,所
260手机助手(360手机助手官方版下载)
  《260手机助手》:一站式手机管理和服务的新选择  随着智能手机的普及,我们的生活越来越离不开手机。为了更好地管理和优
小米发布迄今最强被动散热系统,两倍于VC散热,原神满帧运行手机散热「小米发布迄今最强被动散热系统,两倍于VC散热,原神满帧运行」
你的手机“烫”吗? 玩局游戏,瞬间化身暖手宝?拍拍视频就过热,需要“冷静”一下才能继续使用!充电是很快,温度升的也很快…