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

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)      

创建一个跑马灯线程

bash 复制代码
#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 查看线程大小分配情况

相关推荐
可涵不会debug6 分钟前
C++ std::bind 实战教程:线程池、回调场景全覆盖
linux·开发语言·c++
不正经的码狗9 分钟前
Java 开发环境搭建与 Eclipse 使用速通教程
java·开发语言·eclipse
用户81818706274610 分钟前
第37章 Java应用在K8s里的经典坑:容器内存/CPU limit与JVM参数不匹配导致的OOMKilled
java·后端
优化Henry15 分钟前
BBU与RRU光链路详解:从双纤一收一发到单纤双向
网络·笔记·学习·5g·tdd
yi01120 分钟前
DAY17: LeetCode 139|单词拆分:从“把单词删掉”到用 DP 记录合法切口
人工智能·笔记·python·算法·leetcode·动态规划
马剑威(威哥爱编程)23 分钟前
【AI全栈后端12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·人工智能·spring boot
阿钱真强道24 分钟前
24 嵌入式操作系统 | 项目启动与环境准备(PyQt5 / Flask 两个“最小可跑“)
开发语言·qt·flask·架构设计·协议契约
霸道流氓气质27 分钟前
AI模型幻觉检测与抑制完全指南:从规则引擎到RAG对比的Java生产级实战
java·开发语言·人工智能
前端 贾公子31 分钟前
LangChain核心组件 == 提示词(Prompts)
开发语言·c#
niucloud-admin38 分钟前
JAVA V6 多商户商城 开发文档——手机端前端
java·开发语言·前端