第三章 FreeRTOS任務基礎知識

第三章 FreeRTOS任務基礎知識

1、任務特性

  • 1、簡單
  • 2、沒有使用限制
  • 3、支持搶佔
  • 4、支持優先級設置
  • 5、每個任務都有堆棧導致RAM(運行內存)的增大
  • 6、如果使用搶佔的話必須仔細的考慮重入的問題

2、任務狀態

在這裏插入圖片描述
1、運行態:在當前狀態下運行的任務
2、就緒態:處於準備好的任務,等待運行態任務結束運行
3、阻塞態:等待某個觸發的時間時,稱之爲阻塞態
4、掛起態:暫停運行某個任務

3、任務優先級

任務優先級決定了任務的執行優先級級別,在FreeRTOS中,任務優先級的可選範圍爲:
0~configMAX_PRIORITIES-1
注:數字越大,優先級越高,0優先級我們不能使用,留給系統的滴答定時器內核使用。

4、任務實現

/*任務實現的基本框架 */
void vATaskFunction(void *pvParameters)
{
	while(1)
	{
	    task_func();//注:這個代表的是自己編寫的一些任務函數,不是僅僅一個函數
	    vTaskDelay();//任務delay函數,當執行完上述程序以後,此時可以進行任務切換,並且任務是內部自動切換任務,無需自己切換
	}
	vTaskDelete(NULL);
}

// 注: vTaskDelay();可以引起(觸發)任務調度函數的切換。

5、任務控制塊

描述任務屬性的數據結構稱之爲任務控制塊,爲TCB_t.

typedef struct tskTaskControlBlock
{
	volatile StackType_t *pxTopOfStack;
	#if(portUSING_MPU_WRAPPERS==1)
		xMPU_STTINGS   xMPUSettings;
	#endif 
	ListItem_t    xStateListItem ;
	...
	...
} taskTCB ;
typedef taskTCB TCB_t;

5、任務堆棧

堆棧:保存一個任務的內存或者寄存器的但前的情況,如果在一個任務中定義的有大量寄存器的值和定義的變量的值,那麼堆棧的空間需要更大一些,否則會出現錯誤或者死機的情況。

舉例說明:
在一個任務中要定義以下基本框架

//任務優先級
#define LED1_TASK_PRIO      3
//任務堆棧大小
#define LED1_STK_SIZE		50	//注:1個size是4個字節,所以這裏是4*50=200字節
//任務句柄
TaskHandle_t LED1Task_Handler;
//任務函數
void led1_task(void *pvParameters) ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章