RT-Thread线程构建
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线程构建的更多相关文章
- QT5 Thread线程
QT5 Thread线程继承QThread方式 一.首先分析一下 QTimer Class与 Sleep()函数之间的秘密 QTimer *t = new QTimer(*parent); //创建Q ...
- Thread 线程池
Thread 线程池: 当使用多个较短存活期的线程有利时,运用线程池技术可以发挥作用.运用这一技术时,不是为每个任务创建一个全新的线程,而可以从线程池中抽出线程,并分配给任务.当线程完成任务后,再把它 ...
- 学习接水系统(java+thread线程)
(一)项目框架分析 对于学生并发接水项目,根据面向对象的思想,需要创建两个对象,即学生和水龙头. 接下来主要讲解不排队接水和排队接水两张情况. 项目的目录文件如下: (二)不排队接水 假设有四个学生小 ...
- Thread线程join方法自我理解
Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...
- java 并发(三)---Thread 线程
Thread 的状态 线程共有五种状态.分别是: (1)新建 (2)就绪 (3)运行 (4)阻塞 (5)死亡 ,下面列列举的状态需要结合状态示意图更好理解. 新建状态(New): 新创建了一个线程对 ...
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- Thread线程的基础知识及常见疑惑点
引言 相信各位道友在平时工作中已经很少直接用到Thread线程类了,现在大多是通过线程池或者一些多线程框架来操作线程任务,但我觉得还是有必要了解清楚Thread线程类中各种方法的含义,了解了底层才能更 ...
- Thread线程框架学习
原文:https://www.cnblogs.com/wangkeqin/p/9351299.html Thread线程框架 线程定义:线程可以理解为一个特立独行的函数.其存在的意义,就是并行,避免了 ...
- RT Thread 通过ENV来配置SFUD,操作SPI Flash
本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...
- std::thread线程库详解(2)
目录 目录 简介 最基本的锁 std::mutex 使用 方法和属性 递归锁 std::recursive_mutex 共享锁 std::shared_mutex (C++17) 带超时的锁 总结 简 ...
随机推荐
- wireshark抓包教程详解
https://blog.csdn.net/lixinkuan328/article/details/122985439 Wireshark 的抓包和分析,看这篇就够了!:https://blog.c ...
- VUE2.x原理之Object.defineProperty()
Object.defineProperty()语法说明 Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性 Object.defineP ...
- 集合-ArrayList 源码分析
1.概述 ArrayList 是一种变长的集合类,基于定长数组实现.ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个 ...
- 阿里巴巴为什么这样强制从List中删除元素
还是先举个例子,你侄女对天文知识感兴趣,然后你就用程序写了太阳系九大星系(水星.金星.地球.火星.木星.土星.天王星.海王星.冥王星)的运行轨迹图,然后拿给侄女看.然后她说错了错了,你的知识太旧了,多 ...
- kubernetes核心实战(五)--- StatefulSets
7.StatefulSets StatefulSet 是用来管理有状态应用的工作负载 API 对象. StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod ...
- Ansible 安装并简单使用
Ansible 简介 Ansible 是一款 IT 自动化工具.主要应用场景有配置系统.软件部署.持续发布及不停服平滑滚动更新的高级任务编排. Ansible 本身非常简单易用,同时注重安全和可靠性, ...
- 【性能优化】优雅地优化慢查询:缓存+SQL修改组合拳
问题描述 单例数据库模式中,后端高并发请求多(读多写少),导致数据库压力过大,关键接口响应变慢,严重影响体验. 需求 减少接口的响应时间. 寻找解决方案 由于问题主要处在数据库压力过大的情况,采用两种 ...
- mysql 清空数据表id 重1开始 帝国cms清空数据表id 重1开始
alter table phome_ecms_news auto_increment=1; alter table phome_ecms_news_check auto_increment=1; al ...
- 基于Python的爬虫案例
案例1:使用爬虫爬取京东华为手机用户评论 本案例借鉴哔哩哔哩博客主视频教程,感谢其教程为我开启了爬虫之旅:https://www.bilibili.com/video/BV1Yt4y1Y7nt?t=3 ...
- [Pytorch框架] 1.2、Pytorch环境搭建
文章目录 1.2 Pytorch环境搭建 1.2.1 安装Pytorch 1.2.2 配置 Jupyter Notebook 1.2.3 测试 1.2.4 问题解决 问题1:启动python提示编码错 ...