www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

1 hitech picc語言的特點  picc基本上符合ansi標準,但是不支持函數(shù)的遞歸調(diào)用,其主要原因是pic單片機特殊的堆棧結(jié)構(gòu)。pic單片機中的堆棧是硬件實現(xiàn)的,其深度已隨芯片固定,無法實現(xiàn)需要大量堆棧操作的遞歸算法;另外在pic單片機中實現(xiàn)軟件堆棧的效率也不是很高。為此,picc編譯器采用一種“靜態(tài)覆蓋”技術(shù),以實現(xiàn)對c語言函數(shù)中的局部變量分配固定的地址空間。經(jīng)這樣處理后產(chǎn)生出的機器代碼效率很高。當(dāng)代碼量超過4  kb后,c語言編譯出的代碼長度與全部用匯編代碼實現(xiàn)的差別已經(jīng)不是很大(<10%),當(dāng)然前提是在整個c代碼編寫過程中需時時注意所編寫語句的效率?! ? picc中的變量  picc中的變量類型和標準c語言一樣,這里不再重復(fù)。為了使編譯器產(chǎn)生最高效的機器碼,picc把單片機中數(shù)據(jù)寄存器的bank交由編程員自己管理,因此在定義用戶變量時必須自己決定這些變量具體放在哪一個bank中。如果沒有特別指明,所定義的變量將被定位在bank0。定義在其他bank內(nèi)的變量前面必須加上相應(yīng)的bank序號,例如:  bank1 unsigned char temp;//變量定位在bank1中  中檔系列pic單片機數(shù)據(jù)寄存器的一個bank大小為128  b,除前面若干字節(jié)的特殊功能寄存器區(qū)域,在c語言中某一bank內(nèi)定義的變量字節(jié)總數(shù)不能超過可用ram字節(jié)數(shù)。如果超過bank容量,在最后連接時會報錯,大致信息如下:  error[000]:can’t find 0x12c words for psect rbss_1 in  segmentbank1  鏈接器提示,總共有0x12c(300)字節(jié)準備放到bank1中,但bank1容量不夠。雖然變量所在的bank定位必須由編程員自己決定,但編寫源程序時在進行變量存取操作前無需再特意編寫設(shè)定bank的指令。c編譯器會根據(jù)所操作的對象自動生成對應(yīng)bank設(shè)定的匯編指令。為避免頻繁的bank切換以提高代碼效率,盡量把實現(xiàn)同一任務(wù)的變量定位在同一個bank內(nèi);對不同bank內(nèi)的變量進行讀寫操作時也盡量把位于相同bank內(nèi)的變量歸并在一起進行連續(xù)操作?! it型位變量只能是全局的或靜態(tài)的。picc將把定位在同一bank內(nèi)的8個位變量合并成一個字節(jié)存放于一個固定地址。picc對整個數(shù)據(jù)存儲空間實行位編址,0x000單元第0位位地址是0x0000,以此類推,每個字節(jié)有8個位地址。如果一個位變量flag1被編址為0x123,那么實際的存儲空間位于:  字節(jié)地址=0x123/8 = 0x24  位偏移=0x123%8 = 3  即flag1位變量位于地址為0x24字節(jié)的第3位。在程序調(diào)試時如果要觀察flag1的變化,必須觀察地址為0x24的字節(jié)而不是0x123。picc在編譯原代碼時只要有可能,對普通變量的操作也將以最簡單的位操作指令來實現(xiàn)。假設(shè)一個字節(jié)變量tmp最后被定位在地址0x20,那么  tmp | =0x80=>bsf 0x20.7  另外,函數(shù)可以返回一個位變量,返回的位變量將存放于單片機的進位位中返回。  3 picc中的指針  3.1 指向ram的指針  picc在編譯c源程序時,將指向ram的指針操作最終用fsr來實現(xiàn)間接尋址。fsr能夠直接連續(xù)尋址的范圍是256  b,所以一個指針可以同時覆蓋2個bank的存儲區(qū)域(bank0/1或bank2/3,一個bank區(qū)域是128 b)。要覆蓋最大512  b的內(nèi)部數(shù)據(jù)存儲空間,在定義指針時必須明確指定該指針適用的尋址區(qū)域。例如:  unsigned char *pointer0; //定義覆蓋bank0/1的指針  bank2 char *pointer1;//定義覆蓋bank2/3的指針  既然定義的指針有明確的bank適用區(qū)域,在對指針變量賦值時就必須實現(xiàn)類型匹配,否則將產(chǎn)生錯誤,例如:  unsigned char *pointer0; //定義指向bank0/1的指針  bank2 unsigned char buff[8];//定義bank2/3中的一個緩沖區(qū)  程序語句:  pointer() =buff;//錯誤!試圖將bank2內(nèi)的變量地址賦給指向bank0/1的指針  若出現(xiàn)此類錯誤的指針操作,picc在最后鏈接時會告知類似于下面的信息:  fixup overflow in expression (…)  3.2 指向rom常數(shù)的指針  如果一組變量是已經(jīng)被定義在rom區(qū)的常數(shù),那么指向其的指針可以這樣定義:  const unsigned char company[]="software"  3.3 指向函數(shù)的指針  因為在pic單片機這一特定的架構(gòu)上實現(xiàn)函數(shù)指針調(diào)用的效率不高,因此,除非特殊算法的需要,建議大家盡量不要使用函數(shù)指針。  4 picc中的子程序和函數(shù)  中檔系列的pic單片機程序空間有分頁的概念,但用c語言編程時基本不用過多關(guān)心代碼的分頁問題。因為所有函數(shù)或子程序調(diào)用時的頁面設(shè)定(如果代碼超過一個頁面)都由編譯器自動生成的指令實現(xiàn)。  4.1 函數(shù)的代碼長度限制  picc決定了c源程序中的一個函數(shù)經(jīng)編譯后生成的機器碼一定會放在同

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

8位單片機在嵌入式設(shè)計領(lǐng)域已經(jīng)成為半個多世紀以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復(fù)雜,8位單片機依然不斷發(fā)展,積極應(yīng)對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機系列,配備了先進的獨立...

關(guān)鍵字: 單片機 嵌入式 CPU

在嵌入式系統(tǒng)開發(fā)中,程序燒錄是連接軟件設(shè)計與硬件實現(xiàn)的關(guān)鍵環(huán)節(jié)。當(dāng)前主流的單片機燒錄技術(shù)已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應(yīng)用編程)三大技術(shù)體系,分別對應(yīng)開發(fā)調(diào)試、量產(chǎn)燒錄、遠程升級等不同場景。...

關(guān)鍵字: 單片機 ISP ICP IAP 嵌入式系統(tǒng)開發(fā)

在嵌入式系統(tǒng)開發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時機的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構(gòu)、軟件流程、安全規(guī)范三個維度,系統(tǒng)分析看門狗初始化的最佳實踐...

關(guān)鍵字: 單片機 看門狗 嵌入式系統(tǒng)

本文中,小編將對單片機予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內(nèi)容哦。

關(guān)鍵字: 單片機 開發(fā)板 Keil

在這篇文章中,小編將對PLC的相關(guān)內(nèi)容和情況加以介紹以幫助大家增進對它的了解程度,和小編一起來閱讀以下內(nèi)容吧。

關(guān)鍵字: PLC 模塊化 程序

隨著單片機系統(tǒng)越來越廣泛地應(yīng)用于消費類電子、醫(yī)療、工業(yè)自動化、智能化儀器儀表、航空航天等各領(lǐng)域,單片機系統(tǒng)面臨著電磁干擾(EMI)日益嚴重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問題。

關(guān)鍵字: 單片機 電磁兼容

以下內(nèi)容中,小編將對單片機的相關(guān)內(nèi)容進行著重介紹和闡述,希望本文能幫您增進對單片機的了解,和小編一起來看看吧。

關(guān)鍵字: 單片機 復(fù)位電路

在這篇文章中,小編將為大家?guī)韱纹瑱C的相關(guān)報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 單片機 異常復(fù)位

今天,小編將在這篇文章中為大家?guī)韱纹瑱C的有關(guān)報道,通過閱讀這篇文章,大家可以對它具備清晰的認識,主要內(nèi)容如下。

關(guān)鍵字: 單片機 仿真器

單片機將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關(guān)情況以及信息有所認識和了解,詳細內(nèi)容如下。

關(guān)鍵字: 單片機 中斷 boot
關(guān)閉