1、freertos開關中斷函式分別為portenable_interrupts()和portdisable_interrupts();
2、freertos臨界段保護相關函式:taskenter_critical()、taskexit_critical()、taskenter_critical_from_isr()、taskexit_critical_from_isr();
3、taskenter_critical()<-巨集-portenter_critical()<-巨集-vportentercritical()<--portdisable_interrupts()<-巨集-vportraisebasepri()<--彙編**,將configmax_syscall_interrupt_priority寫入basepri暫存器;
4、taskexit_critical()<-巨集-portexit_critical()<-巨集-vportexitcritical()<--portenable_interrupts()<-巨集-vportsetbasepri( 0 )<--彙編**,往basepri暫存器寫0;
5、taskenter_critical_from_isr()<-巨集-portset_interrupt_mask_from_isr()<-巨集-ulportraisebasepri()<--彙編**,將configmax_syscall_interrupt_priority寫入basepri暫存器,但與vportraisebasepri()稍有不同,在往basepri寫configmax_syscall_interrupt_priority前讀出了basepri值,函式退出時返回basepri,供退出臨界段時taskexit_critical_from_isr()做引數使用;
6、taskexit_critical_from_isr(x)<-巨集-portclear_interrupt_mask_from_isr( x )<-巨集-vportsetbasepri(x)<--彙編**,往basepri暫存器寫x。
三 FreeRTOS 臨界段的保護
3.4 開中斷 3.5 進入臨界段 3.6 退出臨界段 3.7 案例 野火 freertos 核心實現與應用開發實戰 基於stm32 臨界段用一句話概括就是一段在執行的時候不能被中斷的 段。在 freertos 裡面,這個臨界段最常出現的就是對全域性變數的操作,全域性變數就好像是乙個槍把子,誰都可以...
FreeRTOS 中斷配置和臨界段
中斷遮蔽暫存器 primask faultmask和basepri 1.primask 這是個只有1個位的暫存器。當它置1時,就關掉所有可遮蔽的異常,只剩下 nmi和硬fault可以響應。它的預設值是0,表示沒有關中斷 2.faultmask 這是個只有1個位的暫存器。當它置1時,只有nmi才能響應...
四 FreeRTOS 中斷配置和臨界段
freertos 的中斷配置是乙個很重要的內容,我們需要根據所使用的 mcu 來具體配置。因此要先了解 mcu 架構中有關中斷的知識。中斷由硬體產生,當中斷產生以後 cpu 就會中斷當前的流程轉而去處理中斷服務,待中斷服務函式執行完後再回來執行之前被中斷的任務。cortex m 核心的 mcu 提供...