亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        編譯器無關(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語(yǔ)言進(jìn)行的宏定義。

        在一個(gè)頭文件中說明編譯器相關(guān)語(yǔ)法的不同之處,而不是針對(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)的語(yǔ)法,是使項(xiàng)目實(shí)現(xiàn)編譯器無關(guān)的基礎(chǔ)。

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

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

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

        ◆中斷

        ◆中斷原型

        ◆寄存器區(qū)

        ◆存儲(chǔ)段定義

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

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

        ◆空操作(NOP)

        ◆特殊功能寄存器聲明

        ◆特殊功能寄存器位聲明

        如果上述任何一項(xiàng)使用了編譯器相關(guān)的語(yǔ)法,都將使項(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)
        一本一道久久精品综合| 亚洲VA中文字幕无码毛片春药 | 老太脱裤子让老头玩xxxxx| 人体内射精一区二区三区| 亚洲色无码中文字幕| 国产精品自拍盗摄自拍| 日本爽快片100色毛片| aaaaa级少妇高潮大片免费看| 国产亚洲精品综合在线网址| 久久久亚洲av成人乱码| 亚洲sm另类一区二区三区| 亚洲精品无码人妻无码| 久久国产精品岛国搬运工| 中文字幕在线乱码亚洲| 亚洲av无码一区二区三区天堂古代| y111111少妇影院无码| 插入中文字幕在线一区二区三区| 蜜臀av毛片一区二区三区| 激性欧美激情在线| 中文字幕久无码免费久久| 日本高清在线一区二区三区| 在线精品亚洲一区二区动态图| 大香伊蕉国产av| 无码a级毛片免费视频内谢| 亚洲精品一区二区在线免费观看| 亚洲av成人精品日韩在线播放| 亚洲精品老司机在线观看| 久久九九av久精品日产一区免费 | 青青草好吊色在线视频| 国产中文三级全黄| 久久久无码一区二区三区| 亚洲粉嫩av一区二区黑人| 蜜桃av噜噜一区二区三区9| 国产97在线 | 中文| 国产一级淫片免费播放电影| 国产一区二区三区精品乱码不卡| 成人午夜福利视频后入| 91精品福利一区二区| av在线网站一区二区| 国产午夜av秒播在线观看| 天堂在线www中文|