RT-Thread入门笔记4-跑马灯线程实例

news2024/12/24 8:50:39

RT-Thread操作系统是基于线程调度的多任务系统。

线程状态切换

调度过程是一种完全抢占式的基于优先级的调度算法。
支持8/32/256优先级,其中0表示最高,7/31/255表示最低。最低优先级7/31/255优先级用于空闲线程。
支持以相同优先级运行的线程。 共享时间片循环调度用于这种情况。
线程包含五种状态,操作系统会自动根据它运行的情况来动态调整它的状态。

在这里插入图片描述

状态描述
初始状态(RT_THREAD_INIT)当线程刚开始创建还没开始运行时就处于初始状态;在初始状态下,线程不参与调度。
就绪状态(RT_THREAD_READY)在就绪状态下,线程按照优先级排队,等待被执行;一旦当前线程运行完毕让出处理器,操作系统会马上寻找最高优先级的就绪态线程运行。
运行状态(RT_THREAD_RUNNING)线程当前正在运行。
挂起状态(RT_THREAD_SUSPEND)也称阻塞态。它可能因为资源不可用而挂起等待,或线程主动延时一段时间而挂起。在挂起状态下,线程不参与调度。
关闭状态(RT_THREAD_CLOSE)当线程运行结束时将处于关闭状态。关闭状态的线程不参与线程的调度。

GPIO驱动架构操作IO

IO初始化

    void rt_pin_mode(rt_base_t pin, rt_base_t mode)
                                                       PIN_MODE_OUTPUT
                                                       PIN_MODE_INPUT
                                                       PIN_MODE_INPUT_PULLUP
                                                       PIN_MODE_INPUT_PULLDOWN
                                                       PIN_MODE_OUTPUT_OD

IO写入

    void rt_pin_write(rt_base_t pin, rt_base_t value)      
                                                       PIN_HIGH
                                                       PIN_LOW    

IO读出

    int  rt_pin_read(rt_base_t pin)      

创建一个跑马灯线程

#include <rtdevice.h> //记得引用此头文件

static void led_entry(void *param)
{
	rt_pin_mode(14,PIN_MODE_OUTPUT);//设置f4引脚 drv_gpio.c中查看,设置为推挽输出
	while(1)
	{
		rt_pin_write(14,PIN_LOW);
		rt_thread_delay(50);    //rt_tread_mdelay(500); rt_rthread_sleep(50);
		rt_pin_write(14,PIN_HIGH);
		rt_thread_delay(50);
	}
}
void led_test(void)
{
	 rt_thread_t tid;
    /* 创建线程1ed,名称是led,入口是led_entry*/
    tid = rt_thread_create("led",
                            led_entry, RT_NULL,
                            512,
                            10, 10);
    
    /* 如果获得线程控制块,启动这个线程 */
    if (tid != RT_NULL)
        rt_thread_startup(tid);
}

tips:list_thread 查看线程大小分配情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1375809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…

jupyter notebook 配置conda 虚拟环境python

conda创建python环境 conda create -n openvoice python3.9 激活环境 source activate openvoice 在虚拟环境中安装ipykernel pip install ipykernel 添加虚拟环境进到 jupyter notebook python -m ipykernel install --user --name openvoice --display-name openvoice …

修改idea或者pycharm或者android studio的快捷键,快速跳转到行尾

ctrl enter这个快捷键是idea默认配置的&#xff0c;就是将光标所在的行切一刀&#xff0c;并且换到下一行。但是在我的开发习惯里面不怎么使用ctrl enter这个快捷键&#xff0c; 反而开发java或者flutter软件需要快速跳转到行尾添加分号 ; &#xff0c;但是使用end键脱离了我…

C++进阶(三)多态

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、多态的概念1、概念 二、多态的定义及实现1、多态的构成条件2、虚函数3、虚函数的重写4、C…

groovy XmlParser 递归遍历 xml 文件,修改并保存

使用 groovy.util.XmlParser 解析 xml 文件&#xff0c;对文件进行修改&#xff08;新增标签&#xff09;&#xff0c;然后保存。 是不是 XmlParser 没有提供方法遍历每个节点&#xff0c;难道要自己写&#xff1f; 什么是递归&#xff1f; 不用说&#xff0c;想必都懂得~ …

ERROR in Plugin “react“ was conflicted .... 天坑留念-turborepo、eslint plugin

前两天项目代码拉下来&#xff0c;装完依赖启动的时候直接报错&#xff1a; [eslint] Plugin "react" was conflicted between ".eslintrc.js eslint-config-custom eslint-config-alloy/react" and "BaseConfig D:\pan\erp\test\business-servic…

Java21 如何使用switch case

1. Java8 和 Java21 Java8 引入字符串和枚举 Java21 可以返回值, yield关键字, switch 表达式, 模式匹配, null值处理 2. 代码案例 1. Java8 public static void java8() {String day "tuesday";switch (day) {case "monday":System.out.println("w…

vue3+vite+ts+pinia新建项目(略详细版)

1、新建项目 npm create vite@latest 2、安装依赖 yarn add vue-router yarn add -D @types/node vite-plugin-pages sass sass-loader 3、配置别名 //vite.config.ts import { defineConfig } from vite import path from node:path export default defineConfig({ plu…

基于ssm快餐店点餐结算系统的设计与实现+vue论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装快餐店点餐结算系统软件来发挥其高效地信息处理的作用&…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中&#xff0c;可以用中文作为变量名&#xff0c;非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字&#xff0c;我们不能把它们用…

php大型酒店管理系统源码(多酒店版)带安装手册

php大型酒店管理系统源码(多酒店版&#xff09;带安装手册 系统的运行环境要求PHP7.2以上 功能介绍&#xff1a; 房间动态、房间管理、优惠活动、预定信息、商品管理、营业查询、交班管理 会员营销、查看房价、数据统计、客房服务、物品租借、夜审设置、系统设置 酒店设置、计费…

代码随想录day25 回溯算法加强练习

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数&#xff0c;并且每种组合中不存在重复的数字。 说明&#xff1a; 所有数字都是正整数。解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

金融中介管理系统,助您高效管理金融中介业务!

金融中介管理系统是一种用于有效管理金融中介业务的软件系统。它提供了一系列工具和功能&#xff0c;帮助金融中介机构简化和优化其日常运营和管理流程。 金融中介管理系统通常具有以下特点和功能&#xff1a; 1. 客户管理 系统可以帮助机构记录和管理客户信息、需求和交互历…

PDF修改技巧之:如何简单方便的编辑PDF文件?

在当今精通技术的世界中&#xff0c;PDF 的使用已变得普遍&#xff0c;尤其是在商业和教育方面。如果您在审阅 PDF 文件时遇到语法或其他错误怎么办&#xff1f; 尽管 PDF 文件不像 Word 或在线文档那样容易编辑&#xff0c;但借助高级工具&#xff0c;您一定可以进行编辑。 …

CodeWave智能开发平台--03--目标:应用创建--09供应商详情页面下

摘要 本文是网易数帆CodeWave智能开发平台系列的第13篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成09供应商详情页面下主营产品展示及权限管理 CodeWave智能开发平台的13次接触 CodeWave参考资源…

使用ffmpeg实现音频静音修剪

1 silenceremove介绍 本文主要介绍在 FFmpeg 命令中使用 silenceremove filter 进行音频静音的修剪。 1.1 start_x参数 参数名说明取值范围默认值start_periods设置是否应在音频开头修剪音频。0 表示不应从一开始就修剪静音。当指定一个非 0 值时&#xff0c;它会修剪音频直…

搜索与图论第二期 BFS

前言 BFS跟DFS同样重要&#xff0c;也一定要熟练的掌握&#xff01;&#xff01;&#xff01; 一、BFS的基本内容 BFS是从根节点开始&#xff0c;沿着树(图)的宽度遍历树(图)的节点。 如果所有节点均被访问&#xff0c;则算法中止。 BFS同样属于盲目搜索。 一般用队列数据结…

2. Presto应用

该笔记来源于网络&#xff0c;仅用于搜索学习&#xff0c;不保证所有内容正确。文章目录 1、Presto安装使用2、事件分析3、漏斗分析4、漏斗分析UDAF开发开发UDF插件开发UDAF插件 5、漏斗测试 1、Presto安装使用 参考官方文档&#xff1a;https://prestodb.io/docs/current/ P…

Hugging Face Datasets文本质量分析,识别低质量内容、垃圾数据、偏见内容、识别毒性内容、检测重复文档、识别测试集污染数据、识别过短的内容

Hugging Face Datasets文本质量分析,识别低质量内容、垃圾数据、偏见内容、识别毒性内容、检测重复文档、识别测试集污染数据、识别过短的内容。 在机器学习和自然语言处理的世界中,数据的质量至关重要。Hugging Face提供了大量的文本数据集,但是如何评估这些数据集的质量呢…

提升办公效率用微服务快速开发平台怎么样?

如果想实现高效率的办公&#xff0c;采用专业的微服务快速开发平台可以达到事半功倍的效果。什么是微服务快速开发平台&#xff1f;又有哪些优势和特点&#xff1f;可以用在哪些领域&#xff1f;流辰信息是专业的低代码技术平台服务商&#xff0c;具有丰富的研发经验&#xff0…