1. 將啟動匯編文件中的 替換
DCD vPortSVCHandler //內核SVC中斷
DCD DebugMon_Handler
; DCD SVC_Handler
; DCD DebugMon_Handler
DCD xPortPendSVHandler //內核PendSV中斷
DCD xPortSysTickHandler //內核SysTick中斷
; DCD PendSV_Handler
; DCD SysTick_Handler
2. main函數中,在main函數的最后定義一個while(1);死循環。
先是創建任務,然后是啟動任務調度函數。
xTaskCreate( vIntegerGenerator, "IntGen", 200, NULL, 1, NULL);
xTaskCreate( vStringPrinter, "String", 200, NULL, 2, NULL);
vTaskStartScheduler();
3. 創建信號量時,首先應在main函數之前定義一下全局變量
xQueueHandle xIntegerQueue;
xQueueHandle xStringQueue;
4. 一些初始化的東西最好在main函數里面先初始化好,如GPIO的選擇、方向以及定時器的初始化。
如果定時器的初始化放在任務里面,有可能導致定時器無法正常工作。因為任務在循環執行,可能定時器還沒到定時時間,就又被重新初始化了。
5. 加庫文件stdio.h,執行printf語句,可在IO終端里面查看。
6. 在任務函數里面,定義變量放在for循環外面,其他放在for循環里面。
如
static void vStringPrinter( void *pvParameters )
{
char *pcString;
for(;;)
{
xQueueReceive( xStringQueue, &pcString, portMAX_DELAY);
printf(pcString);
}
}
7. 如果任務遇到中斷,需要強制上下文切換。中斷里面用的上下文切換是taskYIELD();而不是vTaskSwitchContext 里面有了個PendSV中斷。