RT-Thread 操作系统的启动过程如下

main()函数作为其中的一个线程在运行。

如果想新建一个线程,和main()线程并行运行,步骤如下:

  第一步:线程初始化函数申明 static void LED1_thread_init(void);

  第二步:定义线程堆栈大小static  rt_uint8_t  RT_LED1_STACK[2048];

  第三步:定义线程结构体变量 struct  rt_thread  LED1;

  第四步:定义线程入口函数

void thread_entry_LED1(void * parameter)

{

MX_GPIO_Init();  //必不可少

while(1)

{

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); //PA0=0,LED ON

rt_thread_mdelay(300);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); //PA0=1,LED OFF

rt_thread_mdelay(300);

rt_kprintf("thread %d is running ,thread %d count = %d\n", 2 , 5 , 34);

}

}

      第五步:初始化线程并启动线程,类似于初始化函数和启动函数,见图。

①和第三步所构建的线程结构体名称相同

②和入口函数名称相同

③④堆栈数组名

⑤优先级

⑥时间片,如果时间片到了就重置时间片,调用rt_thread_yield()让出CPU。

⑦启动线程

⑧指示性语句,可有可无

     第六步:只有执行LED1_thread_init()才会启动此线程;可在main()函数中如图2-12-8所示启动静态线程。

实验现象:主线程main()和LED1线程各自不受干扰的闪烁;串口发送不同的内容到计算机,表明main线程和LED1线程全部工作。

rt_thread_mdelay(300);是延时300ms的函数,但是这个函数并不独子占用CPU,即这个函数会被分割成很多的时间片去分别执行,而不是一直连续执行到结束。

通过类似的方法可以添加更多的线程。

RT-Thread线程构建的更多相关文章

  1. QT5 Thread线程

    QT5 Thread线程继承QThread方式 一.首先分析一下 QTimer Class与 Sleep()函数之间的秘密 QTimer *t = new QTimer(*parent); //创建Q ...

  2. Thread 线程池

    Thread 线程池: 当使用多个较短存活期的线程有利时,运用线程池技术可以发挥作用.运用这一技术时,不是为每个任务创建一个全新的线程,而可以从线程池中抽出线程,并分配给任务.当线程完成任务后,再把它 ...

  3. 学习接水系统(java+thread线程)

    (一)项目框架分析 对于学生并发接水项目,根据面向对象的思想,需要创建两个对象,即学生和水龙头. 接下来主要讲解不排队接水和排队接水两张情况. 项目的目录文件如下: (二)不排队接水 假设有四个学生小 ...

  4. Thread线程join方法自我理解

    Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...

  5. java 并发(三)---Thread 线程

    Thread 的状态 线程共有五种状态.分别是: (1)新建 (2)就绪 (3)运行 (4)阻塞 (5)死亡 ,下面列列举的状态需要结合状态示意图更好理解.  新建状态(New): 新创建了一个线程对 ...

  6. c++11中关于`std::thread`线程传参的思考

    关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...

  7. Thread线程的基础知识及常见疑惑点

    引言 相信各位道友在平时工作中已经很少直接用到Thread线程类了,现在大多是通过线程池或者一些多线程框架来操作线程任务,但我觉得还是有必要了解清楚Thread线程类中各种方法的含义,了解了底层才能更 ...

  8. Thread线程框架学习

    原文:https://www.cnblogs.com/wangkeqin/p/9351299.html Thread线程框架 线程定义:线程可以理解为一个特立独行的函数.其存在的意义,就是并行,避免了 ...

  9. RT Thread 通过ENV来配置SFUD,操作SPI Flash

    本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...

  10. std::thread线程库详解(2)

    目录 目录 简介 最基本的锁 std::mutex 使用 方法和属性 递归锁 std::recursive_mutex 共享锁 std::shared_mutex (C++17) 带超时的锁 总结 简 ...

随机推荐

  1. day13-SpringBoot整合MyBatis/Plus

    SpringBoot整合MyBatis/Plus 1.SpringBoot整合MyBatis 1.1整合案例 需求:整合SpringBoot和Mybatis,向数据库中查询数据. 项目结构: 1.1. ...

  2. Hugging News #0324: 🤖️ 黑客松结果揭晓、一键部署谷歌最新大语言模型、Gradio 新版发布,更新超多!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  3. flutter widget---->Spacer

    如果你想灵活控制Flex容器(Row, Column)中子组件中的间隔,可以考虑使用Spacer.下面以Row为例子,来为它的子组件添加间距. use Spacer import 'package:f ...

  4. 升级pip报错ERROR: Could not install packages due to an OSError: [WinError 5]

    今天在安装python第三方库时,提示pip需要升级,没有多想直接升级,结果报错: 1 ERROR: Could not install packages due to an OSError: [Wi ...

  5. ChatGPT 开源了第一款插件,都来学习一下源码吧!

    3 月 23 日,OpenAI 又投出了一枚重磅炸弹:为 ChatGPT 推出插件系统! 此举意味着 ChatGPT 将迎来"APP Store"时刻,也就是围绕它的能力,形成一个 ...

  6. 前端ffmpeg实现视频剪切

    利用ffmpeg实现纯前端视频剪切 注意:在新版本Chrome浏览器中由于安全性问题,只能在https或localhost当中才能正常使用 1. 下载ffmpeg npm install @ffmpe ...

  7. [网络/Java EE/Web]Tomcat/Nginx中配置全局的安全响应头(header)——X-Frame-Options / X-XSS-Protection / X-Content-Options

    Step1 配置Tomcat step1.1 查看是否已配置目标的HTTP网络安全头 方式1 – Tomcat / conf/web.xml cat /opt/myTomcat/conf/web.xm ...

  8. 【Zookeeper】(一)概述与内部原理

    Zookeeper概述 1 概述 Zookeeper是一个开源的.分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式的角度来看,是一个基于观察者模式设计的分布式服务管 ...

  9. vue自定义密码输入框解决浏览器自动填充密码的问题

    pre { overflow-y: auto; max-height: 300px } img { max-width: 500px; max-height: 300px } 问题描述 浏览器对于ty ...

  10. 道德与社会问题简报 #3: Hugging Face 上的道德开放性

    使命: 开放和优秀的机器学习 在我们的使命中,我们致力于推动机器学习 (ML) 的民主化,我们在研究如何支持 ML 社区工作并有助于检查危害和防止可能的危害发生.开放式的发展和科学可以分散力量,让许多 ...