【STM32】FreeRTOS 中断配置和临界段
生活随笔
收集整理的這篇文章主要介紹了
【STM32】FreeRTOS 中断配置和临界段
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- main.c
中斷是微控制器一個很常見的特性,中斷由硬件產生,當中斷產生以后 CPU 就會中斷當前 的流程轉而去處理中斷服務,Cortex-M 內核的 MCU 提供了一個用于中斷管理的嵌套向量中斷 控制器(NVIC)。
Cotex-M3 的 NVIC 最多支持 240 個 IRQ(中斷請求)、1 個不可屏蔽中斷(NMI)、1 個 Systick(滴 答定時器)定時器中斷和多個系統異常。
當多個中斷來臨的時候處理器應該響應哪一個中斷是由中斷的優先級來決定的,高優先級 的中斷(優先級編號小)肯定是首先得到響應,而且高優先級的中斷可以搶占低優先級的中斷, 這個就是中斷嵌套。
main.c
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "timer.h" #include "FreeRTOS.h" #include "task.h"//任務優先級 #define START_TASK_PRIO 1 //任務堆棧大小 #define START_STK_SIZE 256 //任務句柄 TaskHandle_t StartTask_Handler; //任務函數 void start_task(void *pvParameters);//任務優先級 #define INTERRUPT_TASK_PRIO 2 //任務堆棧大小 #define INTERRUPT_STK_SIZE 256 //任務句柄 TaskHandle_t INTERRUPTTask_Handler; //任務函數 void interrupt_task(void *p_arg);int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組4 delay_init(); //延時函數初始化 uart_init(115200); //初始化串口LED_Init(); //初始化LEDTIM3_Int_Init(10000-1,7200-1); //初始化定時器3,定時器周期1STIM5_Int_Init(10000-1,7200-1); //初始化定時器5,定時器周期1S//創建開始任務xTaskCreate((TaskFunction_t )start_task, //任務函數(const char* )"start_task", //任務名稱(uint16_t )START_STK_SIZE, //任務堆棧大小(void* )NULL, //傳遞給任務函數的參數(UBaseType_t )START_TASK_PRIO, //任務優先級(TaskHandle_t* )&StartTask_Handler); //任務句柄 vTaskStartScheduler(); //開啟任務調度 }//開始任務任務函數 void start_task(void *pvParameters) {taskENTER_CRITICAL(); //進入臨界區//創建中斷測試任務xTaskCreate((TaskFunction_t )interrupt_task, //任務函數(const char* )"interrupt_task", //任務名稱(uint16_t )INTERRUPT_STK_SIZE, //任務堆棧大小(void* )NULL, //傳遞給任務函數的參數(UBaseType_t )INTERRUPT_TASK_PRIO, //任務優先級(TaskHandle_t* )&INTERRUPTTask_Handler); //任務句柄vTaskDelete(StartTask_Handler); //刪除開始任務taskEXIT_CRITICAL(); //退出臨界區 }//中斷測試任務函數 void interrupt_task(void *pvParameters) {static u32 total_num=0;while(1){total_num+=1;if(total_num==5) {printf("關閉中斷.............\r\n");portDISABLE_INTERRUPTS(); //關閉中斷delay_xms(5000); //延時5sprintf("打開中斷.............\r\n"); //打開中斷portENABLE_INTERRUPTS();}LED0=~LED0;vTaskDelay(1000);} }總結
以上是生活随笔為你收集整理的【STM32】FreeRTOS 中断配置和临界段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【STM32】FreeRTOS 系统配置
- 下一篇: 【STM32】FreeRTOS 任务相关