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

        ?

        嵌入式C程序設(shè)計(jì)的優(yōu)化與應(yīng)用

        2014-04-29 00:00:00李世科
        數(shù)字化用戶 2014年9期

        【摘 要】用C來(lái)編程不是任何問(wèn)題都能較方便地妥善處理。如處理BCD碼、循環(huán)移位控制位信息連續(xù)變化、對(duì)時(shí)間要求很?chē)?yán)格等問(wèn)題的處理上,用匯編語(yǔ)言編程,就比用C語(yǔ)言編程更直接有效,但是又不愿意僅僅因?yàn)檫@么一小部分,就把整個(gè)程序都改用匯編來(lái)做,這時(shí)就必須學(xué)會(huì)把匯編語(yǔ)言編寫(xiě)的源程序與C語(yǔ)言編寫(xiě)的源程序結(jié)合起來(lái)。本文將主要探討嵌入式C程序設(shè)計(jì)的優(yōu)化與應(yīng)用。

        【關(guān)鍵詞】嵌入式 C程序 設(shè)計(jì) 優(yōu)化

        由于C語(yǔ)言是一種簡(jiǎn)單的語(yǔ)言.它的功能大多來(lái)自于一些標(biāo)準(zhǔn)函數(shù)和宏,這些函數(shù)和宏在任何編譯器所附帶的庫(kù)中都是可用的。C庫(kù)中包含有一系列預(yù)先編譯好的函數(shù),以目標(biāo)文件的形式存在,可以連接到具體應(yīng)用中。在ANSI標(biāo)準(zhǔn)中對(duì)標(biāo)準(zhǔn)庫(kù)(Standard Library)的內(nèi)容進(jìn)行了定義[1]。其中包括用于輸入/輸出的函數(shù)、大量數(shù)學(xué)運(yùn)算函數(shù)(如所有三角函數(shù))以及其他數(shù)據(jù)處理函數(shù)。

        一、編譯C程序

        在完成C源代碼之后,將對(duì)其進(jìn)行編譯。最終產(chǎn)生的文件中包含有與源碼等價(jià)的機(jī)器碼,可以由目標(biāo)機(jī)直接執(zhí)行。它們已經(jīng)得到了廣泛的應(yīng)用,幾乎每個(gè)C源文件都不是孤立的。一旦有“額外”的文件加入,最終的可執(zhí)行程序?qū)⒂啥鄠€(gè)相關(guān)文件來(lái)構(gòu)建,方式通常非常復(fù)雜。同樣地,編譯C程序的過(guò)程將產(chǎn)生多個(gè)輸出文件。源程序編寫(xiě)完成之后,使用C編譯器進(jìn)行編譯生成目標(biāo)文件。這種文件由可重定位代碼構(gòu)成,并不完全映射到處理器存儲(chǔ)器映射中。其他文件也得到進(jìn)一步處理(包括匯編語(yǔ)言源文件),以類(lèi)似方式進(jìn)行編譯或匯編,最終生成以可重定位代碼為主要內(nèi)容的目標(biāo)文件。

        在這個(gè)階段,除最簡(jiǎn)單的程序之外,多數(shù)情況下需要與其他文件進(jìn)行組合,這些文件都已成為目標(biāo)文件。這些目標(biāo)文件可能來(lái)自于編譯器相關(guān)庫(kù),或者由程序員或公司事先生成。連接器負(fù)責(zé)將不同的文件組合在一起并構(gòu)建一個(gè)單獨(dú)的可執(zhí)行文件。這個(gè)過(guò)程由連接器腳本(Linker Script)指導(dǎo)完成,連接器腳本用于定義處理器存儲(chǔ)器映射并提供其他信息,并有可能生成預(yù)編譯文件

        二、在C程序中直接嵌入?yún)R編語(yǔ)句

        在C程序中嵌入?yún)R編語(yǔ)句是一種直接的C模塊和匯編模塊接口方法。采用這種方法一方面可以在C程序中實(shí)現(xiàn)用C語(yǔ)言難以實(shí)現(xiàn)的一些硬件控制功能,如修改中斷控制寄存器、中斷使能、讀取狀態(tài)寄存器和中斷標(biāo)志寄存器等。另一方面,也可以用這種方法在C程序中的關(guān)鍵部分用匯編語(yǔ)句代替C語(yǔ)句以?xún)?yōu)化程序。

        采用這種方法的一個(gè)缺點(diǎn)是它比較容易破壞C環(huán)境,因?yàn)镃編譯器在編譯嵌入了匯編語(yǔ)句的C程序時(shí)并不檢查或分析所嵌入的匯編語(yǔ)句。嵌入?yún)R編語(yǔ)句的方法比較簡(jiǎn)單,只需在匯編語(yǔ)句的左、右加上雙引號(hào),用小括弧將匯編語(yǔ)句括住,在括弧前加上asm標(biāo)識(shí)符即可,如下所示:

        asm(“匯編語(yǔ)句”)

        在C程序中直接嵌入?yún)R編語(yǔ)句的一種典型應(yīng)用是控制DSP芯片的一些硬件資源。

        三、嵌入式C程序設(shè)計(jì)的優(yōu)化及應(yīng)用

        為了使單獨(dú)編譯的C語(yǔ)言程序和匯編程序之間能夠互相調(diào)用,必須讓子程序間的調(diào)用遵遁一定的規(guī)則。A丁PCS即ARM,Thumb過(guò)程調(diào)用標(biāo)準(zhǔn)(ARM/Thumb procedure call standard),是ARM程序和Thumb程序小子程序調(diào)用的基本規(guī)則,它規(guī)定了一些子程序間調(diào)用的基本規(guī)則,如子程序調(diào)用過(guò)程中寄存器的使用規(guī)則、堆棧的使用規(guī)則、參數(shù)的傳遞規(guī)則等。

        (一)基本ATPCS

        基本ATPCS規(guī)定了在子程序調(diào)用寸的一些基本規(guī)則,包括下面3方面的內(nèi)容:

        1.各寄存器的使用規(guī)則及其相應(yīng)的名稱(chēng)。

        2.數(shù)據(jù)棧的使用規(guī)則。

        3.參數(shù)傳遞的規(guī)則。

        相對(duì)于其他類(lèi)型的ATPCS,滿足基本ATPCS的程序的執(zhí)行速度更快,所占用的內(nèi)存更少,但是它不能提供以下的支持:ARM程序和Thumb程序互相調(diào)用、數(shù)據(jù)以及代碼的位置無(wú)關(guān)的支持、子程序的可重入性和數(shù)據(jù)棧檢查的支持。

        而派生的其他幾種特定的ATPCS就是在基本ATPCS的基礎(chǔ)上再添加其他的規(guī)則而形成的,其目的就是提供上述的功能。

        (二)寄存器的使用規(guī)則

        寄存器的使用必須滿足下面的規(guī)則。

        1.子程序間通過(guò)寄存器R0-R3宋傳遞參數(shù)。這時(shí),寄存器R0-R3可以記作A0-A3,被調(diào)用的子程序在返回前無(wú)需恢復(fù)寄存器R0-R3的內(nèi)容。

        2.在子程序中,使用寄存器R4-R11來(lái)保存局部變量。這時(shí),寄存器R4-R11可以記作V1-V8。如果在子程序中使用到了寄存器V1-V8中的某些寄存器,子程序進(jìn)入時(shí)必須保存這些寄存器的值,在返回前必須恢復(fù)這些寄存器的值,對(duì)于子程序中沒(méi)有用到的寄存器則不必進(jìn)行這些操作。在Thumb程序中,通常只能使用寄存器R4-R7來(lái)保存局部變量。

        3.寄存器R12用于子程序間scratch寄存器,記作IP。在子程序間的連接代碼段中常有這種使用規(guī)則。

        4.寄存器R13用于數(shù)據(jù)棧指針,記作SP。在子程序中寄存器R13不能做其他用途。寄存器SP在進(jìn)入子程序時(shí)的值和退出子程序時(shí)的值必須相等。

        5.寄存器R14稱(chēng)為連接寄存器,記作LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14則可以做其他用途。

        6.寄存器R15是程序計(jì)數(shù)器,記作PC,它不能做其他用途。

        (三)參數(shù)傳遞規(guī)則

        根據(jù)參數(shù)個(gè)數(shù)是否固定可以將子程序分為參數(shù)個(gè)數(shù)固定的(nonvariadic)子程序和參數(shù)個(gè)數(shù)可變的(variadic)子程序,這兩種子程序的參數(shù)傳遞規(guī)則是不同的。

        1.參數(shù)個(gè)數(shù)可變的子程序參數(shù)傳遞規(guī)則

        對(duì)于參數(shù)個(gè)數(shù)可變的子程序,當(dāng)參數(shù)不超過(guò)4個(gè)時(shí),可以使用寄存器R0-R3來(lái)傳遞參數(shù),當(dāng)參數(shù)超過(guò)4個(gè)時(shí),還可以使用數(shù)據(jù)棧來(lái)傳遞參數(shù)。

        在參數(shù)傳遞時(shí),將所有參數(shù)看作是存放在連續(xù)的內(nèi)存字單元中的字?jǐn)?shù)據(jù)。然后,依次將各字?jǐn)?shù)據(jù)傳送到寄存器R0、R1、R2、R3中,如果參數(shù)多于4個(gè),將剩余的字?jǐn)?shù)據(jù)傳送到數(shù)據(jù)棧中,入棧的順序與參數(shù)順序相反,即最后一個(gè)字?jǐn)?shù)據(jù)先入棧。按照上面的規(guī)則,一個(gè)浮點(diǎn)數(shù)參數(shù)可以通過(guò)寄存器傳遞,也可以通過(guò)數(shù)據(jù)棧傳遞,也可能一半通過(guò)寄存器傳遞,另一半通過(guò)數(shù)據(jù)棧傳遞。

        2.參數(shù)個(gè)數(shù)固定的子程序參數(shù)傳遞規(guī)則

        對(duì)于參數(shù)個(gè)數(shù)固定的子程序,參數(shù)傳遞與參數(shù)個(gè)數(shù)可變的子程序參數(shù)傳遞規(guī)則不同。對(duì)有調(diào)用關(guān)系的所有子程序必須遵守同一種ATPCS。編譯器或者匯編器在ELF格式的目標(biāo)文件中設(shè)置相應(yīng)的屬性,標(biāo)識(shí)用戶選定的ATPCS類(lèi)型。對(duì)應(yīng)于不同類(lèi)型的ATPCS規(guī)則,有相應(yīng)的C語(yǔ)言庫(kù),連接器根據(jù)用戶指定的ATPCS類(lèi)型連接相應(yīng)的C語(yǔ)言庫(kù)。使用ADS的C語(yǔ)言編譯器編譯的C語(yǔ)言子程序滿足用戶指定的ATPCS類(lèi)型,而對(duì)于匯編語(yǔ)言程序來(lái)說(shuō),完全要依賴(lài)用戶來(lái)保證各子程序滿足選定的ATPCS類(lèi)型。

        四、結(jié)論

        盡管C語(yǔ)言是一種比較強(qiáng)大的開(kāi)發(fā)工具,必須對(duì)C語(yǔ)言編程有較透徹的掌握,其次,還應(yīng)該對(duì)實(shí)際電子硬件系統(tǒng)有深入的理解,當(dāng)然在學(xué)習(xí)嵌入之前,較為熟練地掌握用匯編語(yǔ)言編程是十分必要的。

        參考文獻(xiàn):

        [1]李文光. 基于MPC8548E的通用嵌入式計(jì)算機(jī)平臺(tái)系統(tǒng)軟件研究和實(shí)現(xiàn)[J]. 電子測(cè)試,2014,02:3-4+46.

        [2]王艷芳. 單片機(jī)嵌入式程序的開(kāi)發(fā)原理及應(yīng)用探討[J]. 電子技術(shù)與軟件工程,2013,23:271.

        [3]陳侃松,劉洪波,熊攀. 基于ARM9的嵌入式Web服務(wù)器數(shù)據(jù)動(dòng)態(tài)顯示的實(shí)現(xiàn)[J]. 物聯(lián)網(wǎng)技術(shù),2014,03:18-19+23.

        [4]張鋒輝,王祥青,蘇守寶. 嵌入式C/S架構(gòu)服務(wù)器在電加熱爐遠(yuǎn)程溫度監(jiān)控中的應(yīng)用[J]. 井岡山大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,02:56-59.

        [5]曹敬瑜,柴瑋巖,王博,郭永紅. 嵌入式分布計(jì)算環(huán)境下的高效軟件構(gòu)件化框架研究[J]. 兵工學(xué)報(bào),2013,04:451-458.

        亚洲av美国av产亚洲av图片| 最新国产成人自拍视频| 久久精品国产亚洲av天美| 无码喷潮a片无码高潮| 青青草97国产精品免费观看| 亚洲国产精品一区二区www| 久久99精品久久久久久hb无码| 国内精品久久久久久久亚洲| 亚洲日本中文字幕乱码| 中文字字幕在线中文乱码解| 国产熟女内射oooo| 国内精品视频一区二区三区 | 视频网站在线观看不卡| 国产不卡视频在线观看| 美女网站免费福利视频| 成人区人妻精品一区二区不卡网站 | 97精品国产91久久久久久久| 漂亮人妻被强中文字幕乱码| www国产亚洲精品| 国产成人综合色在线观看网站| 国产女奸网站在线观看| 蜜桃传媒免费观看视频| 天天夜碰日日摸日日澡性色av| 国产在线无码一区二区三区| 亚洲AV无码乱码一区二区三区| 亚洲自拍偷拍一区二区三区 | 亚洲黄色在线看| 国产人妖av在线观看| 久久亚洲色一区二区三区| 黄色成人网站免费无码av| 亚洲乱精品中文字字幕| 97精品人妻一区二区三区在线| 国产亚洲精品第一综合另类| 日日av拍夜夜添久久免费| 美女熟妇67194免费入口| 免费国产一区二区视频| 国产综合无码一区二区辣椒| 二区在线视频| 日韩女优在线一区二区| 人妻精品久久久久中文字幕69| 国产剧情国产精品一区|