STM32 RT-Thread Nano(2)创建动态线程

本文在第一篇文章的基础上,即移植RT-Thread Nano后创建一个动态线程,实现LED4间隔500毫秒的亮灭。

开发平台:Keil MDK 5.24

硬件平台:XNUCLEO-F103RB 链接地址

移植系统:RT-Thread Nano V3.1.3 下载链接

这部分并不复杂,直接上代码

#include <rtthread.h>
#include "stm32f10x.h"
#include "gpio.h"


static void led_thread_init(void);
static void led_thread_entry(void);

int main(void)
{
    GpioInit();

    led_thread_init();

    while(1)
    {
        /* LED3间隔2秒亮灭 */
        GPIO_WriteBit(LED3_GPIO_Port, LED3_GPIO_Pin, Bit_SET);
        rt_thread_mdelay(2000); 
        GPIO_WriteBit(LED3_GPIO_Port, LED3_GPIO_Pin, Bit_RESET);
        rt_thread_mdelay(2000);
    }
    
    return 0;
}


/* led4线程初始化 */
static void led_thread_init(void)
{
    /* 创建线程 */
    rt_thread_t led_task_tid = rt_thread_create("led4",/* 线程名称 */
                            led_thread_entry, RT_NULL,
                            1024, 3, 10); //
    if(led_task_tid != RT_NULL)
    {
        /* 启动线程 */
        rt_thread_startup(led_task_tid);
        rt_kprintf("LED4 thread is already started\n");
    }
    else
    {
        rt_kprintf("LED4 thread is not started\n");
    }
}


static void led_thread_entry(void)
{
    while(1)
    {
        /* LED4间隔500ms亮灭 */
        GPIO_WriteBit(LED4_GPIO_Port, LED4_GPIO_Pin, Bit_SET);
        rt_thread_mdelay(500); 
        GPIO_WriteBit(LED4_GPIO_Port, LED4_GPIO_Pin, Bit_RESET);
        rt_thread_mdelay(500);
    }
}

下载程序后,通过控制台可以看到(关于控制台在第三篇介绍)可以看到闪烁LED4的线程的信息,下图中led4即为我们创建线程时写入的名称。

rt_thread_t led_task_tid = rt_thread_create("led4",/* 线程名称 */
                            led_thread_entry, RT_NULL,1024, 3, 10);

实现现象:

从上面程序和实验可以看出,LED3间隔2秒亮灭,LED4间隔500毫秒亮灭,主程序程序上的rt_thread_mdelay(2000)并有没有影响到线程上的LED4的闪烁。RT-Thread 提供的 rt_thread_mdelay() 函数可以引起操作系统进行调度,当调用该函数进行延时时,本线程将不占用 CPU,调度器切换到系统的其他线程开始运行。而裸机的 delay 函数是一直占用 CPU 运行的。

扫描二维码关注公众号,回复: 9115760 查看本文章
发布了3 篇原创文章 · 获赞 0 · 访问量 56

猜你喜欢

转载自blog.csdn.net/killercode11/article/details/104267005
今日推荐