1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| #include "rtthread.h"
#include "main.h"
/*
*************************************************************************
* 变量
*************************************************************************
*/
/* 定义线程控制块 */
static rt_thread_t usart_thread = RT_NULL;
/* 定义消息队列控制块 */
rt_mq_t test_mq = RT_NULL;
/*
*************************************************************************
* 函数声明
*************************************************************************
*/
static void usart_thread_entry(void* parameter);
/************************* 全局变量声明 ****************************/
int main(void)
{
/* 创建一个消息队列 */
test_mq = rt_mq_create("test_mq",/* 消息队列名字 */
USART_RX_BUFF_SIZE, /* 消息的最大长度 */
2, /* 消息队列的最大容量 */
RT_IPC_FLAG_FIFO);/* 队列模式 FIFO(0x00)*/
if (test_mq != RT_NULL)
rt_kprintf("queue success\n\n");
usart_thread = /* 线程控制块指针 */
rt_thread_create( "usart", /* 线程名字 */
usart_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
2, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (usart_thread != RT_NULL)
rt_thread_startup(usart_thread);
else
return -1;
}
/**
* @brief alloc_thread线程主体
* @param parameter 参数
* @retval 无
*/
static void usart_thread_entry(void* parameter)
{
rt_err_t uwRet = RT_EOK;
uint8_t r_queue[USART_RX_BUFF_SIZE];
while (1)
{
uwRet = rt_mq_recv(test_mq, /* 读取(接收)队列的ID(句柄) */
&r_queue, /* 读取(接收)的数据保存位置 */
USART_RX_BUFF_SIZE, /* 读取(接收)的数据的长度 */
RT_WAITING_FOREVER); /* 等待时间:一直等 */
if(RT_EOK == uwRet)
{
rt_kprintf("data:%s\n",r_queue);
memset(r_queue,0,USART_RX_BUFF_SIZE);
LED1_TOGGLE;
}
}
}
|