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 查看线程大小分配情况

相关推荐
CS Beginner10 分钟前
【搭建】个人博客网站的搭建
java·前端·学习·servlet·log4j·mybatis
JavaTree20171 小时前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·后端
lang201509281 小时前
Maven 五分钟入门
java·maven
cj6341181501 小时前
SpringBoot配置Redis
java·后端
用坏多个鼠标1 小时前
Nacos和Nginx集群,项目启动失败问题
java·开发语言
满天星83035771 小时前
【C++】右值引用和移动语义
开发语言·c++·redis·visual studio
消失的旧时光-19432 小时前
c语言 内存管理(malloc, calloc, free)
c语言·开发语言
歪歪1002 小时前
在C#中除了按属性排序,集合可视化器还有哪些辅助筛选的方法?
开发语言·前端·ide·c#·visual studio
degen_2 小时前
注册协议通知
c语言·笔记
TangKenny2 小时前
基于EasyExcel的动态列映射读取方案
java·easyexcel