<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                SysTick中斷服務函數是一個非常重要的函數,FreeRTOS所有跟時間相關的事情都在里面處理,SysTick就是FreeRTOS的一個心跳時鐘,驅動著FreeRTOS的運行,就像人的心跳一樣,假如沒有心跳,我們就相當于“死了”,同樣的,FreeRTOS沒有了心跳,那么它就會卡死在某個地方,不能進行任務調度,不能運行任何的東西,因此我們需要實現一個FreeRTOS的心跳時鐘,FreeRTOS幫我們實現了SysTick的啟動的配置:在port.c文件中已經實現vPortSetupTimerInterrupt()函數,并且FreeRTOS通用的SysTick中斷服務函數也實現了:在port.c文件中已經實現xPortSysTickHandler()函數,所以移植的時候只需要我們在stm32f4xx\_it.c文件中實現我們對應(STM32)平臺上的SysTick\_Handler()函數即可。FreeRTOS為開發者考慮得特別多,PendSV\_Handler()與SVC\_Handler()這兩個很重要的函數都幫我們實現了,在在port.c文件中已經實現xPortPendSVHandler()與vPortSVCHandler()函數,防止我們自己實現不了,那么在stm32f4xx\_it.c中就需要我們注釋掉或者刪除掉PendSV\_Handler()與SVC\_Handler()這兩個函數了,具體實現見代碼清單8?1加粗部分。 ``` 1 /* Includes ----------------------------------------------------------*/ 2 #include "main.h" 3 #include "stm32f4xx_it.h" 4 #include "./usart/bsp_debug_usart.h" 5 6 #include "FreeRTOS.h" //FreeRTOS使用 7 #include "task.h" 8 9 /** @addtogroup STM32F4xx_HAL_Examples 10 * @{ 11 */ 12 13 /** @addtogroup GPIO_EXTI 14 * @{ 15 */ 16 17 /* Private typedef ----------------------------------------------*/ 18 /* Private define ------------------------------------------------*/ 19 /* Private macro -------------------------------------------------*/ 20 /* Private variables --------------------------------------------*/ 21 /* Private function prototypes -------------------------------------*/ 22 /* Private functions ---------------------------------------------*/ 23 24 /*******************************************************************/ 25 /* Cortex-M4 Processor Exceptions Handlers */ 26 /*****************************************************************/ 27 28 /** 29 * @brief This function handles NMI exception. 30 * @param None 31 * @retval None 32 */ 33 void NMI_Handler(void) 34 { 35 } 36 37 /** 38 * @brief This function handles Hard Fault exception. 39 * @param None 40 * @retval None 41 */ 42 //void HardFault_Handler(void) 43 //{ 44 // /* Go to infinite loop when Hard Fault exception occurs */ 45 // while (1) 46 // { 47 // } 48 //} 49 50 /** 51 * @brief This function handles Memory Manage exception. 52 * @param None 53 * @retval None 54 */ 55 void MemManage_Handler(void) 56 { 57 /* Go to infinite loop when Memory Manage exception occurs */ 58 while (1) 59 { 60 } 61 } 62 63 /** 64 * @brief This function handles Bus Fault exception. 65 * @param None 66 * @retval None 67 */ 68 void BusFault_Handler(void) 69 { 70 /* Go to infinite loop when Bus Fault exception occurs */ 71 while (1) 72 { 73 } 74 } 75 76 /** 77 * @brief This function handles Usage Fault exception. 78 * @param None 79 * @retval None 80 */ 81 void UsageFault_Handler(void) 82 { 83 /* Go to infinite loop when Usage Fault exception occurs */ 84 while (1) 85 { 86 } 87 } 88 89 /** 90 * @brief This function handles Debug Monitor exception. 91 * @param None 92 * @retval None 93 */ 94 void DebugMon_Handler(void) 95 { 96 } 97 98 99 100 /** 101 * @brief This function handles SysTick Handler. 102 * @param None 103 * @retval None 104 */ 105 extern void xPortSysTickHandler(void); 106 107 void SysTick_Handler(void) 108 { 109 uint32_t ulReturn; 110 /* 進入臨界段,臨界段可以嵌套 */ 111 ulReturn = taskENTER_CRITICAL_FROM_ISR(); 112 113 HAL_IncTick(); 114 #if (INCLUDE_xTaskGetSchedulerState == 1 ) 115 if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) 116 { 117 #endif /* INCLUDE_xTaskGetSchedulerState */ 118 xPortSysTickHandler(); 119 #if (INCLUDE_xTaskGetSchedulerState == 1 ) 120 } 121 #endif /* INCLUDE_xTaskGetSchedulerState */ 122 123 /* 退出臨界段 */ 124 taskEXIT_CRITICAL_FROM_ISR( ulReturn ); 125 } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看