999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2010-07-02 08:42:52SiliconLabs公司EvanSchulz
關(guān)鍵詞:定義

Silicon Labs公司 Evan Schulz

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

工欲善其事,必先利其器

編譯器無關(guān),使得設(shè)計(jì)者能夠基于他們的項(xiàng)目需求選擇合適的編譯器。通過對比不同的編譯器,可以清楚地看出相同條件下不同工具鏈的性能差異。每個(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)移到另一種。

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

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

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

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

立竿見影的益處是源代碼可讀性提高,調(diào)試時(shí)間顯著縮短。采用這種編碼方式后,定義的中斷、指針和變量能夠在一個(gè)位置修改,并傳播到整個(gè)項(xiàng)目。此外,包含在頭文件中的特定結(jié)構(gòu)體和全局變量,有助于編譯器對多字節(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)目中測試通過的工具,以及如何將不同工具鏈集成到生成項(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)過對宏定義文件的少量修改,新的工具鏈將可以與項(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ǔ)地址。如果源代碼中有對多字節(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í)可以對編譯器的性能進(jìn)行測試和對比。改變頭文件中的一行代碼,即可應(yīng)用到整個(gè)項(xiàng)目,既節(jié)省了調(diào)試時(shí)間,又提高了效率。

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統(tǒng)計(jì)概率解答題
例談橢圓的定義及其應(yīng)用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠(yuǎn)不要用“起點(diǎn)”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴(yán)昊:不定義終點(diǎn) 一直在路上
定義“風(fēng)格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學(xué)的重大定義
主站蜘蛛池模板: 国产精品女熟高潮视频| 午夜精品久久久久久久2023| 亚洲精品国产精品乱码不卞| 国产精品一区二区无码免费看片| 久久毛片基地| 亚洲国产91人成在线| 精品99在线观看| 操国产美女| 免费不卡在线观看av| A级毛片无码久久精品免费| 亚洲无码高清一区| 思思热精品在线8| 亚洲日韩高清无码| 女人一级毛片| 中文字幕乱码二三区免费| 婷婷六月综合| 欧美a级完整在线观看| 国产精品欧美在线观看| 亚洲a级毛片| 亚洲国产精品一区二区第一页免| 亚洲视频无码| 国产福利免费在线观看 | 亚洲天堂网2014| 国产一区成人| 99久久精彩视频| 一本一道波多野结衣av黑人在线| 亚洲免费三区| 国禁国产you女视频网站| 成人国产精品网站在线看| 综合色区亚洲熟妇在线| 国产免费久久精品99re不卡| 天堂亚洲网| 91福利一区二区三区| 欧美成人手机在线视频| 情侣午夜国产在线一区无码| 毛片基地视频| 黄色网页在线播放| 国产精品主播| 亚洲精品自拍区在线观看| 久久永久免费人妻精品| 亚洲资源站av无码网址| 国产麻豆aⅴ精品无码| 国产浮力第一页永久地址| 欧美成人综合在线| a亚洲视频| 中日韩欧亚无码视频| 色偷偷综合网| 国产菊爆视频在线观看| 欧美成人第一页| 国产午夜福利在线小视频| 午夜在线不卡| 伊人久久久久久久| 五月婷婷激情四射| 亚洲高清无码精品| 亚洲第一页在线观看| 69国产精品视频免费| 国产91丝袜在线播放动漫| 亚洲无限乱码一二三四区| 国产精品永久久久久| 无码一区二区波多野结衣播放搜索| 第九色区aⅴ天堂久久香| 亚洲精品福利视频| 蜜芽国产尤物av尤物在线看| 国产原创演绎剧情有字幕的| 成人午夜视频在线| 1024国产在线| 日韩毛片基地| 国产91高跟丝袜| 狠狠色丁香婷婷综合| 夜色爽爽影院18禁妓女影院| 国产资源免费观看| 亚洲精品视频在线观看视频| 伊人色天堂| 国产成人精彩在线视频50| 久久久亚洲色| a级毛片视频免费观看| 日本一区高清| 亚洲成人在线网| 亚洲狠狠婷婷综合久久久久| 日本高清免费不卡视频| 最新精品久久精品| 99久久精品免费看国产免费软件 |