目录
打开工程,在application下找到main.c文件打开
在主函数中设置IO为输出模式,再调用thread_sample()
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,
下载失败可能是调试器没有选对