• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      Silicon Labs公司 Evan Schulz

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

      工欲善其事,必先利其器

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

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

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

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

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

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

      代碼重用

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

      如何做到

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

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

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

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

      ◆中斷

      ◆中斷原型

      ◆寄存器區(qū)

      ◆存儲(chǔ)段定義

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

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

      ◆空操作(NOP)

      ◆特殊功能寄存器聲明

      ◆特殊功能寄存器位聲明

      如果上述任何一項(xiàng)使用了編譯器相關(guān)的語法,都將使項(xiàng)目不再具有編譯器無關(guān)性。當(dāng)切換工具鏈時(shí),其他潛在的問題包括:多字節(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é)用來保存段內(nèi)地址。初始化一個(gè)位于特定存儲(chǔ)區(qū)的變量,也可能導(dǎo)致潛在的問題,因?yàn)椴⒎撬械木幾g器允許變量在定義時(shí)初始化。

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

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

      示例代碼和編譯器無關(guān)的宏定義頭文件都可以在Silicon Labs的集成開發(fā)環(huán)境(IDE)中打開。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é)

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

      猜你喜歡
      編譯器源代碼開發(fā)人員
      人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
      基于TXL的源代碼插樁技術(shù)研究
      基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
      Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
      軟件源代碼非公知性司法鑒定方法探析
      Microchip為MPLAB XC系列專業(yè)版編譯器推出低成本可續(xù)訂包月許可證
      揭秘龍湖產(chǎn)品“源代碼”
      讓W(xué)indows 10進(jìn)入開發(fā)者模式
      電腦迷(2015年12期)2015-04-29 23:22:51
      后悔了?教你隱藏開發(fā)人員選項(xiàng)
      電腦愛好者(2015年6期)2015-04-03 01:20:56
      通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
      济南市| 吴川市| 涟水县| 巴里| 岐山县| 天峻县| 繁峙县| 文水县| 安丘市| 万源市| 临沧市| 美姑县| 抚州市| 鹰潭市| 樟树市| 康乐县| 手机| 措勤县| 聂荣县| 亚东县| 山阳县| 隆子县| 陇川县| 蓬溪县| 原阳县| 邵阳县| 丰顺县| 珠海市| 怀集县| 都安| 临武县| 建宁县| 霸州市| 申扎县| 嘉祥县| 额尔古纳市| 蒙自县| 普陀区| 巴南区| 清苑县| 安达市|