單片機編程
單片機的最小系統?內部的主要結構?網絡
答:最小系統:電源、晶振(爲系統提供基本的時鐘信號)、復位電路;內部結構:ROM/RAM、計時器、中斷、I/O串並行口、總線擴展控制。數據結構
RAM和ROM的區別?函數
答:ROM(只讀存儲器):它的信息一次寫入後只能被讀出,而不能被操做者修改或者刪除。通常用於存放固定的程序或數據表格。可是,「只讀」這個概念有時候能夠被一些新特性的器件顛覆。oop
RAM(隨機存儲器):它就是咱們平時說的內存,主要用來存放各類現場的輸入/輸出數據、中間計算結果,以及與外部存儲器交換信息,或者做堆棧(特色:先進後出,後進先出)用。它的存儲單元根據具體須要能夠讀出或者改寫。學習
二者區別:RAM只能用於暫時存放程序與數據。一旦電源關閉或發生斷電,RAM中的數據就會丟失。而ROM中的數據在電源關閉或者斷電後仍然會保留下來。ui
簡而言之:相同點它們都是用來存儲數據的spa
不一樣點存儲數據的方式與數據能不能在二次加工不一樣操作系統
單片機I/O口有什麼做用?I/0口的驅動能力?上拉電阻與下拉電阻的做用?設計
答:I/O口最主要的功能用來與外部器件實現數據信息的交互、速度匹配、數據傳送方式和加強單片機的負載能力。它在二者之間扮演橋樑的做用,單片機擁有着串行與並行接口。每一個種類的單片機的不一樣並行口也有着各自不一樣的功能。
單片機輸出低電平時,將容許外部器件,向單片機引腳內灌入電流,這個電流,稱爲「灌電流」,外部電路稱爲「灌電流負載」。
單片機輸出高電平時,則容許外部器件,從單片機的引腳拉出電流,這個電流,稱爲「拉電流」,外部電路稱爲「拉電流負載」。
單片機輸出驅動能力的問題:每一個單個的引腳,輸出低電平的時候,容許外部電路,向引腳灌入的最大電流爲 10 mA;每一個 8 位的接口(P一、P2 以及 P3),容許向引腳灌入的總電流最大爲 15 mA,而 P0 的能力強一些,容許向引腳灌入的最大總電流爲26 mA;所有的四個接口所容許的灌電流之和,最大爲 71 mA。而當這些引腳「輸出高電平」的時候,單片機的「拉電流」能力呢?能夠說是太差了,居然不到 1 mA。
結論就是:單片機輸出低電平的時候,驅動能力尚可,而輸出高電平的時候,就沒有輸出電流的能力。
綜上所述:灌電流負載,是合理的;而「拉電流負載」和「上拉電阻」會產生很大的無效電流,而且功耗大。
設計單片機的負載電路,應該採用「灌電流負載」的電路形式,以免無謂的電流消耗。
在數字電路中,只有二種狀態,要麼是高電平,要麼是低電平,在通電初期,這些輸出狀態是不肯定的,爲了使電路肯定狀態,必需使用上拉電阻或下拉電阻,使一個原來不肯定電平變高的叫上拉電阻,不然就是下拉電阻,上拉電阻就是從電源上接一隻電阻到這個狀態口上就能夠了,(就是把高的電壓加到這個點上去,這個點的電位就高了)下拉電阻的接法,從這個狀態口接一隻電阻到負極(或數字接地),因電路形式與類別不一樣,當輸入端有信號,這種變化會反應到輸出口,從輸出口獲得了一個狀態,原本應該完成任務了,但這會兒輸入口已沒信號了,可輸出端仍是這個狀態(這我的習慣很差,開門後老是不關門,加一隻彈簧,(電阻)讓它本身關門,)這時候也要用到上下拉電阻,這裏有復位的做用。
常見的時鐘電路有哪些?爲何要使用PLL?
答:先了解一下什麼是時鐘電路?
時鐘電路就是產生像時鐘同樣準確運動的振盪電路,任何工做都按時間順序。用於產生這個時間的電路就是時鐘電路。
組成:晶體振盪器、晶震控制芯片和電容組成。
如今流行的串行時鐘電路有:DS1302、DS1307、PCF8485等
它們的特色:接口簡單、價格低廉、使用方便。
DS1302:具備涓細電流充電能力的電路,主要特色:採用串行數據傳輸,可爲掉電保護電源提供可編程的充電功能,而且能夠關閉充電功能。採用普通32.768KHz晶振。
PLL(PhaseLocked Loop):鎖相環電路。用來統一整合時脈訊號,使高頻器件正常工做。如:內存的存取資料等。PLL用於振盪器中的反饋技術。許多電子設備要正常工做,一般須要外部的輸入信號與內部的振盪信號同步。通常的晶振因爲工藝與成本緣由,作不到很高的頻率,而在須要高頻應用時,有相應的器件VCO,實現轉成高頻,但不穩定,故利用鎖相環路就能夠實現穩定且高頻的時脈衝訊號。
什麼是時脈:指同步電路中時鐘的基礎頻率,它以(若千次週期每秒)來度量,單位是(Hz)
總之:PLL能夠同步頻率,相位正交。倍頻、變頻。
單片機的尋址方式有哪些?
答:80C51有七種尋址方式:
1、當即尋址,尋址空間爲ROM;
2、直接尋址,尋址空間爲片內RAM的低128B和特殊功能寄存器;
3、寄存器尋址,尋址空間爲A、B、DPTR、CY、通用工做寄存器等;
4、寄存器間接尋址,片內RAM低128B、片外RAM;
5、相對尋址,尋址空間爲ROM;
6、變址尋址,尋址空間爲ROM;
7、位尋址,尋址空間爲片內RAM低128B的位尋址區的128個位,其字節地址爲20H~2FH;以及部分能夠位尋址的特殊功能寄存器。
參考:AT89C51單片機能直接認識和執行的機器指令有255條,有7種尋址方式,即當即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。
1. 直接尋址:
指令中直接給出參與操做的數據的地址,該地址通常用direct表示。
彙編指令:MOV A,direct
該指令的功能是將片內RAM地址direct單元中的內容(參與操做的數據)傳送到累加器A中,雙字節指令。
2. 當即尋址:
指令中直接給出參與操做的數據,稱當即數,用data表示。在彙編語言中,爲標明當即數,爲data加前綴」#」。當即數能夠是8位和16位二進制數,分別用#data和#data16表示。
彙編語言指令:MOV A,#data
該指令將當即數data傳送到累加器A中,雙字節指令。
3. 寄存器尋址:
參與操做的數據存放在寄存器中,彙編指令中直接以寄存器名來表示參與操做的數據地址,寄存器包括工做寄存器R0~R7、累加器A、AB、數據指針DPTR和位運算寄存器C。
彙編語言指令:MOV A,Rn ;n=0~7
該指令將Rn中的內容傳送到累加器A中,單字節指令。
4. 寄存器間接尋址:
寄存器間接尋址爲二次尋址,第一次尋址獲得寄存器的內容爲(Ri)或(DPTR),第二次尋址是將第一次尋址獲得的寄存器內容做爲地址,並在其中存、取參與操做的數據。彙編語言中,寄存器前綴@是寄存器間接尋址的標誌,有@Ri、@DPTR等。
彙編語言指令:MOV A,@Ri ;i=0、1
該指令是將Ri中的內容做爲地址,再將該地址中的內容傳送到累加器A中,單字節指令。
5. 變址尋址:
間接尋址由兩個寄存器提供。若由A、PC提供,在彙編語言指令中尋址地址表示爲@A+PC;若由A和DPTR提供,在彙編語言指令中尋址地址爲@A+DPTR。其中,PC或DPTR被稱爲基址寄存器,A被稱爲變址寄存器,基址與變址相加爲16位無符號加法。若變址寄存器A中內容加基址寄存器DPTR(或PC)中內容時,低8位有進位,則該進位直接加到高位,不影響進位標誌。因變址尋址指令多用於查表,故常稱爲查表指令。
彙編語言指令:MOVC A,@A+DPTR
該指令將DPTR中的內容加上A中的內容做爲地址,再將該地址中的內容傳送到累加器A中,單字節指令。
6. 相對尋址:
相對尋址是以相對尋址指令的下一條指令的程序計數器PC的內容爲基值,加上指令機器代碼中的「相對地址」,造成新的PC值(要轉移的指令地址)的尋址方式。指令機器代碼中「相對地址」指的是用一個帶符號的8位二進制補碼錶示的偏移字節數,其取值範圍爲-128~+127,負數表示向後轉移,正數表示向前轉移。
若(PC)表示該指令在ROM中的首地址,該指令字節數爲2,執行時分兩步操做:(PC)←(PC)+2,(PC)←(PC)+相對地址。第一步完成後,PC中的值爲該指令的下一條指令的首地址;第二步完成後,PC中的內容(PC)爲轉移的目標地址。因此,轉移的目標地址範圍是該相對尋址指令的下一條指令首址加上-128~—+127字節的地址。
彙編語言指令:SJMP rel
彙編語言相對尋址指令中的」rel」每每是一個標號地址,表示ROM中某轉移目標地址。彙編軟件對該彙編語言指令進行彙編時,自動算出「相對地址」並填入機器代碼中,應將」rel」理解爲「帶有相對意義的轉移目標地址」。
Rel=(PC)+相對尋址指令字節數+相對地址
其中,(PC)爲該指令所在ROM中的首地址。
7. 位尋址:
參與操做的數據爲「位」,而不是字節,是對片內數據存儲器RAM和SFR中可位尋址單元的位進行操做的尋址方式。
彙編語言指令:ANL C,bit
該指令將bit(位地址)中的內容(0或1)與C中的內容進行與操做,再將結果傳送到PSW中的進位標誌C中。
什麼是時鐘週期?機器週期?指令週期?它們之間的關係?
答:一、時鐘週期又叫作振盪週期;單片機內部時鐘電路產生(或外部時鐘電路送入)的信號週期,單片機的時序信號是以時鐘週期信號爲基礎而造成的,在它的基礎上造成了機器週期、指令週期和各類時序信號。定義爲時鐘脈衝的倒數(能夠這樣理解:時鐘週期就是單片機外接晶振的倒數,例如:12M的晶振,它的時鐘週期就是1/12us),是計算機中最基本的、最小的時間單位。在一個時鐘週期內,CPU僅完成一個最基本的動做。
2、計算機中,爲了便於管理,常把一條指令的執行過程劃分爲若干個階段,每個階段完成一項工做。例如:取指令、存儲器讀、存儲器寫等,這每一項工做稱爲一個基本操做。完成一項基本操做所須要的時間成爲機器週期。通常狀況,一個機器週期由若干個S週期(狀態週期)組成。機器週期是單片機的基本操做週期,每一個機器週期包含S一、S二、……S6這6個狀態,每一個狀態包含兩拍P1和P2,每一個拍爲一個時鐘週期(振盪週期)。所以,一個機器週期包含12個時鐘週期。依次可表示爲S1P一、S1P二、S2P一、S2P2……、S6P一、S6P2。
3、指令週期:計算機從取一條指令開始,到執行完該指令所須要的時間稱爲指令週期。不一樣的指令,指令長度不一樣,指令週期也不同。但指令週期以機器週期爲單位,指令不一樣,所需的機器指令也不一樣。
51單片機指令根據指令長度與執行週期分爲:
1) 單字節單週期指令
2) 單字節雙週期指令
3) 雙字節單週期指令
4) 雙字節雙週期指令
5) 三字節雙週期指令
6) 一字節四周期指令
總結:時鐘週期是最小單位,機器週期須要1個或者多個時鐘週期,指令週期須要1個或者多個機器週期;機器週期是指完成一個基本操做的時間。指令週期是CPU的關鍵指標,指取出並執行一條指令的時間。通常以機器週期爲單位,分單指令執行週期、雙指令執行週期等。機器週期是完成一個基本操做的時間單元。時鐘週期是CPU的晶振的工做頻率的倒數。
答:接口電路——用於銜接外設與總線,實現存儲空間擴展、I/O口線擴展、類型轉換(電平轉換、串並轉換、A/D轉換)、功能模塊、通訊擴展、總線擴展等。
外圍設備——工做設備,鏈接在接口電路上,主要有輸出設備和輸入設備。
看門狗相關問題:
看門狗的原理?
答:工做原理:在系統運行之後就啓動看門狗計數器,此時看門狗就開始自動計時,若是達到必定的時間還不去給它進行清零,看門狗計數器就會溢出從而引發看門狗中斷,形成系統的復位。
爲何會溢出呢?
由於看門狗是一個計數器,而計數器位數有限。可以裝的數值也就有限(好比8位的最多裝256個數,16位的最多裝65536個數),從開啓看門狗那刻起,它就開始不停的數機器週期,數一個機器週期就計數器加1,加到計數器盛不下了(這就是溢出)就產生一個復位信號,重啓系統。
看門狗分爲軟件看門狗和硬件看門狗,在什麼狀況下軟件看門狗失效?
答:硬件看門狗是利用一個定時器電路,其定時輸出鏈接到電路的復位端,程序在必定時間範圍內對定時器清零,所以程序正常工做時,定時器總不能溢出,也就不能產生復位信號。若是程序出現故障,不在定時週期內復位看門狗,就使得看門狗定時器溢出產生復位信號並重啓系統。
軟件看門狗原理上同樣,只是將硬件電路上的定時器用處理器的內部定時器代替,這樣能夠簡化硬件電路設計,可是在可靠性方面不如硬件定時器。
1、系統內部定時器自身發生故障看門狗就會失效(固然能夠經過雙定時器相互監視,成本高);
2、中斷系統故障致使定時器中斷失效。
3、整個程序死機。主程序出現異常。
何時喂狗?怎麼喂狗?喂狗的注意事項?
答:在實際的單片機應用系統中,到底選用哪一種型號的看門狗,採用何種喂狗方式和看門狗鏈接方式以及在編程中喂狗命令應該放在程序中什麼位置,這要根據現場干擾源的特色、已採用的干擾措施、單片機硬件資源和軟件結構特色以及對單片機系統的可靠性等具體狀況而定。
看門狗通常應用到程序的那些位置?
答: 一些重要的程序,必須讓它一直跑着;並且還要時時關心它的狀態——不能讓它出現死鎖現象。(固然,若是一個主程序會出現死鎖,確定是設計或者編程上的失誤。首要作的事是Debug。)但若是時間緊迫能夠用軟件看門狗,暫時應急。
喂狗命令放置位置:
定時中斷服務子程序中;
主程序中.
復位相關問題:
復位時單片機有什麼動做?
答:主要作的就是初始化每一個寄存器,包括最重要的PC指針,不包括RAM,而後單片機從復位地址開始執行程序。
必須使RST引腳(9)加上持續兩個機器週期(即24個振盪週期)的高電平。單片機就執行復位操做。若是RST持續爲高電平,單片機就處於循環復位狀態。
單片機有哪些復位源,什麼狀況下會致使各個復位源
答:
6個復位源
TM4C123GH6PM微控制器有6個復位源:
(1)上電覆位(POR);
(2)外部復位輸入引腳有效(RST);
(3)掉電檢測能夠用於由如下任一事件引發:① 低於BOR0,觸發值是BOR0的 最高電壓值;② 低於BOR1,觸發值是BOR1的最高 電壓值。
(4)軟件啓動復位(利用軟件復位寄存器);
(5)違反看門狗復位條件;
(6)MOSC故障。
STM8S共有9個復位源:
NRST引腳產生的外部復位
上電覆位(POR)
掉電覆位(BOR)
獨立看門狗復位
窗口看門狗復位
軟件復位
SWIM復位
非法操做碼復位
EMS復位:當一些關鍵的寄存器被破壞或錯誤加載時產生的復位
全部的復位源最終都做用於NRST管腳,並在復位過程當中保持低電平。復位入口向量在內存映射中位於固定的地址6000h。
復位的兩種啓動方式?
答:一、上電覆位:要求接通電源後,自動實現復位操做。
2、按鈕復位:要求接通電源後,單片機自動復位,而且在單片機運行期間,使用開關也能夠實現復位。
復位存在哪些問題?
答:採用上電覆位:復位信號上電過程當中有掉電現象,可能會形成邏輯方面的錯誤致使相關芯片復位時間不夠、二次復位等、從而不可以正常工做起來。緣由:產生的復位信號給了幾個芯片用,致使這個復位信號的負載壓力比較大,驅動能力不夠從而往下調電,此現象經常出如今RC復位上。
復位信號上電前有毛刺與復位信號上電時有毛刺,可能會形成邏輯方面的錯誤致使相關芯片復位時間不夠。方案:加大上拉電阻的阻值。
復位電路有哪些?那種比較好?
答:單片機復位電路主要有四種類型:
(1)微分型復位電路:
(2)積分型復位電路:
(3)比較器型復位電路:
比較器型復位電路的基本原理。上電覆位時,因爲組成了一個RC低通網絡,因此比較器的正相輸入端的電壓比負相端輸入電壓延遲必定時間.而比較器的負相端網絡的時間常數遠遠小於正相端RC網絡的時間常數,所以在正端電壓尚未超過負端電壓時,比較器輸出低電平,經反相器後產生高電平.復位脈衝的寬度主要取決於正常電壓上升的速度.因爲負端電壓放電迴路時間常數較大,所以對電源電壓的波動不敏感.可是容易產生如下二種不利現象:
1)電源二次開關間隔過短時,復位不可靠:
2)當電源電壓中有浪涌現象時,可能在浪涌消失後不能產生復位脈衝。
爲此,將改進比較器重定電路,能夠利用數字邏輯的方法和比較器配合,設計的比較器重定電路。此電路稍加改進便可做爲上電覆位和看門狗復位電路共同復位的電路,大大提升了復位的可靠性。
(4)看門狗型復位電路.
看門狗型復位電路主要利用CPU正常工做時,定時復位計數器,使得計數器的值不超過某一設定的值;當CPU不能正常工做時,因爲計數器不能被複位,所以其計數會超過某一值,從而產生復位脈衝,使得CPU恢復正常工做狀態。此復位電路的可靠性主要取決於軟件設計,即將定時向復位電路發出脈衝的程序放在何處是最優的設計。通常設計,將此段程序放在定時器中斷服務子程序中。然而,有時這種設計仍然會引發程序走飛或工做不正常。緣由主要是:當程序"走飛"發生時,定時器初始化以及開中斷以後的話,這種"走飛"狀況就有可能不能由Watchdog復位電路校訂回來.由於定時器中斷一真在產生,即便程序不正常,Watchdog也能被正常復位.爲此提出定時器加預設的設計方法.即在初始化時壓入堆棧一個地址,在此地址內執行的是一條關中斷和一條死循環語句.在全部不被程序代碼佔用的地址儘量地用子程序返回指令RET代替.這樣,當程序走飛後,其進入陷阱的可能性將大大增長.而一旦進入陷阱,定時器中止工做而且關閉中斷,從而使Watchdog復位電路會產生一個復位脈衝將CPU復位.固然這種技術用於實時性較強的控制或處理軟件中有必定的困難。
因而可知,四種復位電路中,看門狗型復位電路較其餘三中復位電路更加適合。
堆棧相關問題:
堆棧的原理?過程怎麼操做?
答:單片機RAM中,經常會指定一個專門的區域來存放某些特別的數據,它遵循先進後出、後進先出的原則。這個RAM區就是堆棧。堆棧是一種數據結構(數據項按序排列:堆,順序隨意。棧,後進先出)。使用一個稱做堆棧指針的專用寄存器指示前的操做位置,堆棧指針老是指向棧頂。
操做過程:
1) 堆棧的創建(初始化)
2) 參數入棧(push)
3) 參數出棧(pop)(後進先出)
堆棧應用在什麼地方?存在什麼問題?怎麼解決?
答:在80C51單片機中,堆棧在子程序調用和中斷時會把斷點地址自動進棧和出棧。進棧和出棧的指令(PUSH、POP)操做可用於保護現場和恢復現場。因爲子程序調用和中斷都容許嵌套,並能夠多級嵌套,而現場的保護也每每使用堆棧,因此必定要注意給堆棧以必定的深度,以避免形成堆棧內容的破壞而引發程序執行的「跑飛」。
堆棧指針SP在80C51中存放當前的堆棧棧頂所指存儲單元地址的一個8位寄存器。80C51單片機的堆棧是向上生成的,即進棧時SP的內容是增長的;出棧時SP的內容是減小的。
系統復位後。80C51的SP內容爲07H。若不從新定義,則以07H爲棧底,壓棧的內容從08H單元開始存放。但工做寄存器R0~R7有4組,佔有內部RAM地址爲00H~1FH,位尋址區佔有內部RAM地址爲20H~2FH。若程序中使用了工做寄存器1~3組或位尋址區,則必須經過軟件對SP的內容從新定義,使堆棧區設定在片內數據RAM區中的某一區域內(如30H),堆棧深度不能超過片內RAM空間。
學習堆棧的做用?
答:在片內RAM中,經常要指定一個專門的區域來存放某些特別的數據,它遵循順序存取和後進先出(LIFO/FILO)的原則,這個RAM區叫堆棧。
1.子程序調用和中斷服務時CPU自動將當前PC值壓棧保存,返回時自動將PC值彈棧。
2.保護現場/恢復現場
3.數據傳輸
也就是說,堆棧是進入中斷的時候用到的,單片機一旦遇到中斷請求,就會去處理中斷,處理完後再回來處理主程序,這樣就涉及到了一個問題,單片機要保存中斷以前的信息,以便處理完後可以回到主程序中,單片機會在響應中斷前,把單片機如今的指針地址(也就是處理完要返回的地址),以及一些必要的數據壓入堆棧(沒有這些數據,單片機處理完中斷後就沒法肯定主程序的狀態)。
中斷相關問題:
中斷的響應過程?優先級?
答:一、響應過程:
1)根據響應的中斷源的中斷優先級,使相應的優先級狀態觸發器置1;
2) 執行硬件中斷服務子程序調用,並把當前程序計數器PC的內容壓入堆棧,保護斷點,尋找中斷源。
3) 清除相應的中斷請求標誌位(串行口中斷請求標誌RI和TI除外);
4) 把被響應的中斷源所對應的中斷服務程序的入口地址(中斷矢量)送入PC,從而轉入相應的中斷服務程序。
5) 中斷返回,程序返回斷點處進行執行。
2、優先級:中斷的優先級有兩個:查詢優先級與執行優先級
查詢優先級:查詢優先級是不能夠更改和設置的
1)系統默認的優先級(邏輯上):
外部中斷0 > 定時器中斷0 > 外部中斷1 > 定時器中斷1 > 串行中斷
2)由IP寄存器來決定優先級。當IP對應位置爲1時,該中斷級別提升。同爲1是按默認級別
中斷嵌套的好處與壞處?
答:中斷嵌套:CPU在處理級別較低的中斷過程當中,出現了級別較高的中斷請求。CPU中止執行低級別中斷,執行高級別的中斷處理程序後,再接着執行低級別的未被處理完的中斷程序。
使用中斷嵌套可使高優先級別的中斷獲得及時的響應和處理。
1) CPU與外部設備並行工做
2) 可以處理例外事件
3) 實現實時處理
4) 實現人機聯繫
5) 實現用戶程序與操做系統的聯繫
6) 實現多道程序並行執行
7) 在多處理機系統中,實現處理機之間的聯繫
壞處:高級別的中斷一直持續的話會影響低級別中斷的處理。
答:中斷源的識別標誌,可用來造成相應的中斷服務程序的入口地址或存放中斷服務程序的首地址稱爲中斷向量。把全部的中斷向量集中起來,按中斷類型號從小到大的順序存放到存儲器的某一區域內,這個存放中斷向量的存儲區叫作中斷向量表,即中斷服務程序入口地址表。
中斷在單片機中起到什麼做用?
答:中斷能實現快速的CPU與慢速的外設同步工做,實現數據傳送、故障檢測與處理、人機聯繫、多機系統、多道程序分時操做、實時信息處理等。
其它:
什麼是臨界段,哪些狀況下會存在臨界段的問題,如何進行臨界段保護。
答:1.臨界段代碼,也叫臨界區,是指那些必須完整連續運行,不可被打斷的代碼段。
2. ①讀取或者修改變量(特別是用於任務間通訊的全局變量)的代碼,通常來講這是最多見的臨界代碼。
②調用公共函數的代碼,特別是不可重入的函數,若是多個任務都訪問這個函數,結果是可想而知的。總之,對於臨界段要作到執行時間越短越好,不然會影響系統的實時性。
3.中斷處理程序和任務都會訪問的臨界段代碼,須要使用關中斷的方法加以保護;僅由任務訪問的臨界段代碼,能夠經過給調度器上鎖的方法來保護。
什麼是可重入型函數,使用時須要注意哪些問題
答:可重入函數
不爲連續的調用持有靜態數據。
不返回指向靜態數據的指針;全部數據都由函數的調用者提供。
使用本地數據,或者經過製做全局數據的本地拷貝來保護全局數據。
若是必須訪問全局變量,記住利用互斥信號量來保護全局變量。
毫不調用任何不可重入函數。
注意事項:
1 :編寫可重入函數時,應注意局部變量的使用(如編寫C/C++ 語言的可重入函數時,應使用auto 即缺省態局部變量或寄存器變量)
說明:編寫C/C++語言的可重入函數時,不該使用static局部變量,不然必須通過特殊處理,才能使函數具備可重入性。
2 :編寫可重入函數時,若使用全局變量,則應經過關中斷、信號量(即P 、V 操做)等手段對其加以保護
說明:若對所使用的全局變量不加以保護,則此函數就不具備可重入性,即當多個進程調用此函數時,頗有可能使有關全局變量變爲不可知狀態。
專用詞彙解釋:
VCC:C=circuit 表示電路的意思, 即接入電路的電壓;
VDD:D=device 表示器件的意思, 即器件 內部的工做電壓;
對於數字電路來講,VCC是電路的供電電壓,VDD是芯片的工做電壓(一般Vcc>Vdd),VSS是接地點;有些IC既有VDD引腳又有VCC引腳,說明這種器件自身帶有電壓轉換功能。
VEE:發射極電源電壓, Emitter Voltage, 通常用於 ECL 電路的負電源電壓.
VSS:S=series 表示公共鏈接的意思,一般是指電路公共接地端電壓。
VPP:不一樣芯片對Vpp的定義稍有不一樣,好比電壓峯峯值,單片機中Vpp多數定義爲編程電壓
在場效應管(或COMS器件)中,VDD爲漏極,VSS爲源極,VDD和VSS指的是元件引腳,而不表示供電電壓。通常來講VCC=模擬電源,VDD=數字電源,VSS=數字地,VEE=負電源