0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FreeRTOS開關(guān)中斷定義

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-09-28 11:37 ? 次閱讀

FreeRTOS 開關(guān)中斷

FreeRTOS 開關(guān)中斷函數(shù)為 portENABLE_INTERRUPTS ()和 portDISABLE_INTERRUPTS(),這兩個函數(shù)其實是宏定義,在 portmacro.h 中有定義,如下:

#define portDISABLE_INTERRUPTS()    vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS()    vPortSetBASEPRI(0)

可以看出開關(guān)中斷實際上是通過函數(shù) vPortSetBASEPRI(0)和 vPortRaiseBASEPRI()來實現(xiàn)的。

函數(shù) vPortSetBASEPRI()是向寄存器 BASEPRI 寫入一個值,此值作為參數(shù) ulBASEPRI 傳 遞進(jìn)來,portENABLE_INTERRUPTS()是開中斷,它傳遞了個 0 給 vPortSetBASEPRI(),根據(jù)我們前面講解 BASEPRI 寄存器可知,結(jié)果就是開中斷。

函 數(shù) vPortRaiseBASEPRI() 是 向 寄 存 器 BASEPRI 寫 入 宏configMAX_SYSCALL_INTERRUPT_PRIORITY , 那 么 優(yōu) 先 級 低 于configMAX_SYSCALL_INTERRUPT_PRIORITY 的中斷就會被屏蔽!

臨界段代碼

臨界段代碼也叫做臨界區(qū),是指那些必須完整運(yùn)行,不能被打斷的代碼段,比如有的外設(shè)的初始化需要嚴(yán)格的時序,初始化過程中不能被打斷。FreeRTOS 在進(jìn)入臨界段代碼的時候需要關(guān)閉中斷,當(dāng)處理完臨界段代碼以后再打開中斷。FreeRTOS 系統(tǒng)本身就有很多的臨界段代碼,這些代碼都加了臨界段代碼保護(hù),我們在寫自己的用戶程序的時候有些地方也需要添加臨界段代碼保護(hù)。

FreeRTOS 與 臨 界 段 代 碼 保 護(hù) 有 關(guān) 的 函 數(shù) 有 4 個 :taskENTER_CRITICAL() 、taskEXIT_CRITICAL() 、 taskENTER_CRITICAL_FROM_ISR() 和taskEXIT_CRITICAL_FROM_ISR(),這四個函數(shù)其實是宏定義,在 task.h 文件中有定義。這四個函數(shù)的區(qū)別是前兩個是任務(wù)級的臨界段代碼保護(hù),后兩個是中斷級的臨界段代碼保護(hù)。

任務(wù)級臨界代碼保護(hù)使用方法如下:

圖片

中斷級臨界代碼保護(hù)使用方法如下:

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開關(guān)
    +關(guān)注

    關(guān)注

    19

    文章

    3235

    瀏覽量

    94175
  • 嵌入式
    +關(guān)注

    關(guān)注

    5105

    文章

    19288

    瀏覽量

    310192
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5392

    瀏覽量

    121929
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4355

    瀏覽量

    63318
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62813
收藏 人收藏

    評論

    相關(guān)推薦

    FreeRTOS中斷測試避坑指南

    任何調(diào)用中斷安全FreeRTOS API函數(shù)的中斷服務(wù)例程都可以使用的最高中斷優(yōu)先級。不要從任何優(yōu)先級高于此的中斷調(diào)用
    的頭像 發(fā)表于 12-21 09:04 ?1178次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>測試避坑指南

    轉(zhuǎn):第15章 FreeRTOS臨界段和開關(guān)中斷

    第15章FreeRTOS臨界段和開關(guān)中斷 本章教程為大家講解兩個重要的概念,FreeRTOS的臨界段和開關(guān)中斷。 本章教程配套的例子含Cortex-M3內(nèi)核的STM32F103和Cor
    發(fā)表于 08-31 10:15

    轉(zhuǎn)第16章 FreeRTOS調(diào)度鎖,任務(wù)鎖和中斷

    的作用區(qū)分開,調(diào)度鎖只是禁止了任務(wù)調(diào)度,并沒有關(guān)閉任何中斷,中斷還是正常執(zhí)行的。而臨界段進(jìn)行了開關(guān)中斷操作。16.2 中斷中斷鎖就是RTO
    發(fā)表于 09-01 07:45

    為什么ucosII移植后開關(guān)中斷函數(shù)總是報錯?

    for CPU status register */ OS_CPU_SRcpu_sr; #endif不加開關(guān)中斷,功能能實現(xiàn);加了開關(guān)中斷,有這個定義不會報錯,也能實現(xiàn)功能但我感覺這樣肯定不對啊,我
    發(fā)表于 07-26 04:35

    STM32,NVIC不能通過FreeRTOS開關(guān)中斷函數(shù)屏蔽中斷是怎么回事

    最近用原子的教程學(xué)Freertos,最近進(jìn)度到中斷管理的時候卡住了。自己是使用STM32F103ZET6,跑FreeRTOS v10.0.1系統(tǒng)。設(shè)置和教程的幾乎一樣,建立開始任務(wù)和中斷
    發(fā)表于 07-13 07:00

    FreeRTOS_中斷Github簡介

    STM32CubeMX學(xué)習(xí)筆記——FreeRTOS_中斷Github簡介任務(wù)創(chuàng)建可視化創(chuàng)建方式代碼創(chuàng)建方式開關(guān)中斷Github簡介在應(yīng)用中有許多禁止被打斷的操作,如底層驅(qū)動等,這個時候就需要...
    發(fā)表于 08-13 06:07

    怎樣去使用FreeRTOS中斷配置和臨界段呢

    函數(shù)1.開關(guān)中斷2.臨界段代碼1、taskENTER_CRITICAL()和 taskEXIT_CRITICAL()任務(wù)級臨界代碼保護(hù)使用方法如下:2.
    發(fā)表于 01-14 09:28

    RTThread中開關(guān)中斷的具體實現(xiàn)過程以及進(jìn)入臨界區(qū)的相關(guān)操作說明

    1、全局中斷對于Cortx-M3系列MCU ,RTThread是通過操作,中斷屏蔽寄存器PRIMASK實現(xiàn)開關(guān)中斷操作的,《Cortex-M3權(quán)威指南》中對PRIMASK寄存器有描述如下:這個是只有
    發(fā)表于 05-27 14:52

    請問ch32v307全局中斷開關(guān)定義怎樣寫?

    ch32v307 全局中斷開關(guān) 定義怎樣寫?就像MDK中這個語句 __set_PRIMASK( 1 ); //關(guān)閉全局中斷,不關(guān)中斷就等著出錯吧,呵呵。謝謝!
    發(fā)表于 09-23 07:20

    燈管預(yù)熱和中斷定時器電路圖

    燈管預(yù)熱和中斷定時器電路圖 燈管預(yù)熱和中斷定時器電路圖 在ML4835中設(shè)計的
    發(fā)表于 07-17 09:36 ?1165次閱讀
    燈管預(yù)熱和<b class='flag-5'>中斷定</b>時器電路圖

    基于STM32應(yīng)用的FreeRTOS中斷設(shè)置

    一、FreeRTOS中斷設(shè)置介紹 FreeRTOSConfig.h中定義了兩個宏,分別是: configKERNEL_INTERRUPT_PRIORITY
    發(fā)表于 11-29 19:46 ?2168次閱讀
     基于STM32應(yīng)用的<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>設(shè)置

    介紹什么是中斷定時器?作用是什么?

    lesson7-1中斷定時器
    的頭像 發(fā)表于 07-09 03:36 ?8540次閱讀
    介紹什么是<b class='flag-5'>中斷定</b>時器?作用是什么?

    STM32中斷FreeRTOS中斷優(yōu)先級配置

    STM32中斷,及FreeRTOS中斷優(yōu)先級配置
    的頭像 發(fā)表于 03-04 11:45 ?9104次閱讀
    STM32<b class='flag-5'>中斷</b>及<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>優(yōu)先級配置

    STM32之FreeRTOS:(一) 中斷配置和臨界段的使用

    API函數(shù)1.開關(guān)中斷2.臨界段代碼1、taskENTER_CRITICAL()和 taskEXIT_CRITICAL()任務(wù)級臨界代碼保護(hù)使用方法如下:2.
    發(fā)表于 01-14 15:43 ?3次下載
    STM32之<b class='flag-5'>FreeRTOS</b>:(一) <b class='flag-5'>中斷</b>配置和臨界段的使用

    Cortex-M中斷FreeRTOS中斷優(yōu)先級配置原理

    下面就來說說關(guān)于Cortex-M的中斷,及FreeRTOS中斷優(yōu)先級配置原理。
    發(fā)表于 02-08 15:30 ?3次下載
    Cortex-M<b class='flag-5'>中斷</b>及<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b>優(yōu)先級配置原理