RT-Thread实现简单流水灯(使用RT-Thread Studio)

目录

1.创建项目

选择 文件->新建->RT-Thread项目

根据自己的芯片选择,选择相应的调试器,选择好之后点击完成

2.编写代码 

打开工程,在application下找到main.c文件打开

定义优先级、线程堆栈、以及开发板LED对应的IO口

 动态创建线程1

静态创建线程2

线程实例

在主函数中设置IO为输出模式,再调用thread_sample()

总体代码

 3.编译,下载验证

 4.然后就去看开发板现象吧


1.创建项目

选择 文件->新建->RT-Thread项目

根据自己的芯片选择,选择相应的调试器,选择好之后点击完成

  

2.编写代码 

打开工程,在application下找到main.c文件打开

定义优先级、线程堆栈、以及开发板LED对应的IO口

#define THREAD_PRIORITY         25   //优先级
#define THREAD_STACK_SIZE       512  //线程堆栈
#define THREAD_TIMESLICE        5    //时间片
//STM32F103RCT6
#define LED0_PIN    GET_PIN(A, 8) //PA8为LED0_PIN
#define LED1_PIN    GET_PIN(D, 2) //PD2为LED1_PIN

 动态创建线程1

static rt_thread_t tid1 = RT_NULL; //动态创建线程控制块

/* 线程 1 的入口函数 */
static void thread1_entry(void *parameter)
{

    while (1)
    {
        rt_pin_write(LED0_PIN, PIN_HIGH);
        rt_thread_mdelay(500); //延时500ms
        rt_pin_write(LED0_PIN, PIN_LOW);
        rt_thread_mdelay(500); 

    }
}

静态创建线程2

ALIGN(RT_ALIGN_SIZE)  //四字节对齐
static char thread2_stack[1024]; //静态堆栈
static struct rt_thread thread2; //静态创建线程控制块
/* 线程 2 入口 */
static void thread2_entry(void *param)
{
    while (1)
    {
        rt_pin_write(LED1_PIN, PIN_HIGH);
        rt_thread_mdelay(1000); //延时500ms
        rt_pin_write(LED1_PIN, PIN_LOW);
        rt_thread_mdelay(1000); //延时500ms
    }
}

线程实例

int thread_sample(void)
{
    /* 创建线程 1,名称是 thread1,入口是 thread1_entry,动态创建*/
    tid1 = rt_thread_create("thread1",
                                thread1_entry, RT_NULL,
                                THREAD_STACK_SIZE,
                                THREAD_PRIORITY, THREAD_TIMESLICE);
    /* 如果获得线程控制块,启动这个线程 */
        if (tid1 != RT_NULL)
            rt_thread_startup(tid1);

    /* 初始化线程 2,名称是 thread2,入口是 thread2_entry ,静态创建*/
   rt_thread_init(&thread2,
                  "thread2",
                  thread2_entry,
                  RT_NULL,
                  &thread2_stack[0],
                  sizeof(thread2_stack),
                  THREAD_PRIORITY - 1, THREAD_TIMESLICE);
   rt_thread_startup(&thread2);

   return 0;
}

在主函数中设置IO为输出模式,再调用thread_sample()

int main(void)
{
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
    thread_sample();
    while (1)
    {
        //LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(10);
    }

    return RT_EOK;
}

总体代码

#include <rtthread.h>
#include <rtdevice.h>
#include <rtdbg.h>
//#include <board.h>
#include <drv_common.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG

#define THREAD_PRIORITY         25   //优先级
#define THREAD_STACK_SIZE       512  //线程堆栈
#define THREAD_TIMESLICE        5    //时间片

#define LED0_PIN    GET_PIN(A, 8) //PA8为LED0_PIN
#define LED1_PIN    GET_PIN(D, 2) //PD2为LED1_PIN

static rt_thread_t tid1 = RT_NULL; //动态创建线程控制块

/* 线程 1 的入口函数 */
static void thread1_entry(void *parameter)
{

    while (1)
    {
        rt_pin_write(LED0_PIN, PIN_HIGH);
        rt_thread_mdelay(500); //延时500ms
        rt_pin_write(LED0_PIN, PIN_LOW);
        rt_thread_mdelay(500); //延时500ms

    }
}

ALIGN(RT_ALIGN_SIZE)  //四字节对齐
static char thread2_stack[1024]; //静态堆栈
static struct rt_thread thread2; //静态创建线程控制块
/* 线程 2 入口 */
static void thread2_entry(void *param)
{
    while (1)
    {
        rt_pin_write(LED1_PIN, PIN_HIGH);
        rt_thread_mdelay(1000); //延时500ms
        rt_pin_write(LED1_PIN, PIN_LOW);
        rt_thread_mdelay(1000); //延时500ms
    }
}

int thread_sample(void)
{
    /* 创建线程 1,名称是 thread1,入口是 thread1_entry,动态创建*/
    tid1 = rt_thread_create("thread1",
                                thread1_entry, RT_NULL,
                                THREAD_STACK_SIZE,
                                THREAD_PRIORITY, THREAD_TIMESLICE);
    /* 如果获得线程控制块,启动这个线程 */
        if (tid1 != RT_NULL)
            rt_thread_startup(tid1);

    /* 初始化线程 2,名称是 thread2,入口是 thread2_entry ,静态创建*/
   rt_thread_init(&thread2,
                  "thread2",
                  thread2_entry,
                  RT_NULL,
                  &thread2_stack[0],
                  sizeof(thread2_stack),
                  THREAD_PRIORITY - 1, THREAD_TIMESLICE);
   rt_thread_startup(&thread2);

   return 0;
}



int main(void)
{
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
    thread_sample();
    while (1)
    {
        //LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(10);
    }

    return RT_EOK;
}

 3.编译,下载验证

编译报错关于GET_PIN,可能是没有添加头文件#include <board.h>或者

#include <drv_common.h>,在common中定义了关于GET_PIN,

下载失败可能是调试器没有选对

 4.然后就去看开发板现象吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值