99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

王超的小站
認證:VIP會員
所在專題目錄 查看專題
FreeRTOS移植詳解1-專題概覽(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植詳解2-滴答定時器實現(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植詳解3-內核裁剪(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植詳解4-中斷配置(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植詳解5-臨界段處理(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植詳解6-任務堆棧初始化和啟動(基于Microchip dsPIC33C系列芯片)
作者動態 更多
PIC24 & dsPIC33 MCU Bootloader開發
2021-11-08 15:12
PIC16 & PIC18 MCU Bootloader開發
2021-11-08 15:00
Python開發環境搭建(for Bootloader)
2021-11-08 14:58
Python開發環境搭建 (for Control)
2021-01-27 18:43
MCU擴展CAN/CAN FD接口方案-MCU軟件動手實驗
2020-11-25 14:11

FreeRTOS移植詳解5-臨界段處理(基于Microchip dsPIC33C系列芯片)

      臨界段代碼也叫臨界區,是指那些必須完整運行、不能被打斷的代碼段,比如有的外設的初始化需要嚴格的時序,初始化過程中不能被打斷。FreeRTOS在進入臨界段代碼的時候需要關閉中斷,處理完臨界段代碼以后再打開中斷。FreeRTOS系統本身就有很多的臨界段,這些代碼都加了臨界段代碼保護,寫自己用戶程序的時候有些地方也需要添加臨界段代碼保護。

      FreeRTOS與臨界段代碼保護有關的函數有4個,在task.h中定義,分別是:taskENTER_CRITICAL()、taskEXIT_CRITICAL() 、taskENTER_CRITICAL_FROM_ISR()和taskEXIT_CRITICAL_FROM_ISR( x )。其中前2個是任務級的臨界段代碼保護,后2個是中斷級的臨界段代碼保護,無論哪種情況臨界段的代碼都要盡量短小,下面分別來看。

      1. 任務級臨界段代碼保護

      taskENTER_CRITICAL()和taskEXIT_CRITICAL()是任務級的臨界段代碼保護,一個是進入臨界段,一個是退出臨界段,這2個函數是成對使用的,這函數的定義如下:

      而portENTER_CRITICAL()和portEXIT_CRITICAL()也是宏定義,在portmacro.h中有定義,如下:

      函數vPortEnterCritical()和vPortExitCritical()在文件port.c中,函數如下:

      可以看出,進入函數vPortEnterCritical()以后首先調用函數portDISABLE_INTERRUPTS()來關閉中斷,然后給變量uxCriticalNesting加1。uxCriticalNesting是一個全局變量,用來記錄臨界段嵌套次數。函數vPortExitCritical()是退出臨界段調用,函數每次將uxCriticalNesting 減1,只有當uxCriticalNesting 減到0才會調用函數portENABLE_INTERRUPTS()來使能中斷。這樣保證了在有多個臨界段代碼的時候不會因為某一個臨界段代碼的退出而打亂其他臨界段的保護,只有所有的臨界段代碼都退出以后才會使能中斷。

      2. 中斷級臨界段代碼保護

      函數taskENTER_CRITICAL_FROM_ISR()和taskEXIT_CRITICAL_FROM_ISR( x )為中斷級臨界段代碼保護函數,用在中斷服務程序中,而且這個中斷的優先級一定要小于等于configMAX_SYSCALL_INTERRUPT_PRIORITY。這2個函數在task.h中有如下定義:

      接下來看portSET_INTERRUPT_MASK_FROM_ISR()和portCLEAR_INTERRUPT_MASK_FROM_ISR( x ),這2個函數在文件portmacro.h中有如下定義:

      函數usPortRaiseCpuIPL()和vPortSetCpuIPL( x )在文件port.c中,函數如下:

      可以看出,進入函數usPortRaiseCpuIPL()實現的功能為首先保存當前CPU的優先級IPL[2:0] 到變量usOldIPL中,作為函數返回值用于vPortSetCpuIPL( x ) 的形參在退出臨界段時恢復IPL[2:0] 。另一個usPortRaiseCpuIPL() 的操作就是將CPU的優先級IPL[2:0]賦值configMAX_SYSCALL_INTERRUPT_PRIORITY,使優先級小于等于configMAX_SYSCALL_INTERRUPT_PRIORITY的中斷被屏蔽。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 5
收藏 4
關注 43
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 久久久久av综合网成人 | 精品91一区二区三区 | 嘿咻嘿咻免费区在线观看 | 午夜国产一区二区三区 | 国产裸拍裸体视频在线观看 | 国产色产综合色产在线观看视频 | 国产成人AV一区二区三区无码 | 色片在线观看 | 免费乱码人妻系列无码专区 | 精品国产AV色一区二区深夜久久 | 黑人巨大两根一起挤进交换 | 国产九九九精品视频 | 亚洲国产99在线精品一区二区 | 麻豆传媒观看 | 国产毛多水多女人a片 | 一级爰片 | 美女扒开腿让男人桶爽网站 | 99久久亚洲精品日本无码 | 污污汅18禁在线无遮挡免费观看 | 欧美激情精品久久久久久黑人 | 337p日本欧洲亚洲大胆艺术图 | 少妇小莹的yin荡生活下视频 | 嫩草院一区二区乱码蜜臀 | 色欲av久久无码影院色戒 | 国产免费一区二区三区 | 性乌克兰xxxx极品 | 欧美白嫩magnet | 免费人成视频在视频 | 久草视频国产在线 | 一区二区三区日韩一区二区中文 | 国产精品宾馆 | 国产成人一级在线观看 | 日韩一区二区三区高清免费看看 | 67194熟妇在线永久免费观看 | 久久精品一二区 | 国产激情з∠视频一区二区 | 成人偷拍片视频在线观看 | 99国精视频一区一区一三 | 最新一区二区三区 | 中文字幕在线中文字幕二区 | 国产区精品一区二区不卡中文 |