MSP430單片機(jī)原理_第1頁
MSP430單片機(jī)原理_第2頁
MSP430單片機(jī)原理_第3頁
MSP430單片機(jī)原理_第4頁
MSP430單片機(jī)原理_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第2章 MSP430單片機(jī)原理與C語言基礎(chǔ)MSP430系列超低功耗單片機(jī)有200多種型號,TI 公司用3 4位數(shù)字表示其型號。其中第一位數(shù)字表示大系列,如MSP430F1xx系列、MSP430F2xx系列、MSP430F4xx系列、MSP430F5xx系列等。在每個大系列中,又分若干子系列,單片機(jī)型號中的第二位數(shù)字表示子系列號,一般子系列越大,所包含的功能模塊越多。最后12 位數(shù)字表示存儲容量,數(shù)字越大表示 RAM 和 ROM 容量越大。430 家族中還有針對熱門應(yīng)用而設(shè)計的一系列專用單片機(jī)。如 SP430FW4xx 系列水表專用單片機(jī)、MSP430FG4xx 系列醫(yī)療儀器專用單片機(jī)、MSP4

2、30FE4xx 系列電能計量專用單片機(jī)等。這些專用單片機(jī)都是在同型號的通用單片機(jī)上增加專用模塊而構(gòu)成的。最新的MSP430型號列表可以通過 TI 公司網(wǎng)站下載。在開發(fā)單片機(jī)應(yīng)用系統(tǒng)時,第一步就是單片機(jī)的選型,選擇合適的單片機(jī)型號往往就能事半功倍。單片機(jī)選型基本方法是選擇功能模塊最接近項(xiàng)目需求的系列,然后根據(jù)程序復(fù)雜程度估算存儲器和 RAM 空間,并留有適當(dāng)?shù)挠嗔?,最終決定選用的單片機(jī)型號。本章節(jié)以MSP430F249單片機(jī)為學(xué)習(xí)目標(biāo),介紹單片機(jī)的基本結(jié)構(gòu)和工作原理,讀者可以舉一反三、觸類旁通,而不必每種型號都去學(xué)習(xí)卻無法深入掌握。2.1 MSP430F249單片機(jī)基本結(jié)構(gòu)與原理2.1.1MSP

3、430F249的主要結(jié)構(gòu)特點(diǎn)l 供電電壓范圍 1.8V3.6V。l 超低功耗:活動狀態(tài)270uA(1MHz,2.2V);待機(jī)模式0.3uA;關(guān)機(jī)模式0.1uA。l 16位RISC精簡指令集處理器。l 時鐘系統(tǒng):多種時鐘源,可靈活使用。時鐘頻率達(dá)到16MHz;具有內(nèi)部振蕩器;可外接32kHz低頻晶振;外接時鐘輸入。l 12位A/D轉(zhuǎn)換器,內(nèi)部參考電壓,采用保持電路。l 16位定時器A,3個捕獲/比較寄存器。l 16位定時器B,7個捕獲/比較寄存器。l 4個通用串口:USCI_A0和USCI_A1、USCI_B0和USCI_B1(I2C、SPI)。l 60kB+256B的flash程序存儲器,2k

4、B的RAM數(shù)據(jù)存儲器。l 64引腳QFP封裝。MSP430F249單片機(jī)的芯片封裝形式如圖2.1所示,各引腳的功能描述如表2-1所列。2.1.2 MSP430F249單片機(jī)的基本結(jié)構(gòu)MSP430F24x系列單片機(jī)功能結(jié)構(gòu)示意圖如圖2.2所示。(1)CPU簡介MSP430單片機(jī)的CPU為16位RISC精簡指令集的處理器,只有27條正交匯編指令和7種尋址方式。RISC處理器基本上是為高級語言所設(shè)計的,編譯程序?qū)φ恢噶钕到y(tǒng)很容易做到最優(yōu)化,利于產(chǎn)生高效緊湊的代碼。MSP430CPU中集成了16個16位通用寄存器R0R15,其中R0R3分別復(fù)用為程序指針PC、堆棧指針SP、狀態(tài)寄存器SR和常數(shù)發(fā)生器

5、CG1/CG2。這些寄存器之間的操作只需要一個CPU周期。1)程序計數(shù)器(PC指針)也就是CPU專用寄存器R0,PC指針是一個16位寄存器,可以尋址64kB的空間。MSP430單片機(jī)的指令長度以字(16位)為最小單位,而程序存儲器單元以字節(jié)(8位)為單位,所以PC的值總是偶數(shù)。圖2.1 MSP430F249單片機(jī)引腳圖圖2.2 MSP430F24x系列單片機(jī)功能結(jié)構(gòu)示意圖表2-1MSP430F249單片機(jī)引腳描述引腳名稱引腳號說明AVCC64模擬電源正端,僅用于ADC12模塊AVSS62模擬電源負(fù)端,僅用于ADC12模塊DVCC1電源正端,1.83.6VDVSS63電源負(fù)端P1.0/TACLK

6、/CAOUT12通用數(shù)字I/O/定時器_A時鐘信號輸入/比較器A輸出P1.1/TA013通用數(shù)字I/O/定時器_A比較out0輸出或捕獲CCI0A輸入/BSLP1.2/TA114通用數(shù)字I/O/定時器_A比較out1輸出或捕獲CCI1A輸入P1.3/TA215通用數(shù)字I/O/定時器_A比較out2輸出或捕獲CCI2A輸入P1.4/SMCLK16通用數(shù)字I/O/SMCLK輸出P1.5/TA017通用數(shù)字I/O/定時器_A比較out0輸出P1.6/TA118通用數(shù)字I/O/定時器_A比較out1輸出P1.7/TA219通用數(shù)字I/O/定時器_A比較out2輸出P2.0/ACLK/CA220通用數(shù)字

7、I/O/ACLK輸出/比較器A輸入P2.1/TAINCLK/CA321通用數(shù)字I/O/定時器A時鐘信號INCLK/比較器A輸入P2.2/CAOUT/TA0/CA422通用數(shù)字I/O/定時器A捕獲CCI0B輸入/比較器A輸出/BSL接收/比較器A輸入P2.3/CA0/TA123通用數(shù)字I/O/比較器A輸入/定時器A比較out1輸出P2.4/CA1/TA224通用數(shù)字I/O/比較器A輸入/定時器A比較out2輸出P2.5/ROSE/CA525通用數(shù)字I/O/DCO外部電阻輸入/比較器A輸入P2.6/ADC12CLK/CA626通用數(shù)字I/O/ADC12轉(zhuǎn)換時鐘/比較器A輸入P2.7/TA0/CA7

8、27通用數(shù)字I/O/定時器A比較out0輸出/比較器A輸入P3.0/UCB0STE/UCA0CLK28通用數(shù)字I/O/USCI B0從模式傳輸允許/USCI A0時鐘P3.1/UCB0SIMO/UCB0SDA29通用數(shù)字I/O/USCI B0從模式輸入/主模式輸出SDAP3.2/UCB0SOMI/UCB0SCL30通用數(shù)字I/O/ USCI B0從模式輸出/主模式輸入SPIP3.3/UCB0CLK/UCA0STE31通用數(shù)字I/O/USCI B0 時鐘/USCI A0從模式傳輸允許P3.4UCA0TXD/UCA0SIMO32通用數(shù)字I/O/UART模式USCI A0 數(shù)據(jù)輸出/SPI模式SIM

9、OP3.5/UCA0RXD/UCA0SOMI33通用數(shù)字I/O/P3.6/UCA1TXD/UCA1SIMO34通用數(shù)字I/O/ UART模式USCI A1 數(shù)據(jù)輸出/SPI模式SIMOP3.7/UCA1RXD/UCA1SOMI35通用數(shù)字I/O/ UART模式USCI A1 數(shù)據(jù)輸入/SPI模式SOMIP4.0/TB036通用數(shù)字I/O/定時器_B比較out0輸出或捕獲CCI0A/B輸入P4.1/TB137通用數(shù)字I/O/定時器_B比較out1輸出或捕獲CCI1A/B輸入P4.2/TB238通用數(shù)字I/O/定時器_B比較out2輸出或捕獲CCI2A/B輸入P4.3/TB339通用數(shù)字I/O/定

10、時器_B比較out3輸出或捕獲CCI3A/B輸入P4.4/TB440通用數(shù)字I/O/定時器_B比較out4輸出或捕獲CCI4A/B輸入P4.5/TB541通用數(shù)字I/O/定時器_B比較out5輸出或捕獲CCI5A/B輸入P4.6/TB642通用數(shù)字I/O/定時器_B比較out6輸出或捕獲CCI6A/B輸入P4.7/TBCLK43通用數(shù)字I/O/定時器B時鐘輸入P5.0/UCB1STE/UCA1CLK44通用數(shù)字I/O/USCI B1從模式傳輸允許/USCI A1時鐘P5.1/UCB1SIMO/UCB1SDA45通用數(shù)字I/O/USCI B1 SPI模式SIMO/I2C模式SDAP5.2/UCB

11、1SOMI/UCA1SCL46通用數(shù)字I/O/ USCI B1 SPI模式SOMI/I2C模式SCLP5.3/UCB1CLK/UCA1STE47通用數(shù)字I/O/USCI B1時鐘/USCI A1從模式傳輸允許P5.4/MCLK48通用數(shù)字I/O/MCLK輸出P5.5/SMCLK49通用數(shù)字I/O/SMCLK輸出P5.6/ACLK50通用數(shù)字I/O/ACLK輸出P5.7/TBOUTH/SVSOUT51通用數(shù)字I/O/定時器TB0TB6PWM輸出高阻態(tài)選擇位/SVS比較器輸出P6.0/A059通用數(shù)字I/O/模擬量輸入A0P6.1/A160通用數(shù)字I/O/模擬量輸入A1P6.2/A261通用數(shù)字I

12、/O/模擬量輸入A2P6.3/A32通用數(shù)字I/O/模擬量輸入A3P6.4/A43通用數(shù)字I/O/模擬量輸入A4P6.5/A54通用數(shù)字I/O/模擬量輸入A5P6.6/A65通用數(shù)字I/O/模擬量輸入A6P6.7/A7/SVSIN6通用數(shù)字I/O/模擬量輸入A7/SVS輸入XT2OUT52晶振XT2XT2IN53晶振XT2RST/NMI58復(fù)位輸入/非屏蔽中斷輸入TCK57JTAG口測試時鐘TDI/TCLK55JTAG口測試數(shù)據(jù)輸入/測試時鐘輸入TDO/TDI54JTAG口測試數(shù)據(jù)輸出TMS56JTAG口測試模式選擇VEREF+10外部參考電壓輸入VREF+7ADC12參考電壓正端輸出VREF

13、-/VEREF-11參考電源負(fù)端XIN8晶振XT1XOUT9晶振XT12)堆棧指針SP為CPU專用寄存器R1,SP指針為16為寄存器,也總是偶數(shù)的。堆棧是在片內(nèi)RAM中實(shí)現(xiàn)的,通常將堆棧指針設(shè)置為片內(nèi)RAM的最高地址加一。使用C語言編程時,集成編譯軟件IAR會自動設(shè)置堆棧指針初始值。對程序員來說無需關(guān)心細(xì)節(jié),編譯結(jié)束后在信息窗提示的編譯結(jié)果會給出 RAM 使用量的大小,只要不超過 RAM 區(qū)實(shí)際容量并稍留余量給堆棧用即可。使用匯編語言編程時必須注意堆棧指針的正確設(shè)置,否則堆??赡軙采w你的變量區(qū),導(dǎo)致程序出錯。3)狀態(tài)寄存器SR和常數(shù)發(fā)生器CG1、CG2(見數(shù)據(jù)手冊)狀態(tài)寄存器SR159876

14、543210保留VSCG1SCG0OSCOFFCPUOFFGIENZCV溢出標(biāo)志,當(dāng)算術(shù)運(yùn)算結(jié)果超出有符號數(shù)范圍時置位。SCG1系統(tǒng)時鐘控制位1,該位置位時關(guān)閉SMCLKSCG0系統(tǒng)時鐘控制位0,如果DCO未用作MCLK或SMCLK時,該位置位關(guān)閉DCO。OSCOFF晶振控制位,如果LFXT1未用作MCLK或SMCLK時,該位置位關(guān)閉LFXT1。CPUOFFCPU控制位,該位置位時關(guān)閉CPU。GIE總中斷允許位,該位置位時允許可屏蔽中斷;復(fù)位時禁止所有的可屏蔽中斷。N負(fù)數(shù)標(biāo)志位,當(dāng)運(yùn)算結(jié)果為負(fù)時置位;否則復(fù)位。Z零標(biāo)志位,當(dāng)運(yùn)算結(jié)果為零時置位;否則復(fù)位。C進(jìn)位標(biāo)志位,當(dāng)運(yùn)算結(jié)果產(chǎn)生進(jìn)位時置位;

15、否則復(fù)位。(2)片內(nèi)存儲器MSP430單片機(jī)采用馮·諾依曼結(jié)構(gòu),程序存儲器flash、數(shù)據(jù)存儲器RAM、特殊功能寄存器以及中斷向量全部映射到64kB內(nèi)部地址空間。MSP430不同型號單片機(jī)地址空間略有不同,MSP430F249的存儲器結(jié)構(gòu)如表2-2所示。表2-2 MSP430F249存儲器結(jié)構(gòu)名稱地址范圍大小中斷向量0xFFFF0xFFC064B程序存儲區(qū)flash0xFFC00x1100約60kB信息存儲區(qū)0x10FF0x1000256B引導(dǎo)區(qū)0x0FFF0x0C001kB數(shù)據(jù)存儲區(qū)RAM0x09FF0x02002kB16位外圍模塊0x01FF0x0100256B8位外圍模塊0x0

16、0FF0x0010240B特殊寄存器0x000F0x000016B1)數(shù)據(jù)存儲區(qū)MSP430F249的數(shù)據(jù)存儲區(qū)RAM有2kB大小,地址范圍0x02000x09FF。RAM為堆棧、全局變量和局部變量提供空間。使用C語言來開發(fā)項(xiàng)目,注意觀察編譯結(jié)束后在信息窗口中提示的RAM使用量的大小,只有不超過RAM區(qū)的實(shí)際容量并稍留余量即可。2)引導(dǎo)區(qū)引導(dǎo)區(qū)使得用戶可以通過UART串口對MSP430單片機(jī)的程序存儲器flash或RAM區(qū)實(shí)現(xiàn)程序代碼的寫操作。詳細(xì)內(nèi)容參見TI公司的相關(guān)技術(shù)文檔Features of the MSP430 Bootstrap Loader。3)信息存儲區(qū)MSP430F249單片

17、機(jī)有256B的信息存儲區(qū),它分為兩段,每段128B。信息存儲區(qū)用來存放那些掉電后需要保存的變量,一般用來保存項(xiàng)目的設(shè)定值或量程轉(zhuǎn)換參數(shù)。Flash信息存儲區(qū)只允許塊擦除或?qū)懭氩僮?,且有擦除次?shù)的限制。需要頻繁(幾秒鐘一次)擦除寫入的變量不能存放在信息存儲區(qū),這時可以外接鐵電存儲器EEPROM器件來保存這些變量。4)程序存儲區(qū)MSP430F249單片機(jī)的程序存儲區(qū)位于0x11000xFFC0,約60kB,程序存儲區(qū)用于存放用戶程序、常數(shù)以及表格等。程序存儲區(qū)可以通過JTAG、BSL和ISP方式下載得到用戶程序。關(guān)于Flash存儲器,我們介紹幾個基本概念。Flash 的結(jié)構(gòu)決定了寫操作只能將存儲單

18、元中的各比特位從1改寫成0,而不能將0改寫成1。所以Flash中每個單元可以一次性寫入數(shù)據(jù),數(shù)據(jù)一旦寫入,在擦除前不能被再次改寫。Flash可以被擦除,擦除后所有單元的比特位都恢復(fù)為 1,但擦除操作只能針對整個段進(jìn)行。所以在改寫某單元之前,必須先擦除整個段。Flash存儲器較適合做大批量連續(xù)數(shù)據(jù)存儲,而且一般控制器都會提供連續(xù)寫功能以提高速度。在 Flash 中,將每次能擦除的最小區(qū)塊單位成為“段”(Segment),將每次能連續(xù)寫入的最大區(qū)塊單位稱為“塊”(Block)。MSP430單片機(jī)有5種低功耗模式,1種活動模式,如表2-3所示。任何一種低功耗模式只能與活動模式進(jìn)行切換。表2-3工作模

19、式表模式說明活動模式CPU、所有時鐘與外設(shè)都為激活狀態(tài)LPM0CPU關(guān)閉、ACLK和SMCLK外設(shè)時鐘可用LPM1CPU關(guān)閉、ACLK和SMCLK外設(shè)時鐘可用,若活動模式中DCOCLK未使用,則DCO發(fā)生器也禁止LPM2CPU關(guān)閉、MCLK和SMCLK禁止,DCO發(fā)生器使能,ACLK可用LPM3CPU關(guān)閉、MCLK和SMCLK禁止,DCO發(fā)生器禁止,ACLK可用LPM4CPU關(guān)閉且禁用所有時鐘(3)單片機(jī)工作原理單片機(jī)自動完成賦予它的任務(wù)的過程,也就是單片機(jī)執(zhí)行程序的過程,即一條條指令的執(zhí)行過程。所謂指令就是把要求單片機(jī)執(zhí)行的各種操作,用命令的形式寫下來,一條指令對應(yīng)著一種基本操作。單片機(jī)所能

20、執(zhí)行的全部指令,就是該單片機(jī)的指令系統(tǒng),不同種類的單片機(jī),其指令系統(tǒng)亦不同。為使單片機(jī)能自動完成某一特定任務(wù),必須把要解決的問題編成一系列指令(這些指令必須是選定單片機(jī)能識別和執(zhí)行的指令),這一系列指令的集合就成為程序。程序需要預(yù)先存放在具有存儲功能的部件存儲器中。存儲器由許多存儲單元(最小的存儲單位)組成,指令就存放在這些單元里。每一個存儲單元有唯一的地址號,該地址號稱為存儲單元的地址,這樣只要知道了存儲單元的地址,就可以找到這個存儲單元,其中存儲的指令就可以被取出,然后再被執(zhí)行。 程序的執(zhí)行通常是順序的,所以程序中的指令也是一條條順序存放的。單片機(jī)在執(zhí)行程序時要能把這些指令一條條取出并加以

21、執(zhí)行,必須有一個部件能追蹤指令所在的地址,這一部件就是程序計數(shù)器PC(包含在CPU中)。在開始執(zhí)行程序時,給PC賦以程序中第一條指令所在的地址,然后取得每一條要執(zhí)行的命令,PC之中的內(nèi)容就會自動增加,增加量由本條指令長度決定,以指向下一條指令的起始地址,保證指令順序執(zhí)行。在程序順序執(zhí)行時,PC指針的內(nèi)容自動增加,指向正在執(zhí)行的指令的下一條指令;當(dāng)發(fā)生中斷或調(diào)用子程序時,當(dāng)前的PC值被保存到堆棧,然后PC指針置入新的值(中斷向量地址或子程序入口地址),程序的流動發(fā)生變化,執(zhí)行完這些程序后,PC指針的值要恢復(fù)為堆棧中保存的舊的PC值,程序從斷點(diǎn)處繼續(xù)順序執(zhí)行。2.2 MSP430單片機(jī)的C語言基礎(chǔ)

22、C語言是一種結(jié)構(gòu)化的高級語言,其優(yōu)點(diǎn)是語言簡潔、表達(dá)能力強(qiáng)、使用方便靈活、可讀性好、可移植性強(qiáng)。C語言程序本身不依賴單片機(jī)硬件,如果更改工程項(xiàng)目中的單片機(jī)型號,對C語言程序稍加修改就可以進(jìn)行程序移植,而且移植程序時不一定要求程序開發(fā)人員詳細(xì)掌握新型號單片機(jī)的指令系統(tǒng)。C語言程序的書寫格式十分自由。一條語句可以寫成一行,也可以寫成幾行;還可以在一行內(nèi)寫多條語句;但是需要注意的是,每條語句都必須以分號“;”作為結(jié)束符。為了C語言程序能夠書寫清晰,便于閱讀、理解和維護(hù),在書寫C語言程序時最好遵循以下規(guī)則。a)一個聲明或一條語句占一行;b)不同結(jié)構(gòu)層次的語句,從不同的起始位置開始,機(jī)縮進(jìn)相同的字?jǐn)?shù);c

23、)用括起來的部分表示程序的某一層次結(jié)構(gòu)。目前有幾種C編譯器可以進(jìn)行Msp430單片機(jī)程序開發(fā),這些C編譯器基本功能大致相同,但在某些細(xì)節(jié)上還是有所區(qū)別的,因此當(dāng)選擇了某個C編譯器后應(yīng)該學(xué)習(xí)掌握相應(yīng)的C編譯器語言用法。本章將以IAR for MSP430 編譯器為例講解C430程序設(shè)計的C語言基礎(chǔ)。2.2.1 C語言的標(biāo)識符和關(guān)鍵字表2-4 C語言的關(guān)健字關(guān)鍵字 用途 說明 char 聲明字符型變量或函數(shù) 數(shù)據(jù)類型double 聲明雙精度變量或函數(shù) void 聲明函數(shù)無返回值或無參數(shù),聲明無類型指針 unsigned 聲明無符號類型變量或函數(shù) signed 聲明有符號類型變量或函數(shù) short

24、聲明短整型變量或函數(shù) long 聲明長整型變量或函數(shù) int 聲明整型變量或函數(shù) float 聲明浮點(diǎn)型變量或函數(shù) sizeof 計算數(shù)據(jù)類型長度 volatile 說明變量在程序執(zhí)行中可被隱含地改變 typedef 重新進(jìn)行數(shù)據(jù)類型定義 const 聲明常量 Static 聲明靜態(tài)變量 存儲種類的說明register 聲明寄存器變量 extern 聲明外部變量 return 函數(shù)返回語句 返回一個值 程序語句case 開關(guān)語句分支 default Switch語句的失敗選擇項(xiàng) switch 開關(guān)語句 goto 無條件跳轉(zhuǎn)語句 else 構(gòu)成if-else選擇語句 if if條件語句 cont

25、inue 結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán) break 跳出當(dāng)前循環(huán)體 while 構(gòu)成while和do-while循環(huán)語句 do 循環(huán)語句的循環(huán)體 for for循環(huán)語句 1)C語言的標(biāo)識符是用來標(biāo)識源程序中某個對象名字的。這些對象可以是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類型、存儲方式、語句等。一個標(biāo)識符由字符串、數(shù)字和下劃線等組成,第一個字符必須是字母或下劃線,通常以下劃線開頭的標(biāo)識符是編譯系統(tǒng)專用的,因此在編寫C語言源程序時一般不要使用以下劃線開頭的標(biāo)識符,而將下劃線用作分段符。標(biāo)識符的長度由系統(tǒng)決定,標(biāo)識符最長可達(dá)255個字符,編寫源程序時標(biāo)識符的長度不要超過 32個字符。2)關(guān)鍵字是一類具有固

26、定名稱和特定含義的特殊標(biāo)識符,又稱為保留字。在編寫C語言源程序時一般不允許將關(guān)鍵字另作別用,換句話說就是對于標(biāo)識符的命名不要與關(guān)鍵字相同。上面表2.4所列的C語言關(guān)鍵字由系統(tǒng)保留不能用作用戶標(biāo)識符。 3)程序中對于標(biāo)識符的命名應(yīng)當(dāng)簡潔明了,含義清晰,便于閱讀理解,如用標(biāo)識符“max”表示最大值,用“TIMER0”表示定時器0等。盡量不要取名“aa”、 “bb”等等沒有特定意義的標(biāo)識符,這樣雖然沒有違反C語言的規(guī)則,但是在程序里就很不容易理解。 4)C語言區(qū)分大小寫字母,C語言編譯器在對程序進(jìn)行編譯時,對于程序中同一個字母的大小寫作為不同的變量來處理。例如定義一個延時函數(shù)的形式參數(shù)time,但是

27、如果程序當(dāng)中再出現(xiàn)一個由大寫字母定義的標(biāo)識符TIME,那么它們在程序當(dāng)中是兩個不同的標(biāo)識符,是沒有沖突的。 5)C語言程序中有且只有一個main函數(shù),一個C語言程序,無論main函數(shù)的物理位置在那里,總是從main函數(shù)開始執(zhí)行。 6)每句程序語句后面一定要加分號,分號是C語言結(jié)構(gòu)的一部分,如果缺少了就會語法出錯。7)注釋,在程序中添加注釋是為了能更加容易讀懂和理解程序,IAR有兩種風(fēng)格的注釋方法“/”和“/*-*/”。 “/”的意思是在其后面的全部引導(dǎo)為注釋,而“/*-*/”的意思是在“/*”開始,一直到遇到“*/”為止,在其里面的內(nèi)容都被認(rèn)為是注釋。 不同的C語言編譯器中變量類型略有差別,表

28、2-5列出IAR for MSP430支持的變量類型。表2-5 C430中變量類型數(shù)據(jù)類型 值域 字節(jié)數(shù) 備注char-1281271可設(shè)置unsigned char0255 128-1int-32768327672unsigned int065535 2216-1long-214748364821474836474unsigned long 04294967295 4232-1long long-922337203685477580892233720368547758078unsigned long long0184467440737095516158264-1float-3.4x10-38

29、3.4x10-3841位符號位, 8位指數(shù)位, 23位尾數(shù)位double-1.79x10-3081.79x10-3088可設(shè)置,1位符號位,11位指數(shù)位,52位尾數(shù)位Float和double的指數(shù)位是按補(bǔ)碼的形式來表示的,所以float的指數(shù)范圍為-128+127,而double的指數(shù)范圍為-1024+1023。float的范圍為-2128 +2128,也即-3.40E+38 +3.40E+38;double的范圍為-21024 +21024,也即-1.79E+308 +1.79E+308。float和double的精度是由尾數(shù)的位數(shù)來決定的。float:223 = 8388608,一共七位,

30、這意味著最多能有7位有效數(shù)字,float的精度為7位;  double:252 = 4503599627370496,一共16位,double的精度為16位。IAR for msp430允許改變某些變量的特性。在打開工程后,選擇菜單項(xiàng)ProjectOptions,在 General OptionTarget項(xiàng)中可以設(shè)置浮點(diǎn)數(shù)長度,F(xiàn)loating Point決定了double變量的字節(jié)數(shù),默認(rèn)是 32bit,可以設(shè)置為64bit。在C/C+ CompileLanguage項(xiàng)中Plain char可以設(shè)置char是否等效為unsigned char。在變量定義中增加某些關(guān)鍵字

31、可以給變量賦予某些特殊性質(zhì):const:定義常量。在 C430 語言中,const關(guān)鍵字定義的常量實(shí)際上被放在了 程序存儲器flash中,經(jīng)常用const關(guān)鍵字定義顯示表之類的常數(shù)數(shù)組。extern:聲明外部變量,外部變量是指在函數(shù)或文件外部定義的全局變量。使用時,extern置于變量或函數(shù)前,表示變量或函數(shù)的定義在別的文件中,提示編譯器在遇到此變量和函數(shù)時在其他模塊中尋找它的定義,static:定義靜態(tài)局部變量或靜態(tài)函數(shù),靜態(tài)局部變量或靜態(tài)函數(shù)只有本文件內(nèi)的代碼才能訪問它,它的名字在其它文件中不可見。有時候希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲單元不釋放,在

32、下次該函數(shù)調(diào)用時,該變量保留上一次函數(shù)調(diào)用結(jié)束時的值。這時就應(yīng)該指定局部變量為靜態(tài)局部變量。volatile:定義“揮發(fā)性”變量。編譯器將認(rèn)為該變量的值會隨時改變,對該變量的任何操作都不會被優(yōu)化過程刪除。volatile用在如下的幾個地方:中斷服務(wù)程序中修改的供其它程序檢測的變量需要加volatile;多任務(wù)環(huán)境下任務(wù)間共享的標(biāo)志應(yīng)該加volatile;存儲器映射的硬件寄存器通常也要加volatile說明,因?yàn)槊看螌λ淖x寫都可能由不同意義。volatile提醒編譯器它后面所定義的變量隨時都有可能改變,因此編譯后的程序每次需要存儲或讀取這個變量的時候,都會直接從變量地址中讀取數(shù)據(jù)。如果沒有vo

33、latile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲,可能暫時使用寄存器中的值,如果這個變量由別的程序更新了的話,將出現(xiàn)不一致的現(xiàn)象。全局變量:只要定義在函數(shù)體(包括主函數(shù))外,就是全局變量了,編譯器為全局變量安排特定的數(shù)據(jù)區(qū),這些數(shù)據(jù)區(qū)為全局變量專用。全局變量一般定義在C程序的開頭部分、主函數(shù)之前,在與該程序有關(guān)的所有文件都可以使用該變量。程序開始時分配空間,程序結(jié)束時釋放空間,默認(rèn)初始化為0。對于多文件C語言程序,如果全局變量定義在其它文件中,那么別的程序文件里面的函數(shù)要訪問另一個文件里面的全局變量,須在對全局變量進(jìn)行外部變量聲明,關(guān)鍵詞extern。局部變量是在一個函數(shù)內(nèi)部定義的變量,它只在定

34、義它的那個函數(shù)范圍以內(nèi)有效,在此函數(shù)之外局部變量即失去意義,因而也就不能使用這些變量了。不同的函數(shù)可以使用相同的局部變量名,由于它們的作用范圍不同,不會相互干擾。函數(shù)的形式參數(shù)也屬于局部變量。局部變量在每次函數(shù)調(diào)用時分配存儲空間,在每次函數(shù)返回時釋放存儲空間。靜態(tài)局部變量:靜態(tài)局部變量在函數(shù)內(nèi)進(jìn)行定義,但不像其它局部變量,當(dāng)調(diào)用時就存在,退出函數(shù)時就消失,靜態(tài)局部變量始終存在著。靜態(tài)局部變量的生存期為整個源程序執(zhí)行期間,但是其作用域仍與局部變量相同,即只能在定義該變量的函數(shù)內(nèi)使用。退出該函數(shù)后,盡管靜態(tài)局部變量還繼續(xù)存在,但不能使用它。靜態(tài)局部變量有全局變量的優(yōu)點(diǎn),也有局部變量的優(yōu)勢。全局變量

35、和靜態(tài)局部變量會在程序剛開始運(yùn)行時進(jìn)行初始化,也是唯一的一次初始化,默認(rèn)初始化值為0。不過和全局變量比起來,static可以控制變量的可見范圍,。當(dāng)我們同時編譯多個文件時,所有未加static前綴的全局變量和函數(shù)都具有全局可見性。例如,我們要同時編譯兩個源文件,一個是a.c,另一個是main.c。a.c函數(shù)的內(nèi)容char a = 'A'  void msg()     printf("Hellon");  下面是main.c的內(nèi)容int &

36、#160;main( void )         extern   char  a;     / 聲明外部變量      printf( "%c", a);     msg();     while(1); /循環(huán)等待 程序的運(yùn)行結(jié)果是:A Hello為什么在a.c中定義的全局變量a和函數(shù)msg能

37、在main.c中使用?前面說過,所有未加static前綴的全局變量和函數(shù)都具有全局可見性,其它的源文件也能訪問。此例中,a是全局變量,msg是函數(shù),并且都沒有加static前綴,因此對于另外的源文件main.c是可見的。如果加了static,就會對其它源文件隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數(shù)和同名變量,而不必?fù)?dān)心命名沖突。2.2.2 C語言的運(yùn)算符表2-6 C語言的運(yùn)算符名稱符號算術(shù)運(yùn)算符+ - * / % + -關(guān)系運(yùn)算符> < = >= <= !=邏輯運(yùn)算符&& |

38、!位操作運(yùn)算符& | << >>賦值運(yùn)算符= += -= *= /= %= &= |= = = >>= <<=自增、自減運(yùn)算符說明:+i 意思是:i自增1后再參與運(yùn)算。 -i 意思是:i自減1后再參與運(yùn)算。 i+ 意思是:i參與運(yùn)算后,i的值再自增1。 i- 意思是:i參與運(yùn)算后,i的值再自減1。 復(fù)合賦值運(yùn)算符說明:在賦值運(yùn)算符“”的前面加上其它運(yùn)算符,就構(gòu)成了所謂復(fù)合賦值運(yùn)算符。+ 加法賦值,>> 右移位賦值,-減法賦值, 邏輯與賦值,* 乘法賦值,邏輯或賦值,除法賦值, 邏輯異或賦值,取模賦值, 邏輯非賦值,&l

39、t;< 左移位賦值。采用這種復(fù)合賦值運(yùn)算符,可以使程序簡化,同時還可以提高程序的編譯效率。例如a+=b 表示a=a+b;a-=b 表示a=a-b;a*=b表示a=a*b;a/=b表示a=a/b;a%=b 表示a=a%b運(yùn)算符的優(yōu)先級與結(jié)合性 表2-7 運(yùn)算符的優(yōu)先級優(yōu)先級 操作符 功能 結(jié)合性 1(最高) () 改變優(yōu)先級 從左至右 數(shù)組下標(biāo) > 指向結(jié)構(gòu)成員 . 結(jié)構(gòu)體成員 2 + -自增1 自減1 從右至左 & 取地址 * 取內(nèi)容 ! 邏輯取反 按位取反 + - 正數(shù) 負(fù)數(shù) () 強(qiáng)制類型轉(zhuǎn)換 sizeof 計算內(nèi)存字節(jié)數(shù) 3 * / % 乘法 除法 求余 從左至右 4

40、 + - 加法 減法 5 << >> 左移位 右移位 6 < <= > >= 小于 小于等于 大于 大于等于 7 = != 等于 不等于 8 & 按位與 9 按位異或 10 | 按位或 11 && 邏輯與 12 | 邏輯或 13 ?: 條件運(yùn)算符 從右至左 14 = += -= *= /= %= &= = |= <<= >>=復(fù)合賦值運(yùn)算符 從右至左 15(最低) , 逗號運(yùn)算符 從左至右 從表2-7可知,語言中的運(yùn)算符的運(yùn)算優(yōu)先級共分為15級。1級最高,15級最低。在表達(dá)式中,優(yōu)先級較高的

41、要比優(yōu)先級較低的先進(jìn)行運(yùn)算。 而在一個運(yùn)算量兩側(cè)的運(yùn)算符優(yōu)先級相同時, 則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。 語言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。需要時可在算術(shù)表達(dá)式中采用圓括號來改變運(yùn)算符的優(yōu)先級。 C語言中提供了一種用于求取數(shù)據(jù)類型、變量以及表達(dá)式的字節(jié)數(shù)的運(yùn)算符: sizeof,該運(yùn)算符的一般使用形式為: sizeof(表達(dá)式)或sizeof(數(shù)據(jù)類型) 應(yīng)該注意的是,sizeof是一種特殊的運(yùn)算符,不要錯誤地認(rèn)為它是一個函數(shù)。實(shí)際上,字節(jié)數(shù)的計算在程序編譯時就完成了,而不是在程序執(zhí)行的過程中才計算出來的。例如:int a = sizeof(

42、float); 執(zhí)行這條命令的結(jié)果是把4賦給了整型變量a,這意味著一個單精度數(shù)存儲時占有4個字節(jié)內(nèi)存。1)盡可能避免浮點(diǎn)運(yùn)算。對于單片機(jī)來說,浮點(diǎn)數(shù)的運(yùn)算速度很慢, RAM開銷也大,且有效位數(shù)有限;在低功耗應(yīng)用中CPU運(yùn)算時間直接關(guān)系到平均功耗。因此在編程初期就要養(yǎng)成盡量避免使用浮點(diǎn)數(shù)的習(xí)慣。2)防止定點(diǎn)數(shù)溢出。定點(diǎn)數(shù)運(yùn)算首先要防止數(shù)據(jù)溢出。例如:long x;int a;x=a*1000;雖然x是long變量,但a和常數(shù)1000都是int型,相乘結(jié)果仍然是int型。在 a>65的情況下,結(jié)果就會溢出。程序應(yīng)該修改為:x=a*(long)1000; 或 x=(long)a*1000;若遇

43、到多個變量相乘,更需要細(xì)心檢查。所以,在測試每一段軟件的時候,一定要取邊界條件做極限測試。3)小數(shù)的處理。遇到需要保留小數(shù)的運(yùn)算,可以采用浮點(diǎn)數(shù),但是軟件開銷較大。用定點(diǎn)數(shù)也可以處理小數(shù)。原理就是先擴(kuò)大,再運(yùn)算。例如,我們需要計算溫度并保留1位小數(shù),假設(shè)溫度計算公式是:Deg_C=ADC*1.32/1.25-273為了讓小數(shù) 1.32 能被定點(diǎn)運(yùn)算,先擴(kuò)大 100 倍變成 132,當(dāng)然,除數(shù) 1.25 也要隨之?dāng)U大 100 倍,公式變?yōu)椋篋eg_C=(long)ADC*132/125-273。這樣運(yùn)算結(jié)果只能保留到整數(shù),為了讓結(jié)果保留1位小數(shù),需要人為將所有數(shù)值都擴(kuò)大 10 倍,得到最終計算公

44、式 Deg_C=(long)ADC*1320/125-2730。假設(shè)溫度應(yīng)該是 23.4 度,上述公式的運(yùn)算結(jié)果將是 234。在顯示的時候,將小數(shù)點(diǎn)添加在倒數(shù)第 2 位上,即可顯示 23.4。用定點(diǎn)數(shù)處理小數(shù),如需要保留 N 位小數(shù),就要將數(shù)值擴(kuò)大10N倍。注意防止溢出,且要記住每個數(shù)值所擴(kuò)大的倍數(shù),在程序中應(yīng)添加注釋。4)盡量減少乘除法。430 單片機(jī)沒有乘法/除法指令,乘除操作會被編譯器轉(zhuǎn)換成移位和加法來實(shí)現(xiàn)。如果乘除的數(shù)值剛好是 2 的冪,那么可以用移位直接替代乘除法,運(yùn)算速度會提高很多。例如對 16 次采樣數(shù)據(jù)求平均:for(i=0;i<16;i+) Sum+=ADC_Value

45、i; /求和Aver=Sum/16; /這一句的運(yùn)算較慢對于除 16 寫成如下形式,運(yùn)行速度會提高很多:Aver=Sum>>4; /除以 16若將編譯器優(yōu)化級別設(shè)置得比較高,在遇到乘除 2 的冪表達(dá)式時,編譯器會自動用移位替代除法(編譯器很聰明),從而加快執(zhí)行速度。位操作指令大部分存在于早期速度不高的 CISC 處理器上(以 8051 為代表),以提高執(zhí)行效率,彌補(bǔ) CPU 運(yùn)算速度的不足。目前幾乎所有的 RISC 型處理器都取消了位操作指令,430 單片機(jī)也不例外。在 430 的 C 語言中,也不支持位變量,因?yàn)槲徊僮魍耆梢杂勺兞颗c掩模位(mask bits)之間的邏輯操作來實(shí)

46、現(xiàn)。例如將 P1.0 置高、將 P1.1 置低,將 P1.2 取反,我們可以寫成:P1OUT |= 0x01; /P2.0 置高P1OUT &= 0x02; /P2.1 置低P1OUT = 0x04; /P2.2 取反在寄存器頭文件中,已經(jīng)將 BIT0BIT7 定義成 0x010x80,上述程序也可以寫成:P1OUT |= BIT0; /P2.0 置高P1OUT &= BIT1; /P2.1 置低P1OUT = BIT2; /P2.2 取反對于多位可以同時操作,例如將 P1.1、P1.2、P1.3、P1.4 全部置高/低可以寫成:P1OUT |= BIT1+BIT2+BIT3+

47、BIT4; /P1.1/2/3/4 全置高P1OUT &=(BIT1+BIT2+BIT3+BIT4); /P1.1/2/3/4 全置低注意括號!實(shí)際上,這條語句相當(dāng)于P1OUT |= 0x1e; /P1.1/2/3/4 全置高對于讀操作,也可以通過寄存器與掩模位(mask bits)之間的“與”操作來實(shí)現(xiàn)。例如有通過 P1.5、P1.6 口控制位于 P2.0 口的 LED。下面代碼示范讀取 P1.5 和 1.6 的值:char Key;if(P1IN & BIT5)=0)P2OUT|=BIT0;/若P1.5為低,則P2.0口的LED 亮if( P1IN & BIT5)P

48、2OUT|=BIT1;/若P1.5為高,則P2.1口的 LED 亮if( P1IN & (BIT5+BIT6)P2OUT|=BIT0;/若 P1.5 和 P1.6 任一為高,則點(diǎn)亮LEDif(P1IN & (BIT5+BIT6) != (BIT5+BIT6)P2OUT|=BIT0;/若 P1.5 和 P1.6 任一為低,則點(diǎn)亮 LEDif(P1IN & BIT5)Key=1;ElseKey=0; /讀取 P1.5 狀態(tài)賦給變量 Key。另外還有一種流行的位操作寫法,用(1<<x)來替代 BITx 宏定義:P2OUT |= (1<<0); /P2.

49、0 置高P2OUT &= (1<<1); /P2.1 置低P2OUT = (1<<2); /P2.2 取反if(P1IN & (1<<5)=0) P2OUT|=(1<<0); /若 P1.5 為低,則 P2.0 口的LED 亮。這種寫法的好處是使用純粹的 C 語言表達(dá)式實(shí)現(xiàn),不依賴于 msp430 的頭文件中 BITx的宏定義,無需改動即可移植到任何其他單片機(jī)上,但可讀性較差。2.2.3 函數(shù)C語言程序是由若干個函數(shù)單元組成的,每個函數(shù)都是完成某個特殊任務(wù)的子程序段。組成一個程序的若干個函數(shù)可以保存在一個源程序文件中,也可以保存在

50、不同源程序文件中。文件名由程序設(shè)計人員根據(jù)某種規(guī)則自己確定,其擴(kuò)展名統(tǒng)一為“.C”。一個完整的C語言程序應(yīng)包含一個主函數(shù)main()和若干個其它功能的函數(shù)。函數(shù)之間可以相互調(diào)用,但main()函數(shù)只能調(diào)用其它的功能函數(shù),而不能被其它函數(shù)所調(diào)用。功能函數(shù)可以是C語言編譯器提供的庫函數(shù),也可以由用戶按實(shí)際需要自行編寫的函數(shù)。不管main()函數(shù)處于程序中的什么位置,程序總是從main()函數(shù)開始執(zhí)行。一個函數(shù)必須預(yù)先定義或聲明后才能調(diào)用。函數(shù)定義或聲明位于源程序的預(yù)處理命令之后的開始位置。函數(shù)定義部分包括有函數(shù)的存儲類型、返回值數(shù)據(jù)類型、函數(shù)名、形式參數(shù)說明等,函數(shù)名后面必須跟一個圓括弧(),形式

51、參數(shù)說明在圓括弧()內(nèi)進(jìn)行。函數(shù)也可以沒有形式參數(shù)。函數(shù)的位置比較自由。函數(shù)由函數(shù)名和一對花括弧“”組成,在“”里面的內(nèi)容就是函數(shù)體,如果一個函數(shù)有多個“”,則最外面的一對“”為函數(shù)體的范圍。函數(shù)是C語言中的一種基本模塊。在進(jìn)行程序設(shè)計的過程中,如果所設(shè)計的程序較大,一般應(yīng)將其分成若干個子程序模塊,每個子程序模塊完成一種特定的功能。在C語言中,子程序是用函數(shù)來實(shí)現(xiàn)的。對于一些需要經(jīng)常使用的子程序可以按函數(shù)來設(shè)計,以供反復(fù)調(diào)用。此外,EW430編譯器還提供了豐富的運(yùn)行庫函數(shù),用戶可以根據(jù)需要隨時調(diào)用。這種模塊化的程序設(shè)計方法,可以大大提高編程效率。標(biāo)準(zhǔn)庫函數(shù)見IAR for msp430安裝目錄

52、文件clib.pdf,路徑D:Program FilesIAR SystemsEmbedded Workbench 6.0 Evaluation430docclib.pdf。從用戶的角度來看,有兩種函數(shù):標(biāo)準(zhǔn)庫函數(shù)和用戶自定義函數(shù)。標(biāo)準(zhǔn)庫函數(shù)是IAR EW430編譯器提供的,不需要用戶進(jìn)行定義,可以直接調(diào)用。用戶自定義函數(shù)是用戶根據(jù)自己的需要編寫的能實(shí)現(xiàn)特定功能的函數(shù),它必須先進(jìn)行定義之后才能調(diào)用。函數(shù)的定義無參數(shù)函數(shù)定義的語法格式: Void 函數(shù)名() 聲明部分 程序語句 void delay(void) /函數(shù)頭 unsigned int i,j; /聲明部分 for(i=100;i&g

53、t;0;i-) /程序語句 for(j=112;j>0;j-) ; 有參數(shù)函數(shù)定義的語法格式:函數(shù)類型 函數(shù)名(形式參數(shù)表) 形式參數(shù)說明; 局部變量定義; 函數(shù)體語句; 其中,“函數(shù)類型”說明了自定義函數(shù)返回值的類型。 int compare(int a,int b)/函數(shù)頭,括號里為形式參數(shù) if(a>b) /以下是程序語句 return a; else return b; 對于實(shí)參與形參的特點(diǎn)有以下的幾點(diǎn)補(bǔ)充: 1)實(shí)參與形參在類型數(shù)量順序應(yīng)保持一致,否則會在編繹的時候出現(xiàn)警告或者程序運(yùn)行的結(jié)果錯誤。 2)被調(diào)用函數(shù)的形參只有被調(diào)用的時候才會被分配內(nèi)存空間,退出了函數(shù)之后,所

54、分配的內(nèi)存單元立即被釋放,所以退出了函數(shù)之后形參就不能再使用。 3)實(shí)參在調(diào)用前一定要有確定的值,因此在函數(shù)調(diào)用前必須先賦予實(shí)參一個確定的值。 如果定義函數(shù)時只給出一對花括號而不給出其局部變量和函數(shù)體語句,則該函數(shù)為所謂“空函數(shù)”,這種空函數(shù)也是合法的。在進(jìn)行C語言模塊化程序設(shè)計時,各模塊的功能可通過函數(shù)來實(shí)現(xiàn)。開始時只設(shè)計最基本的模塊,其它作為擴(kuò)充功能在以后需要時再加上。編寫程序時可在將來準(zhǔn)備擴(kuò)充的地方寫上一個空函數(shù),這樣可使程序的結(jié)構(gòu)清晰,可讀性好,而且易于擴(kuò)充。C語言程序中函數(shù)是可以互相調(diào)用的。所謂函數(shù)調(diào)用就是在一個函數(shù)體中引用另外一個已經(jīng)定義了的函數(shù),前者稱為主調(diào)用函數(shù),后者稱為被調(diào)用

55、函數(shù)。主調(diào)用函數(shù)調(diào)用被調(diào)用函數(shù)的一般形式為: 函數(shù)名(實(shí)際參數(shù)表); 其中,“函數(shù)名”指出被調(diào)用的函數(shù)。 “實(shí)際參數(shù)表”中可以包含多個實(shí)際參數(shù),各個參數(shù)之間用逗號隔開。實(shí)際參數(shù)的作用是將它的值傳遞給被調(diào)用函數(shù)中的形式參數(shù)。在C語言中可以采用三種方式完成函數(shù)的調(diào)用: 1)函數(shù)語句。在主調(diào)函數(shù)中將函數(shù)調(diào)用作為一條語句。 2)函數(shù)表達(dá)式。在主調(diào)函數(shù)中將函數(shù)調(diào)用作為一個運(yùn)算對象直接出現(xiàn)在表達(dá)式中。 3)函數(shù)參數(shù)。在主調(diào)函數(shù)中將函數(shù)調(diào)用作為另一個函數(shù)用的實(shí)際參數(shù)。在進(jìn)行函數(shù)調(diào)用時,必須用主調(diào)函數(shù)中的實(shí)際參數(shù)來替換被調(diào)函數(shù)中的形式參數(shù),這就是所謂的參數(shù)傳遞。在C語言中,對于不同類型的實(shí)際參數(shù),有三種不同的參數(shù)傳遞方式: 1)基本類型的實(shí)際參數(shù)傳遞 當(dāng)函數(shù)的參數(shù)是基本類型的變量時,主調(diào)函數(shù)將實(shí)際參數(shù)的值傳遞給被調(diào)函數(shù)中的形式參數(shù),這種方式稱為值傳遞。前面講過,函數(shù)中的形式參數(shù)在未發(fā)生數(shù)調(diào)用之前是不占用內(nèi)存單元的,只有在進(jìn)行函數(shù)調(diào)用時才為其分配臨時存儲單元。而函數(shù)的實(shí)際參數(shù)是要占用確定的存儲單元的。 值傳遞方式是將實(shí)際參數(shù)的值傳遞到為被調(diào)函數(shù)中形式參數(shù)分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論