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;
}
测试效果