任务5: 按下按键4,关闭软件定时器,挂起任务6,并删除自身任务。 每隔2.5S,采集自己任务的优先级,并上报。上报数据例如:pri=3;
时间: 2023-10-23 13:14:13 浏览: 71
基于PHP开发的秒级任务定时器, 配置简单
以下是示例代码:
```C
#include "FreeRTOS.h"
#include "task.h"
// 定义任务句柄
TaskHandle_t xTaskHandle_6 = NULL;
TaskHandle_t xTaskHandle_5 = NULL;
// 定义定时器句柄
TimerHandle_t xTimerHandle = NULL;
// 定义任务6的优先级
#define TASK_6_PRIORITY 3
// 定义定时器超时回调函数
void vTimerCallback(TimerHandle_t xTimer)
{
// 获取当前任务的优先级
int priority = uxTaskPriority(NULL);
// 上报优先级
printf("pri=%d;\n", priority);
}
// 任务6
void vTask6(void *pvParameters)
{
while (1)
{
printf("Task 6 is running.\n");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
// 任务5
void vTask5(void *pvParameters)
{
// 创建定时器,定时周期为2.5秒,绑定超时回调函数
xTimerHandle = xTimerCreate("Timer", 2500 / portTICK_PERIOD_MS, pdTRUE, NULL, vTimerCallback);
while (1)
{
// 等待按键4被按下
if (button4_pressed())
{
// 关闭定时器
xTimerStop(xTimerHandle, 0);
// 暂停任务6
vTaskSuspend(xTaskHandle_6);
// 删除自身任务
vTaskDelete(NULL);
}
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
int main(void)
{
// 创建任务6
xTaskCreate(vTask6, "Task 6", configMINIMAL_STACK_SIZE, NULL, TASK_6_PRIORITY, &xTaskHandle_6);
// 创建任务5
xTaskCreate(vTask5, "Task 5", configMINIMAL_STACK_SIZE, NULL, 2, &xTaskHandle_5);
// 启动调度器
vTaskStartScheduler();
return 0;
}
```
在任务5中,我们创建了一个定时器,定时周期为2.5秒,绑定了一个超时回调函数vTimerCallback。在回调函数中,我们获取当前任务的优先级,然后将其上报。当按键4被按下时,我们关闭了定时器,暂停了任务6,并删除了任务5自身。
阅读全文