目录
2.L6218E:xTimerPendFunctionCallFromISR报错
L6218E:xTimerCreateTimerTask报错
实验名字:队列操作实验
1、实验目的
学习使用 FreeRTOS 的队列相关 API 函数,学会如何在任务或中断中向队列发送消息或者 从队列中接收消息。
2、实验设计
本实验设计三个任务:start_task、task1_task 、Keyprocess_task 这三个任务的任务功能如下: start_task:用来创建其他 2 个任务。
task1_task :读取按键的键值,然后将键值发送到队列 Key_Queue 中,并且检查队列的剩 余容量等信息。
Keyprocess_task :按键处理任务,读取队列 Key_Queue 中的消息,根据不同的消息值做相 应的处理。
实验需要三个按键 KEY_UP 、KEY2 和 KEY0 ,不同的按键对应不同的按键值, 任务 task1_task 会将这些值发送到队列 Key_Queue 中。
实验中创建了两个队列 Key_Queue 和 Message_Queue,队列 Key_Queue 用于传递按键值, 队列 Message_Queue 用于传递串口发送过来的消息。
实验还需要两个中断,一个是串口 1 接收中断,一个是定时器 2 中断,他们的作用如下: 串口 1 接收中断:接收串口发送过来的数据,并将接收到的数据发送到队列 Message_Queue 中。 定时器 2 中断:定时周期设置为 500ms,在定时中断中读取队列 Message_Queue 中的消息,并 将其显示在 LCD 上。
3、实验工程
下面是实验例程,有需要自取。
通过百度网盘分享的文件:FreeRTOS实验13-1 FreeRTOS队列操作实验
链接:https://pan.baidu.com/s/19wyteow1w0eVeIwCqQB7gg
提取码:y1bf
4、实验程序与分析
●任务设置
//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 256
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
//任务优先级
#define TASK1_TASK_PRIO 2
//任务堆栈大小
#define TASK1_STK_SIZE 256
//任务句柄
TaskHandle_t Task1Task_Handler;
//任务函数
void task1_task(void *pvParameters);
//任务优先级
#define KEYPROCESS_TASK_PRIO 3
//任务堆栈大小
#define KEYPROCESS_STK_SIZE 256
//任务句柄
TaskHandle_t Keyprocess_Handler;
//任务函数
void Keyprocess_task(void *pvParameters);
(1)、队列 Key_Queue 用来传递按键值的,也就是一个 u8 变量,所以队列长度为 1 就行了。 并且消息长度为 1 个字节。
(2)、队列 Message_Queue 用来传递串口接收到的数据,队列长度设置为 4,每个消息的长 度为 USART_REC_LEN(在 usart.h 中有定义)。