国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)

2010-07-02 08:42SiliconLabs公司EvanSchulz
關(guān)鍵詞:編譯器源代碼開(kāi)發(fā)人員

Silicon Labs公司 Evan Schulz

嵌入式設(shè)計(jì)者通常要面對(duì)更短的設(shè)計(jì)周期、不斷變化的需求和日益增長(zhǎng)的工作負(fù)擔(dān)所帶來(lái)的問(wèn)題。然而在嵌入式設(shè)計(jì)中,能夠降低設(shè)計(jì)風(fēng)險(xiǎn)、節(jié)省時(shí)間和減少精力的編譯器無(wú)關(guān)性編碼卻往往最易被忽略。對(duì)任何項(xiàng)目來(lái)說(shuō),為微控制器編寫編譯器無(wú)關(guān)性代碼可以獲得更大的靈活性。

工欲善其事,必先利其器

編譯器無(wú)關(guān),使得設(shè)計(jì)者能夠基于他們的項(xiàng)目需求選擇合適的編譯器。通過(guò)對(duì)比不同的編譯器,可以清楚地看出相同條件下不同工具鏈的性能差異。每個(gè)編譯器都具有與其他編譯器相區(qū)別的自身特性。有的編譯器優(yōu)化匯編功能,使生成的代碼非常小;有的更專注于執(zhí)行速度;也有的根本不進(jìn)行任何優(yōu)化。在微控制器選擇過(guò)程中,如果應(yīng)用程序代碼的大小是最終的決定因素,那么代碼大小的優(yōu)化程度將是一個(gè)重要的參考。如果不考慮代碼大小,那么許可證費(fèi)用或許是一個(gè)問(wèn)題。如今,8051編譯器的價(jià)格范圍從每個(gè)許可證數(shù)千美元到無(wú)需任何費(fèi)用不等。通過(guò)創(chuàng)建一個(gè)編譯器無(wú)關(guān)的項(xiàng)目,開(kāi)發(fā)人員將有更大的靈活性,可以輕松地從一種工具鏈轉(zhuǎn)移到另一種。

對(duì)于過(guò)度依賴特定工具鏈的開(kāi)發(fā)人員來(lái)說(shuō),如果選擇的特定編譯器突然變得不可再用,那將成為一個(gè)負(fù)擔(dān)。例如,如果開(kāi)發(fā)人員僅使用特定編譯器完成整個(gè)項(xiàng)目,那么一旦不能使用該工具鏈將對(duì)項(xiàng)目非常不利。然而在相同的示例中,如果開(kāi)發(fā)人員以編譯器無(wú)關(guān)的形式編寫代碼,在切換到一個(gè)新的工具鏈時(shí),僅需要對(duì)一個(gè)頭文件進(jìn)行少量的修改。該代碼可能需要一些小的修改以避免編譯器錯(cuò)誤或警告,但總體來(lái)說(shuō),切換編譯器的付出是微不足道的。

編譯器無(wú)關(guān)性編碼的實(shí)現(xiàn)

使項(xiàng)目編譯器無(wú)關(guān)非常簡(jiǎn)單,設(shè)計(jì)者只需添加一個(gè)頭文件,其中包括為編譯器相關(guān)的典型C語(yǔ)言進(jìn)行的宏定義。

在一個(gè)頭文件中說(shuō)明編譯器相關(guān)語(yǔ)法的不同之處,而不是針對(duì)特定編譯器編寫整個(gè)項(xiàng)目。這樣,如果編碼需要用于另一個(gè)工具鏈或選擇的編譯器無(wú)法使用時(shí),開(kāi)發(fā)人員的適應(yīng)能力會(huì)更強(qiáng)。這種編程方法所帶來(lái)的益處和便利,使得微控制器代碼的開(kāi)發(fā)過(guò)程更有效、更靈活。

立竿見(jiàn)影的益處是源代碼可讀性提高,調(diào)試時(shí)間顯著縮短。采用這種編碼方式后,定義的中斷、指針和變量能夠在一個(gè)位置修改,并傳播到整個(gè)項(xiàng)目。此外,包含在頭文件中的特定結(jié)構(gòu)體和全局變量,有助于編譯器對(duì)多字節(jié)數(shù)據(jù)存儲(chǔ)(大端模式/小端模式)的處理。如果編寫代碼時(shí)沒(méi)有考慮到存儲(chǔ)模式的差異,可能會(huì)導(dǎo)致錯(cuò)誤發(fā)生,而且這種錯(cuò)誤很難被檢查出來(lái),因此應(yīng)予以重視。

代碼重用

除了在編譯器之間切換的靈活和便利之外,編譯器無(wú)關(guān)的代碼比編譯器相關(guān)的代碼更具有可讀性。這種可讀性可以縮短調(diào)試時(shí)間,進(jìn)而降低項(xiàng)目的整體成本。在一個(gè)應(yīng)用中,不同工程師會(huì)在各自完成的項(xiàng)目中使用相同的源代碼,這要求源代碼能適用于多種工具鏈。這種情況下,開(kāi)發(fā)人員應(yīng)詳細(xì)說(shuō)明項(xiàng)目中測(cè)試通過(guò)的工具,以及如何將不同工具鏈集成到生成項(xiàng)目中。這種靈活性提高了工程師之間代碼重用的能力。

如何做到

在源代碼中使用宏定義而非編譯器相關(guān)的語(yǔ)法,是使項(xiàng)目實(shí)現(xiàn)編譯器無(wú)關(guān)的基礎(chǔ)。

為了支持不同的工具鏈,項(xiàng)目中僅需的額外文件是一個(gè)包含宏定義的頭文件。此文件包含一系列if條件語(yǔ)句,if語(yǔ)句中的參數(shù)是編譯器名稱。編譯器名稱一旦被選用,整個(gè)項(xiàng)目將使用該編譯器相關(guān)的宏定義。因此,若要修改源代碼中的多行代碼,僅需修改宏定義文件中的一行代碼。

試圖將一個(gè)新的工具鏈集成到一個(gè)項(xiàng)目時(shí),宏定義非常有用。例如,如果在宏定義文件中編寫了不正確的中斷定義,則開(kāi)發(fā)人員僅需更改一個(gè)特定的宏定義,而無(wú)需更改源代碼中的每一個(gè)中斷服務(wù)程序定義。為了把新的編譯器集成到項(xiàng)目中,開(kāi)發(fā)人員需要在宏定義文件中添加一個(gè)新段,該段中包括if語(yǔ)句及宏定義列表。在這里,開(kāi)發(fā)人員可以使用編譯器相關(guān)的語(yǔ)法編寫每個(gè)宏定義,該語(yǔ)法可以在編譯器相關(guān)文檔中找到。經(jīng)過(guò)對(duì)宏定義文件的少量修改,新的工具鏈將可以與項(xiàng)目兼容。

使用宏定義頭文件與使用微處理器相關(guān)的頭文件的目的是相同的,都是為特殊功能寄存器、地址和位定義而服務(wù)的。宏定義頭文件是一個(gè)被包含的頭文件,旨在使代碼的開(kāi)發(fā)更加容易。每個(gè)編譯器有自己特定的語(yǔ)法用于下列項(xiàng)目:

◆中斷

◆中斷原型

◆寄存器區(qū)

◆存儲(chǔ)段定義

◆存儲(chǔ)段中的定位變量

◆指向存儲(chǔ)段的指針

◆空操作(NOP)

◆特殊功能寄存器聲明

◆特殊功能寄存器位聲明

如果上述任何一項(xiàng)使用了編譯器相關(guān)的語(yǔ)法,都將使項(xiàng)目不再具有編譯器無(wú)關(guān)性。當(dāng)切換工具鏈時(shí),其他潛在的問(wèn)題包括:多字節(jié)存儲(chǔ)模式差異、通用指針、尋址和變量的默認(rèn)值。在大端模式中,編譯器保存多字節(jié)數(shù)據(jù)中的最高字節(jié)值到最低存儲(chǔ)地址;在小端模式中,編譯器保存多字節(jié)數(shù)據(jù)中的最低字節(jié)值到最低存儲(chǔ)地址。如果源代碼中有對(duì)多字節(jié)數(shù)的任何操作,要特別注意這一主要差異。

圖1 端模式

通用指針格式也可能有所不同。在3字節(jié)指針中,某些編譯器可能使用最低字節(jié)保存存儲(chǔ)目標(biāo)的段地址,其余2個(gè)字節(jié)保存段內(nèi)地址。而另一些編譯器可能使用最高字節(jié)存儲(chǔ)目標(biāo)的段地址,其余 2個(gè)字節(jié)用來(lái)保存段內(nèi)地址。初始化一個(gè)位于特定存儲(chǔ)區(qū)的變量,也可能導(dǎo)致潛在的問(wèn)題,因?yàn)椴⒎撬械木幾g器允許變量在定義時(shí)初始化。

編譯器無(wú)關(guān)的宏定義頭文件的例子和微控制器示例代碼可從Silicon Labs官方網(wǎng)站下載:

https://www.silabs.com/products/mcu/Pages/Software-Downloads.aspx

示例代碼和編譯器無(wú)關(guān)的宏定義頭文件都可以在Silicon Labs的集成開(kāi)發(fā)環(huán)境(IDE)中打開(kāi)。Compiler_defs.h包含以下8051工具鏈宏定義:SDCC,Raisonance,Keil,Tasking和IAR。存儲(chǔ)段、中斷、中斷原型、寄存器區(qū)、定位變量和存儲(chǔ)相關(guān)指針的宏定義都包含在此文件中。此頭文件可用于任何Silicon Labs微控制器,也可用于包含特殊功能寄存器(sfr)、中斷向量和可位尋址特殊功能寄存器(SFR)的設(shè)備相關(guān)的頭文件中。當(dāng)工具鏈集成到項(xiàng)目時(shí),compiler_defs.h中的宏定義可以作為一個(gè)起點(diǎn)。

小 結(jié)

微控制器采用編譯器無(wú)關(guān)性代碼會(huì)帶來(lái)許多益處和便利,任何開(kāi)發(fā)人員都應(yīng)考慮這一點(diǎn)。創(chuàng)建編譯器無(wú)關(guān)的項(xiàng)目帶給開(kāi)發(fā)人員極大的靈活性。與編譯器依賴相關(guān)的風(fēng)險(xiǎn)被降低,同時(shí)可以對(duì)編譯器的性能進(jìn)行測(cè)試和對(duì)比。改變頭文件中的一行代碼,即可應(yīng)用到整個(gè)項(xiàng)目,既節(jié)省了調(diào)試時(shí)間,又提高了效率。

猜你喜歡
編譯器源代碼開(kāi)發(fā)人員
基于TXL的源代碼插樁技術(shù)研究
基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
軟件源代碼非公知性司法鑒定方法探析
基于語(yǔ)法和語(yǔ)義結(jié)合的源代碼精確搜索方法
Microchip為MPLAB XC系列專業(yè)版編譯器推出低成本可續(xù)訂包月許可證
揭秘龍湖產(chǎn)品“源代碼”
后悔了?教你隱藏開(kāi)發(fā)人員選項(xiàng)
通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
三星SMI擴(kuò)展Java論壇 開(kāi)發(fā)人員可用母語(yǔ)