RT_Thread学习笔记(2) 线程测试

RT_Thread Studio 使用记录(2) 线程测试

1.硬件环境

开发版:正点原子F103ZET6版本

IO口:LED1->PB5;LED1->PE5;按键1->PE3;按键2->PE4

2.程序搭建

期望实现:LED反转+按键控制

RTT函数位置:
在这里插入图片描述

线程创建函数:

rt_thread_t rt_thread_create(const char *name,
                             void (*entry)(void *parameter),
                             void       *parameter,
                             rt_uint32_t stack_size, //线程栈大小
                             rt_uint8_t  priority, //优先级
                             rt_uint32_t tick) //时间片大小

创建 LED反转线程入口函数

static void Thread_LED_Toggle_Entry(void *parameter)
{
    while(1){
        rt_pin_write(LED_IO, 1);
        rt_thread_mdelay(500);
        rt_pin_write(LED_IO, 0);
        rt_thread_mdelay(500);
    }
}

创建按键检测线程入口函数

static void Thread_Button_Scan(void *parameter)
{
    int flag=1;
    int flag2=0;
    while(1){
        if(flag && (rt_pin_read(KEY1_IO)==0)){
            rt_thread_mdelay(10);
            flag=0;

            if(rt_pin_read(KEY1_IO)==0){
                flag2=0;
            }
        }else if(rt_pin_read(KEY1_IO)==1){
            flag=1;
            flag2=1;
        }

        rt_pin_write(LED_IO2, !flag2);
    }

}

创建动态线程-》LED反转线程

tid1=rt_thread_create("LED", Thread_LED_Toggle_Entry, (void*)1, 512, 5, 10);

线程栈大小512,优先级为5(范围是0-255),时间片为10


创建动态线程-》按键按键线程

tid2=rt_thread_create("Button", Thread_Button_Scan, (void*)2, 512, 5, 5);

完整代码

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

//#define DBG_TAG "main"
//#define DBG_LVL DBG_LOG
#include <rtdbg.h>

#define LED_IO GET_PIN(E,5)
#define LED_IO2 GET_PIN(B,5)

#define KEY1_IO GET_PIN(E,3)
#define KEY0_IO GET_PIN(E,4)

rt_thread_t tid1=RT_NULL;
rt_thread_t tid2=RT_NULL;

//LED 反转线程
static void Thread_LED_Toggle_Entry(void *parameter)
{
    while(1){
        rt_pin_write(LED_IO, 1);
        rt_thread_mdelay(500);
        rt_pin_write(LED_IO, 0);
        rt_thread_mdelay(500);
    }
}


static void Thread_Button_Scan(void *parameter)
{
    int flag=1;
    int flag2=0;
    while(1){
        if(flag && (rt_pin_read(KEY1_IO)==0)){
            rt_thread_mdelay(10);
            flag=0;

            if(rt_pin_read(KEY1_IO)==0){
                flag2=0;
            }
        }else if(rt_pin_read(KEY1_IO)==1){
            flag=1;
            flag2=1;
        }

        rt_pin_write(LED_IO2, !flag2);
    }

}



int main(void)
{
    rt_pin_mode(LED_IO, PIN_MODE_OUTPUT);
    rt_pin_mode(LED_IO2, PIN_MODE_OUTPUT);
    rt_pin_mode(KEY1_IO,PIN_MODE_INPUT);
    rt_pin_write(LED_IO, 1);//默认关灯

    tid1=rt_thread_create("LED", Thread_LED_Toggle_Entry, (void*)1, 512, 5, 10);
    if(tid1!=RT_NULL){
        rt_thread_startup(tid1);
    }

    tid2=rt_thread_create("Button", Thread_Button_Scan, (void*)2, 512, 5, 5);
    if(tid2!=RT_NULL){
        rt_thread_startup(tid2);
    }

    return RT_EOK;
}

测试效果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值