前面做的兩個實驗,在裸機下跑PS的timer計時器中斷,PL到PS的按鍵中斷均工作正常,但是將代碼移植到freertos工程時,中斷不執行,跟中斷無關聯的task可以運行。產生這個問題的主要原因,在於PS部分只有一個中斷控制器,因此我們只能申請一個中斷控制器設備,如果申請了兩個,那么不工作是必然的。我們在裸機下申請了一個:XScuGic INST ,另外一個被FreeRTOS申請了,在如下圖,這樣就“沖突”了,所以:我們將原先自己申請的中斷控制器改用FreeRTOS申請的XScuGic xInterruptController,這就需要在我們自己寫的函數中,去全局的聲明一下FreeRTOS定義的那個XScuGic xInterruptController變量,方法就是在main()前面加上extern XScuGic xInterruptController;。
下圖是Xilinx的一位員工給出的意見,也就是,在開啟調度器時會初始化中斷控制器,因此我們初始化中斷控制器只能在線程中執行,也就是在vTaskStartScheduler()開啟任務調度之前。反正我看到有中斷控制器傳參的函數都放到一個task中去了,另外在FreeRTOS中,什么Task,線程等等,貌似不區分,概念一樣,如果看到FreeRTOS有線程相關的函數,多半是被別人封裝過吧。