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é)的重大定義
主站蜘蛛池模板: 蝴蝶伊人久久中文娱乐网| 免费观看精品视频999| 国产香蕉国产精品偷在线观看| 亚洲天堂精品视频| 久久精品日日躁夜夜躁欧美| 亚洲第一页在线观看| 亚洲精品无码成人片在线观看 | 青青草原国产一区二区| 亚洲欧美成人网| 精品一区二区久久久久网站| 亚洲视频欧美不卡| 97se亚洲综合在线天天| 欧美性精品不卡在线观看| 专干老肥熟女视频网站| 中文字幕乱码二三区免费| 国产成人综合在线视频| 国产成人精品日本亚洲| 国产理论一区| 日日拍夜夜操| 香蕉久久国产精品免| 波多野结衣亚洲一区| 99中文字幕亚洲一区二区| 色哟哟国产精品一区二区| 久久77777| 热思思久久免费视频| 伊人色在线视频| 国产精品自在线天天看片| 久青草免费在线视频| 国产a v无码专区亚洲av| 九九久久精品免费观看| 欧美日韩在线第一页| 亚洲一区二区三区国产精华液| 91精品啪在线观看国产91九色| 黄色a一级视频| 无码网站免费观看| 亚洲人成电影在线播放| 91青青视频| 亚洲精品动漫| 午夜毛片免费观看视频 | 婷婷综合色| 亚洲天堂免费在线视频| 亚洲不卡av中文在线| 国产chinese男男gay视频网| 国产精品美乳| 国产福利小视频在线播放观看| 日本一本在线视频| 91精品国产自产在线观看| 91亚洲国产视频| 久久久精品国产亚洲AV日韩| 九九热精品免费视频| 日韩高清在线观看不卡一区二区| 99福利视频导航| 亚洲日韩久久综合中文字幕| 97亚洲色综久久精品| 欧美国产视频| 999精品免费视频| 伊人天堂网| 91色在线视频| 国产主播喷水| 四虎永久免费地址| 亚洲欧洲日产国码无码av喷潮| 国产黑丝一区| 午夜精品久久久久久久99热下载 | 国产69精品久久| а∨天堂一区中文字幕| 婷婷伊人五月| 67194成是人免费无码| 欧美区一区| 久久久久九九精品影院 | 一本二本三本不卡无码| 中文字幕色站| 热久久综合这里只有精品电影| 丁香婷婷激情综合激情| 99热这里只有成人精品国产| 亚洲国产精品不卡在线| 玩两个丰满老熟女久久网| 中文字幕亚洲另类天堂| 亚洲一区国色天香| 欧美成人免费午夜全| 美女潮喷出白浆在线观看视频| 国产精品大尺度尺度视频| 欧美影院久久|