在阻塞狀態(tài)中 可以空閑出時間 來讓低優(yōu)先級的任務可以進行
有兩種阻塞延時 一個是相對延時 也就是?
osDelay(500);
這樣的osDelay可以讓在到這里的時候,延時500ms
也就是程序到這里才500ms 不記程序前面所用的時間
而還有一個絕對延時
vTaskDelayUntil(&xlastwakeTime,500);
絕對延時指的是 加上程序自己跑的時間 全部的一起500ms
前面的參數(shù)是可以理解成程序開始的標志的地址
完整代碼如:
void LED_Task2(void const * argument)
{
/* USER CODE BEGIN LED_Task2 */
TickType_t xlastwakeTime;
xlastwakeTime =xTaskGetTickCount();
/* Infinite loop */
for(;;)
{
printfl("task2\r\n");
HAL_Delay(200);
vTaskDelayUntil(&xlastwakeTime,500);
}
/* USER CODE END LED_Task2 */
}
這樣每次task2都500ms進入一次
500ms來一次
void LED_Task1(void const * argument)
{
/* USER CODE BEGIN LED_Task1 */
/* Infinite loop */
for(;;)
{
printfl("task1\r\n");
HAL_Delay(200);
osDelay(500);
}
/* USER CODE END LED_Task1 */
}
task1就700ms來一次,是這樣的
?設置按鍵任務? 用來刪除 創(chuàng)建 暫停 恢復任務
?
void key0_task(void const * argument)
{
/* USER CODE BEGIN key0_task */
static uint8_t Flag=1;
/* Infinite loop */
for(;;)
{
if(HAL_GPIO_ReadPin(key2_GPIO_Port,key2_Pin)==0)
{
osDelay(20);
if(HAL_GPIO_ReadPin(key2_GPIO_Port,key2_Pin)==0)
{
if(Flag==1)
{
printfl("paused!\r\n");
vTaskSuspend(LED2Handle);
Flag=0;
while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
}
else
{
printfl("hui fu 2!\r\n");
vTaskResume(LED2Handle);
Flag=1;
while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
}
}
}
}
/* USER CODE END key0_task */
}
暫?;謴腿蝿?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-631422.html
刪除重建任務文章來源地址http://www.zghlxwxcb.cn/news/detail-631422.html
void key1_task(void const * argument)
{
/* USER CODE BEGIN key1_task */
/* Infinite loop */
for(;;)
{
if(HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0)
{
osDelay(20);
if(HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0)
{
if(LED1Handle==NULL)
{
printfl("1 no ,creat 1\r\n");
osThreadDef(LED1, LED_Task1, osPriorityNormal, 0, 128);
LED1Handle = osThreadCreate(osThread(LED1), NULL);
printfl("already creat1\r\n");
while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
}
else
{
printfl("delete 1");
vTaskDelete(LED1Handle);
LED1Handle=NULL;
while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
}
}
}
}
/* USER CODE END key1_task */
}
到了這里,關于STM32CubeMx學習FreeRTOS的絕對延時和相對延時的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!