FreeRTOS 學習筆記2——task
阿新 • • 發佈:2021-01-01
FreeRTOS task manage study Note
FreeRTOS task manage study Notecreate
task priority
時間,tick
task 狀態
task block api
task idle hook function
task Priority set and get
task delete
Scheduling Algorithms
例程
create
BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, /* task 函式 */ const char * const pcName, /* task 字元名,用於debug*/ uint16_t usStackDepth, /* task堆疊大小 */ void *pvParameters, /* task 引數,可以為NULL */ UBaseType_t uxPriority, /* task 任務優先順序 */ TaskHandle_t *pxCreatedTask ); /* task控制代碼(可以用於調整task優先順序,刪除task等操作),可以為NULL */
task priority
- API: vTaskPrioritySet()
- 任務排程方法有兩種:
Generic Method
, 當configUSE_PORT_OPTIMISED_TASK_SELECTION 設為0,或者不定義此項時。freeRTOS 不限制 configMAX_PRIORITIES 的大小,但要儘可能小。Architecture Optimized Method
,當configUSE_PORT_OPTIMISED_TASK_SELECTION 設為1時,configMAX_PRIORITIES的大小限制在32,但儘可能小。
時間,tick
configTICK_RATE_HZ
pdMS_TO_TICKS()
巨集將ms轉換為當前對應的tick數,當tick rate變化時,時間不變。
task 狀態
task block api
- vTaskDelay(), vTaskDelay( pdMS_TO_TICKS( 100 ) ) 延時100ms
- xTaskGetTickCount() 獲取當前計數值
- vTaskDelayUntil()
task idle hook function
vApplicationIdleHook( void );
task Priority set and get
void vTaskPrioritySet( TaskHandle_t pxTask, UBaseType_t uxNewPriority );
UBaseType_t uxTaskPriorityGet( TaskHandle_t pxTask );
task delete
void vTaskDelete( TaskHandle_t pxTaskToDelete );
Scheduling Algorithms
configUSE_PREEMPTION
搶佔策略
configUSE_TIME_SLICING
時間片策略
configUSE_TICKLESS_IDLE
空閒時降低tick頻率,用於低功耗用途。
例程
xTaskCreate( vTask_A, "taskA", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL);
xTaskCreate( vTask_B, "taskB", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+1, NULL);
void vTask_A( void *pvParameters )
{
int16_t sSendNum = 1;
for (;;) {
vTaskDelay( 2000/portTICK_PERIOD_MS);
printf("Sending Num:%d\r\n", sSendNum);
xQueueSend( xMsgQueue, (void *)&sSendNum, portMAX_DELAY);
sSendNum++;
}
}
void vTask_B( void *pvParameters )
{
int16_t sReceiveNum = 0;
for (;;) {
if ( xQueueReceive( xMsgQueue, &sReceiveNum, portMAX_DELAY)) {
printf("ReceiveNum:%d\r\n", sReceiveNum);
}
}
}
來自為知筆記(Wiz)