freertos教程
xTaskCreate 创建任务
在cmsis.os2.c中抽象出统一接口 osTrhreadNew函数来创建任务
Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组 - uTank - 博客园
r0在低位存在低地址
lr在高位存在高地址
volatile
TaskHandle_t PlayMusicTaskHandle=NULL;
extern void PlayMusic(void *params);
static uint8_t g_state=1;
void MyTask_playmusic(void *argument)
{uint8_t dev, data;for(;;){//读取红外遥控器*/if (0 == IRReceiver_Read(&dev, &data))//接受到数据{if(0x2==data)//创建任务{if (PlayMusicTaskHandle == NULL)//第一次创建任务{LCD_ClearLine(0, 0);LCD_PrintString(0, 0, "Create Task");xTaskCreate(PlayMusic, "SoundTask", 128, NULL,osPriorityNormal+1, &PlayMusicTaskHandle);}else//暂停或恢复{if(g_state)//暂停{LCD_ClearLine(0, 0);LCD_PrintString(0, 0, "pause Task");vTaskSuspend(PlayMusicTaskHandle);g_state=0;}else//继续{LCD_ClearLine(0, 0);LCD_PrintString(0, 0, "continue Task");vTaskResume(PlayMusicTaskHandle);g_state=1;}}}else if(0x22==data)///* 删除播放音乐的任务*/{if (PlayMusicTaskHandle != NULL){LCD_ClearLine(0, 0);LCD_PrintString(0, 0, "Delete Task");vTaskDelete(PlayMusicTaskHandle);ActiveBuzzer_Init();ActiveBuzzer_Control(0);/* 停止蜂鸣器*/PlayMusicTaskHandle = NULL;}}}}}
通过firstmytask_1任务管理这个音乐播放任务SoundTask x
任务 xTaskCreate(MyTask_playmusic,"firstmytask_1",128,NULL,osPriorityNormal,NULL);
管理这个音乐播放任务SoundTask xTaskCreate(PlayMusic, "SoundTask", 128, NULL,osPriorityNormal+1, &PlayMusicTaskHandle);
vTaskDelay(n)时,进入、退出vTaskDelay 的时间间隔至少是n 个Tick
preTime = xTaskGetTickCount();
该函数返回从系统启动并开始调度任务以来经过的 系统节拍数(tick count)。系统节拍是 FreeRTOS 的时间基准,由配置的系统时钟频率决定。
-
时间计算:
- 1 个节拍的时长 = 1 / 系统节拍频率(
configTICK_RATE_HZ
) - 例如:若
configTICK_RATE_HZ
配置为 1000,则 1 个节拍 = 1ms
- 1 个节拍的时长 = 1 / 系统节拍频率(