ucosII移植學習過程,OS_CPU_SR_Save()和OS_CPU_SR_Restore()函式的解析
今天突然興起回顧了一下ucosII,本人在這方面也是小白,但研究了一下,也算有點收穫,在此記錄一下。
我們都知道,程式碼的臨界段,也叫臨界區,指的是處理時不可以分割的程式碼。一旦這部分程式碼開始執行,則不容許任何中斷打斷。為了確保臨界段程式碼的可靠執行,在進入臨界段之前一定要關閉中斷,而臨界段執行完後,則要立即開啟中斷。
首先,在這裡,有兩個巨集定義,定義了OS_ENTER_CRITICAL()函式和
OS_EXIT_CRITICAL()函式,這兩個函式的作用是關閉和開啟中斷。下面我們要知道這兩個函式為什麼操作中斷的開關。我們重點關注巨集定義,OS_CPU_SR_Save()這個函式
在os_cpu_a.asm檔案中有定義,我們可以看到
這個函式返回了一個值R0,並將這個值賦值給(暫存)cpu_sr內,目的就是保留為關閉中斷前的狀態, CPSTD I,這段程式碼是cortex-M3指令集的彙編指令, ,這個操作就把中斷給關了。
其次,我們再看OS_CPU_SR_Restore()函式,,將cpu_sr的狀態重新讀到PRIMASK裡面,這樣就恢復了最初狀態。
哈哈哈,希望幫助到大家!
相關推薦
ucosII移植學習過程,OS_CPU_SR_Save()和OS_CPU_SR_Restore()函式的解析
今天突然興起回顧了一下ucosII,本人在這方面也是小白,但研究了一下,也算有點收穫,在此記錄一下。 我們都知道,程式碼的臨界段,也叫臨界區,指的是處理時不可以分割的程式碼。一旦這部分程式碼開始執行,則不容許任何中斷打斷。為了確保臨界段程式碼的可靠執行,在進入臨界段之前一定要關閉中斷,而臨界段執
C語言open()和creat()函式建立檔案時,檔案許可權設定相關
open()和creat()建立檔案時,檔案許可權說明 首先了解一下 umask 命令,該命令用來設定限制新檔案許可權的掩碼。當新檔案被建立時,其最初的許可權由檔案建立掩碼決定。簡單地來說,umask和open()及creat()函式的許可權碼(mode_t mode引數)共同決定你
javaScript學習筆記, 陣列排序sort();
陣列排序的方法sort(); 該方法有個引數,稱為方法函式。 1.如果沒有指定方法引數,則按unicode碼順序排列 2.指定方法引數: function sortnum(a,b){ return a-b;//正序;b-a倒序,按數值大小 } var myarr = new
Java多執行緒中,Join和Interrupt()方法的使用
更多詳細的解答請轉至:http://my.oschina.net/summerpxy/blog/198457;http://uule.iteye.com/blog/1101994;(比如有一個執行緒t.當在Main執行緒中呼叫t.join()的時候,那麼Main執行緒必須拿
python中的encode()和decode()函式
前言: 我們知道,計算機是以二進位制為單位的,也就是說計算機只識別0和1,也就是我們平時在電腦上看到的文字,只有先變成0和1,計算機才會識別它的意思。這種資料和二進位制的轉換規則就是編碼。計算機的發展中,有ASCII碼,GBK,Unicode,utf-8編碼。我們先從編碼的發展史瞭解一下編碼的進化過程。
Python中的bytearray()和bytes()函式
Python中的bytearray()和bytes()函式 概述 bytearray() 函式返回新位元組陣列,數組裡的元素可變,且每個元素的值在0至255之間。bytes()函式是Python 3中增加的內建函式,語法、引數與bytearray() 一樣,只是返回的新位元組陣列不可
python append()函式和extend()函式
1. 列表可包含任何資料型別的元素,單個列表中的元素無須全為同一型別。 2. append() 方法向列表的尾部新增一個新的元素。只接受一個引數。 3. extend()方法只接受一個列表作為引數,並將該引數的每個元素都新增到原有的列表中。 ****************************
C語言 gets()和scanf()函式的區別
scanf( )函式和gets( )函式都可用於輸入字串,但在功能上有區別。若想從鍵盤上輸入字串"hi hello",則應該使用__gets__函式。 gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。 char stri
python中min()和max()函式用法講解
介紹: min(0)返回該矩陣中每一列的最小值 min(1)返回該矩陣中每一行的最小值 max(0)返回該矩陣中每一列的最大值 max(1)返回該矩陣中每一行的最大值 例項: import numpy as np l= np.zeros((5,5))#構建一個5*5的零矩陣
關於AfxGetMainWnd()->m_hWnd和sendmessage()函式
用嚮導建立一個單文件/多文件程式,其中最外面的框架叫做 frame ,包括標題、最大最小化按鈕、選單、工具條、以及 view 等都在 frame 中。frame 中,中間那塊白色的部分被 view 佔據。 AfxGetMai
python append()函式和extend()函式和insert()函式
append函式和extend函式(1)插入數字時不需要單引號,插入字串時需要單引號;(2)append向列表尾部插入一個新的元素,只接受一個元素引數;(3)entend向列表尾部插入一個列表,列表中的元素無須為同一個型別例如:append:>>> myli
python中的range()和array()函式
我們在Python中存在一個非常好用的range()與array()函式,下面作用法簡要介紹。 一、range()函式 >>> range(1,10) ——>不包括10 [1, 2, 3, 4, 5, 6, 7, 8, 9]
Python 3.6模組學習urllib的urllib.request.urlopen()函式學習
urllib提供了一系列用於操作URL的功能。包含urllib.request,urllib.error,urllib.parse,urllib.robotparser四個子模組。 官網資料如下:
C++學習之分支語句和邏輯運算子(switch語句,break和continue語句)
1.switch語句 switch(integer-expression) { case label1:statement(s) case label2:statement(s) ....... default :statement(s
java SE學習過程中的知識點小結(一)(很多內容過於基礎,希望能幫助到學習路上的同學)————歡迎老手批評指正
①、把boolean測試放在括號內:例如while(x==4){} //當然看過很多部落格,裡面有工作經驗的工作者說以後公司可能習慣性寫(4==x) ②、所有java程式都定義在類中(也是區別於C++的主要特徵) ③、物件本身已知到的事物稱為例項變數,它代表物件的狀態,物件可執行的動作稱為方法。 ④、類可以
php——學習筆記,print和echo輸出語句
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
怎麼檢視真實專案的http 請求的請求報文和響應報文,即request和response?只有這樣,才能完全徹底明白一個http 請求整個過程,傳送和接收的是什麼東西。
IE瀏覽器,f12,網路,捕獲。 如,在前後端分離(即動靜分離,前端只有html程式碼,後端是介面返回json字串。這種方式,是最接近移動端專案即app專案的模式)方式,一個使用者儲存修改即savemodify為例: 因為是form提交是post方式,所以請求正文是
Mybatis學習---Mybatis逆向工程自動生成程式碼(代替手寫pojo類,Mapper和對映檔案)
學習Mybatis後,學會使用dao層對映檔案和Mapper,從資料庫獲取資料,並將資料封裝為相應的物件儲存。將Mybatis框架使用到SSM專案中,實現了:檢視層 + 業務邏輯層 + 資料訪問層。對於資料庫表不多的情況,正常的使用Mybatis框架:手寫pojo類檔案、da
深入理解預編譯,編譯,彙編,連結的過程——之編譯和使用(連結)庫——物件和靜態庫
當你完成了程式碼開發,想把這個程式碼給別人用,但是又不希望別人看到原始碼,就要給別人一個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。 或者過程相反,你從別人那裡拿到一個庫和標頭檔案來使用。 那麼如何編譯生成一個庫給他人,如何使用從他人那裡拿到的庫呢? 範例1:我們想把Li
uboot 移植學習過程遇到問題的解決方法
對uboot還不懂,現在記錄學習過程中出現的問題的解決方法,以後如果意識到問題再回來修改 1、 make all CROSS_COMPILE=arm-linux- 出現bad value (armv5) for -march=switch 解決: export