專利名稱:用于多核的c語言擴充及編譯系統(tǒng)支持方法
技術領域:
本發(fā)明涉及一種基于現(xiàn)有標準c語言的擴展方法及其編譯系統(tǒng)支持方法,以便使
現(xiàn)有c語言規(guī)范可應用于多核處理器的程序設計。并且描述了相應的對現(xiàn)有c語言編譯系
統(tǒng)的改進方法,使之能夠支持上述改進方法,并且完成多核程序的編譯工作。
背景技術:
目前處理器的發(fā)展方向已經(jīng)從單純提高處理器運行速度的方向向多核處理器的 方向發(fā)展,而在嵌入式系統(tǒng)領域,多核處理器處理器編譯系統(tǒng)發(fā)展剛剛起步,發(fā)展有限,絕 大部分知識產(chǎn)權也都掌握在國外公司手中。 所謂單核處理器一般定義為內(nèi)部僅包括一個處理單元的處理器,而所謂多核處理 器則包含了至少兩個甚至多個處理單元,能夠并行處理程序。 目前的C語言及其編譯系統(tǒng)或者編譯環(huán)境能夠支持單核程序的程序設計及單核 程序的編譯,但是由于C語言本身設計時并沒有多核處理器的概念,其設計本身缺少對多 核處理器的支持,也不太適用于并行程序在多核處理器中的程序設計和編譯。這主要是由 以下幾個方面的問題決定的。 首先,C語言程序定義的關鍵字中并沒有定義對處理器的關鍵字,因此,所有程序 在設計時,并不能區(qū)分是哪個處理器的程序;
其次,現(xiàn)有的編譯器系統(tǒng)只能將所有代碼編譯成一個完整的二進制程序后,由某一個 處理器執(zhí)行。 正因為這兩個問題,使得目前的嵌入式設計中依舊以單核程序設計為基礎。程序 的設計方法繼續(xù)保持單核程序設計。
發(fā)明內(nèi)容
在此處鍵入技術領域描述段落。 用于多核的C語言改進及編譯系統(tǒng)支持方法
技術領域:
本發(fā)明的目的在于提供一種C語言程序設計方法,它基于標準C語言,并進行了擴展, 使得C語言程序能夠支持多核程序設計的要求,并能對多核程序進行分別編譯形成每個處 理器核各自的獨立程序。在經(jīng)過擴展C語言及其編譯系統(tǒng)后,能夠方便地使得現(xiàn)有的單核 編譯體系擴展到多核編譯體系。 為達到上述目的,本發(fā)明的構思如下
針對上述兩個缺陷,我們認為,首先,由于現(xiàn)有的C語言并未對多核處理器中的每一個 處理器核進行區(qū)分,因此,也沒有定義相應的關鍵字,對處理器核進行區(qū)分。為此,本發(fā)明定 義了新的C語言關鍵字,以便編譯系統(tǒng)能夠識別每一段程序是哪個處理器核對應的程序。
其次,由于現(xiàn)有的編譯系統(tǒng)并不能支持這種多核編譯,所以,不能對第一條中的關 鍵字擴展進行編譯,也不能將識別出來的多核程序轉換成多核二進制程序文件。但是現(xiàn)有
5的C語言編譯系統(tǒng)卻能夠支持其他C語言的編譯。所以可以在現(xiàn)有的C語言編譯系統(tǒng)的基
礎上進行擴展,使其能夠在維持原有功能的基礎上擴展其對多核處理器的支持。 根據(jù)上述構思,本發(fā)明采用下述技術方案
一種擴展C語言的方法,其特征是添加新的關鍵字,用新的關鍵字區(qū)別不同的處理 器核,使得每一段程序都對應具體的處理器核。為了能夠保證與現(xiàn)有C語言的兼容性,我們 定義默認處理器為處理器0。
上述C語言擴充方法的具體步驟為
a. 在C語言體系下,保持現(xiàn)有C語言所有關鍵字;
b. 添加新的關鍵字,保證其與其他關鍵字不重合,并且能夠代表不同的處理器核,在 此,我們選用了MCU、PUB作為新的關鍵字,其代表設置不同的處理器核;
c. 參照現(xiàn)有C語言一般格式,設計該關鍵字在C語言中的使用方法。根據(jù)現(xiàn)有C語 言語法格式,我們設計了 MCU、 PUB關鍵字使用方法。d.為保證與現(xiàn)有C語言程序的兼容性,設置默認處理器編號為O,即當處理器為 單核處理器時,其默認處理器核編號即為0。對程序而言,當程序并未如上述c項在定義后 作關鍵字定義時,我們默認所有定義變量、函數(shù)、中斷定位在處理器0中。
e.在現(xiàn)有C語言編譯原理的基礎上,添加對這兩個關鍵字進行處理的前置編譯程序。
f 、添加現(xiàn)有的C語言編譯程序,在前置編譯程序之后,對分類后的程序進行C語
言編譯。
上述的保留C語言所有關鍵字的方法為
保留C語言所有關鍵字的方法是保留編譯系統(tǒng)對C語言關鍵字的支持,為此,我們采用 了保留原有C語言編譯系統(tǒng)的方法,而將本發(fā)明所涉及的第e項前置編譯程序作為前置獨 立程序放置在傳統(tǒng)編譯系統(tǒng)之前。 當程序中沒有'MCU'或者'PUB'關鍵字時,經(jīng)過前置編譯程序時,對其不作處
理。生成與原文件一致的文件然后送傳統(tǒng)C語言編譯程序進行處理,結果是可以保持對傳
統(tǒng)C語言的兼容性。 上述添加新關鍵字的方法為
在本發(fā)明所涉及的第e項前置編譯程序中,對新添加的關鍵字進行詞法、語法、語義預 處理,并按照這些關鍵字對程序所涉及的定義變量、定義函數(shù)等進行分類,形成中間文件, 并將這些文件作為傳統(tǒng)編譯系統(tǒng)的輸入文件,通過傳統(tǒng)編譯系統(tǒng)進行處理。
在本發(fā)明中,采用'MCU'標示不同的處理器核專屬變量、函數(shù)和中斷等,采用'PUB' 標示共享變量、函數(shù)和中斷。 上述關鍵字在C語言中的使用方法設計如下
1、MCU關鍵字可以置于所有定義語句后面,在其后面為相應的處理器編號
(a) 變量定義;置于該定義變量后面,標示該變量為某一處理器的專有變量。如 ^ te7iCZ/7;/7' 力f著類產(chǎn)力、7 '力f著名'iCZ/'力關獰字,
〃 ?'恭效穀游錄魏潘器,7 ^
(b) 函數(shù)定義置于該函數(shù)定義后面,標示該函數(shù)定位在某一處理器的程序存儲區(qū)中,并且在該處理器中執(zhí)行。如
^0/0^朋"/0/^#<^//,// 0/^力廚#"_^^^;^產(chǎn)^ '/朋c"o/ 7 ^iCZ/' 力關獰名'7 '表i遂廚箭存錄玄必潘器,2 ,虜薦^f〃存錄^7i/7^ #A必潘器,7 ^
(c)中斷定義置于該中斷定義后面,標示該中斷定位在某一處理器中,該中斷由該處 理器處理。如
Kw'o7/7terr一7iCZ/7,W raW力廚箭返廚澄類遮V/ terrwW
//力縱名歡窗'賴齢'7 '恭z,纖存縦必潘器,2顏薦//凝錄
^7i77W,遂W箭A必潘器,7 ^/y^箭必潘
2、PUB關鍵字針對存在公共存儲區(qū)的處理器可以置于所有定義語句后面,在其后
面為相應的公共存儲區(qū)編號;
(a) 變量定義;置于該定義變量后面,標示該變量為某一公共存儲區(qū)的專有變量。如 i/ te7尸朋7;/7' iW力f著類產(chǎn)力、7 '力f著名'iCZ/'力關獰字,
〃 ?'恭效穀游錄殺縣軀7^
(b) 函數(shù)定義置于該函數(shù)定義后面,標示該函數(shù)定位在公共程序存儲區(qū)中,并且可以 由處理器任一處理器核中執(zhí)行。如
raif/f朋c"o/77/^^〃/7 oiy力廚^"^^/^/;^^J^ '/i// c"o/ 7 力關獰名'7'表i遂廚箭存錄^^義存錄g7 W, f//議^在一必潘器,教#
(c) 中斷定義置于該中斷定義后面,標示該中斷定位在公共存儲區(qū)中,該中斷可以由 任一處理器處理。如
Kw'o7/ terr一7尸朋7,W raW力廚箭返廚澄類遮V/ terrwW 〃力廚箭名歡?朋'力關獰名'7 '表i遂廚箭存錄^^義存錄g 2 W,遂^箭^議 ^在一必潘器,教#
上述設置默認處理器的方法如下
在前置編譯程序中,定義默認處理器編號為o,當程序源文件中的變量定義、函數(shù)定義、
中斷定義沒有出現(xiàn)MCU、 PUB關鍵字時,在前置編譯程序中將該變量定義、函數(shù)定義、中斷定 義歸類為默認處理器編號為O,并整理到處理器編號為0的處理器核對應中間文本中。
若源程序中出現(xiàn)"MCU"或"PUB"關鍵字,則按照上述c項方法進行前置編譯。
上述對兩個關鍵字進行處理的前置編譯程序方法如下
前置編譯程序的主要功能是按照源程序的"MCU"關鍵字定義將源文件進行整理并添加 按照對應處理器核應用說明的程序存儲規(guī)則要求的存儲空間定位指令。前置編譯程序由我 們設計完成,其包括三部分
一是對"MCU"的處理,按照該關鍵字后的編號值將各個變量、源程序、中斷函數(shù)等分類 并整理為各個處理器核對應的中間文件。 二是對"PUB"的處理,將所有包含該關鍵字的變量、函數(shù)、中斷整理歸類為勇于存 儲于公共存儲區(qū)的文件。 三是對上述處理形成的文件添加定位信息。由于各個多核處理器對于其程序存儲 空間的分配規(guī)則是不同的,主要是以下幾種
1、共用程序存儲區(qū),但各個處理器核對應的程序位于不同的存儲空間地址,某些多核處理器還包含共用程序的存儲區(qū)。比如有些16位處理器將0x0000 0x7fff作為處理 器0對應的程序存儲區(qū),將0x8000 0xffff作為處理器1對應的程序存儲區(qū);有些則將 0x0000 0x3fff作為處理器0對應的程序存儲區(qū),將0x4ffff 0x7fff作為處理器1對應的 程序存儲區(qū),將0x8000 0xffff作為公共程序存儲區(qū)。此時程序編譯結果則需要按照統(tǒng)一 的二進制程序文件進行編譯,將不同處理器核的程序分配到不同的存儲空間地址,但生成 的二進制文件則是唯一的。 2 、每個處理器核采用各自獨立的存儲空間,即各個處理器核采用 一一對應的程序 存儲空間,此時程序編譯結果則需要按照每一個處理器核對應的程序存儲空間進行存儲, 生成對應于各個程序存儲空間的多個二進制文件。 所以,針對不同的處理器需要按照其應用規(guī)則添加不同的定位信息。 由于不同處理器的C語言定位指令不是完全一樣的,所以不同處理器的需要添加
的定位指令也不同。我們采用支持文件的方式實現(xiàn)對不同處理器的支持。支持文件在前置 編譯程序被調(diào)用,用于不同處理器的定位信息處理。 上述添加現(xiàn)有C語言編譯程序的方法如下
添加現(xiàn)有C語言編譯程序的方法是在前置處理程序的最后調(diào)用現(xiàn)有的C語言編譯 程序,即在前置編譯程序的最后,將前置編譯程序生成的中間文件作為現(xiàn)有C語言編譯程 序的輸入,并對生成的中間文件進行編譯,從而生成連續(xù)的二進制文件。若是需要生成多個 二進制文件,則需要多次調(diào)用現(xiàn)有的編譯程序,生成多個二進制文件。 本發(fā)明與現(xiàn)有技術相比較,具有如下顯而易見的突出實質性特點和顯著優(yōu)點本 發(fā)明基于現(xiàn)有的C語言體系,采用添加關鍵字的方法對C語言程序進行擴展,在擴展C語言 中兼容了所有的C語言的功能定義模塊,應用簡單,易于接受。能夠保證按照傳統(tǒng)C語言進 行編譯,并編譯成用于多核處理器的二進制程序文件。本發(fā)明同樣的基于現(xiàn)有C語言編譯 系統(tǒng),在添加了本發(fā)明的前置編譯程序的情況,能夠在多核處理器上進行編譯并生成可執(zhí) 行文件,便于擴展現(xiàn)有的編譯軟件,使之能夠實現(xiàn)針對多核的編譯。本發(fā)明可應用于基于多 核技術的嵌入式控制器,并且與控制器類型并沒有直接聯(lián)系,只需要在編譯系統(tǒng)中增加本 前置編譯程序即可實現(xiàn),可廣泛應用于所有多核處理器程序的編譯系統(tǒng)中。
圖1是前置編譯程序主流程圖。
圖2是圖1示例的詞法分析程序流程圖。
圖3是圖1示例的語法分析程序流程圖。
圖4是圖1示例的"MCU"中間代碼生成流程圖。
圖5是圖1示例的"PUB"中間代碼生成流程圖。
具體實施例方式
本發(fā)明的一個優(yōu)選實施例結合附圖詳述如下
針對Freescale的雙核處理器MC9S12XEP100,我們采用如下一段例程
例程1 :
8<formula>formula see original document page 9</formula>
上述例程1是一個可以采用單核處理的程序,其中,main()是主程序,而timerbreak () 是定時器終端處理程序。TME_INIT()是定時器的初始化程序。在該程序中,還定義了公共 變量TimlnterCount,被兩個程序使用,并連接兩個程序。針對該程序,我們采用下述的流程 來通過對C語言的擴展實現(xiàn)對該程序用于多核的程序設計和程序編譯
1)、如例程2中所示,保留了所有標準C語言的關鍵字及其使用方法,程序可以在單核 處理器中運行。 2)、添加了關鍵字MCU及PUB,使其明確不同的處理器核及其相應的存儲空間和運 行用處理器。添加后的程序如例程2所示。 例程1和例程2僅為說明本發(fā)明與ANSIC之間的繼承關系。在本專利的應用中, 直接采用例程2的MCU、 PUB關鍵字應用即可。
例程2 :皿,6W0^iCM , 〃/力/f主定好器棘疆
乂 乂
乂
3)、如上面例程2所示,"MCU 法。其中,"MCU"明確了程序、變』
中斷所針對的公共存儲區(qū)。
4)、上述程序由前置編譯程序進行處理,并生成對應多核處理器的中間文件。
5)、生成的中間文件被原有的C語言編譯程序調(diào)用,并進行編譯,生成相應二進制 文件。 上述保留C語言關鍵字的方法如上例程2所示,程序中除了"MCU"和"PUB"關
鍵字,其他C語言程序都在遵循ANSIC的規(guī)則。當由前置編譯程序生成中間文件時,這兩個 關鍵字被處理掉,并被刪除,從而生成可以被原有C語言編譯程序接受的中間文件。其具體 處理流程在針對第3)項,前置編譯程序中描述。 上述添加關鍵字MCU及PUB的方法如例程2中所示,針對變量、中斷和函數(shù)的使用 方式類似于ANSIC中的規(guī)則。采用在定義后加入MCU和PUB關鍵字即可。如
〃關總術
〃術汰勵一,術I汰力一移、
〃幕餘定好器溢脈吉, 〃先總術
"及"PUB"關鍵字在程序中的用法類似于傳統(tǒng)C語言的用 匱和中斷所針對的處理器核,"PUB "則明確了程序、變量和
10皿,
上述語句定義了一個存儲并運行在處理器核0中的函數(shù),該函數(shù)主要用于主函數(shù)對定 時器模塊的初始化操作。
,V#ai/7 。
上述語句定義了一個主函數(shù),采用默認定義的方式,沒有采用"MCU"或者"PUB"關鍵字?!猣errw/ f/6Koi(3^iffi9r/ rea^ fFc i<^iCZ//
上述語句定義了一個運行在處理器核1中的中斷處理程序,采用了"MCU"關鍵字定義, 后面標明的"1"表示處理器核編號。
/AT7^/n'fflT/ terCo朋W〃^ ;
上述語句定義了一個16位整數(shù)型變量,由于該變量被兩個處理器核共同使用,我們可 以將他定義在公共存儲區(qū)中,即用PUB關鍵字定義,由于MC9S12XEP100芯片的RAM中并沒 有進行公共存儲區(qū)分區(qū),所以,應存儲在存儲區(qū)0。
上述由前置編譯程序對程序進行處理的方法如下
前置編譯程序是針對本發(fā)明所涉及的"MCU"和"PUB"關鍵字設計的,其基于現(xiàn)有的C語 言編譯程序,目的是為了將"MCU"和"PUB"關鍵字進行前置處理,并按照處理結果將這兩個 關鍵字從原文件中去除,從而形成新的可以被傳統(tǒng)C語言編譯程序進行處理的程序文本。
前置編譯程序主流程圖如附圖1所示,上述例程2在文本編譯完成后,由前置
編譯程序讀入,并進行如下處理
a、進行"MCU"和"PUB"關鍵字詞法分析,即對組成源程序的字符串進行掃描和識別,識 別出一個個具獨立意義的單詞(或稱符號)、標示符等,并將識別出的單詞用統(tǒng)一長度的標 準形式來表示。如在上例中識別出"MCU"和"PUB"關鍵字等。 b、在詞法分析輸出的單詞流基礎上,根據(jù)源語言的語法規(guī)則分析這種單詞流是否 正確地組成各類語法單位,即進行語法分析。如短語、子句、程序段和程序等。如"MCU1"和 "voidmain () {},,.
c、對于不包含"MCU"和"PUB"關鍵字的程序直接結束前置編譯程序,并認為是傳統(tǒng)C 語言編寫的程序,而調(diào)用原有的C語言編譯程序進行編譯。 d、針對經(jīng)過語法分析的單詞流,若其在語法結構上是正確的,就可以在這個基礎 上進行實質性翻譯工作,將單詞流按照"MCU"、 "PUB"進行語義分析。 e、按照"MCU"關鍵字定義的意義,針對上述單詞流,按照每一個處理器核所屬的函
數(shù)、變量、中斷進行分類,并按照處理器核所規(guī)定的程序存儲區(qū)添加定位指令。 f、按照"PUB"關鍵字定義的意義,針對上述單詞流,按照公共存儲區(qū)的定義,對公
共存儲變量、中斷、函數(shù)進行分類,并按照處理器所規(guī)定的公共存儲區(qū)定義添加相應定位指令。 上述關鍵字詞法分析的方法,如附圖2所示。 首先逐字符讀取源文件中的字符,以空格、引號、分號等標點為比較關鍵字,將空 格分隔的每一個單詞作為一個字段存儲到字段緩沖區(qū)直至源程序結尾,并將字段緩沖區(qū)中 的所有內(nèi)容保存為字段文件。然后,逐個讀取字段文件中的單詞,與C語言關鍵字列表中的 關鍵字逐一比較,將關鍵字作相應標注,即標注關鍵字類型及編號,并將這些信息保存到字段文件中。 上述語法分析的方法,如附圖3所示。 讀取字段文件,根據(jù)傳統(tǒng)C語言語法分析方法分析字段文件中的段落——即將文件按照定義語句、函數(shù)語句、中斷語句等進行相應分類。然后針對其中的預定義語句按照傳統(tǒng)C語言預定義語句的定義進行處理。 分析其中包含的"MCU"及"PUB"關鍵字,對不包含這些關鍵字的按照對應處理器核及公共存儲區(qū)編號為"O"處理,針對包含這些關鍵字的,按其后的編號標注該段落程序為相應處理器核或者公共存儲區(qū)。 上述對于不包含"MCU"和"PUB"關鍵字的程序直接結束前置編譯程序的方法如下
若上述語法分析中未發(fā)現(xiàn)"MCU"和"PUB"關鍵字,則結束前置編譯程序。直接調(diào)用傳統(tǒng)C語言編譯程序。 上述按照"MCU"關鍵字進行分類的方法如附圖4所示。 按照上述語法分析中的段落分析,逐段落讀取源程序,并根據(jù)語法分析中的處理器核的標注將源程序分別轉存到不同的處理器核文件中,最后在文件起始位置按照處理器配置文件添加定位語句,將相應文件定位在處理器程序存儲空間的相應位置。
上述按照"PUB"關鍵字進行分類的方法如附圖5所示。 按照上述語法分析中的段落分析,逐段落讀取源程序,并根據(jù)語法分析中的公共存儲區(qū)的標注將源程序分別轉存到不同的公共存儲區(qū)文件中,最后在文件起始位置按照處理器配置文件添加定位語句,將相應文件定位在處理器公共存儲空間的相應位置。
權利要求
一種擴展C語言的方法,其特征是添加新的關鍵字,用新的關鍵字區(qū)別不同的處理器核,使得每一段程序都對應具體的處理器核。為了能夠保證與現(xiàn)有C語言的兼容性,我們定義默認處理器為處理器0。上述C語言擴充方法的具體步驟為a. 在C語言體系下,保持現(xiàn)有C語言所有關鍵字;b. 添加新的關鍵字,保證其與其他關鍵字不重合,并且能夠代表不同的處理器核,在此,我們選用了MCU、PUB作為新的關鍵字,其代表設置不同的處理器核;c. 參照現(xiàn)有C語言一般格式,設計該關鍵字在C語言中的使用方法。根據(jù)現(xiàn)有C語言語法格式,我們設計了MCU、PUB關鍵字使用方法。
d.為保證與現(xiàn)有C語言程序的兼容性,設置默認處理器編號為0,即當處理器為單核處理器時,其默認處理器核編號即為0。對程序而言,當程序并未如上述c項在定義后作關鍵字定義時,我們默認所有定義變量、函數(shù)、中斷定位在處理器0中。
e.在現(xiàn)有C語言編譯原理的基礎上,添加對這兩個關鍵字進行處理的前置編譯程序。
f、添加現(xiàn)有的C語言編譯程序,在前置編譯程序之后,對分類后的程序進行C語言編譯。
2. 根據(jù)權利要求1所述的保留C語言所有關鍵字的方法為保留C語言所有關鍵字的方法是保留編譯系統(tǒng)對C語言關鍵字的支持,為此,我們采用 了保留原有C語言編譯系統(tǒng)的方法,而將本發(fā)明所涉及的第e項前置編譯程序作為前置獨 立程序放置在傳統(tǒng)編譯系統(tǒng)之前。當程序中沒有'MCU'或者'PUB'關鍵字時,經(jīng)過前置編譯程序時,對其不作處理。生 成與原文件一致的文件然后送傳統(tǒng)C語言編譯程序進行處理,結果是可以保持對傳統(tǒng)C語 言的兼容性。
3. 根據(jù)權利要求1所述的添加新關鍵字的方法為在本發(fā)明所涉及的第e項前置編譯程序中,對新添加的關鍵字進行詞法、語法、語義預 處理,并按照這些關鍵字對程序所涉及的定義變量、定義函數(shù)等進行分類,形成中間文件, 并將這些文件作為傳統(tǒng)編譯系統(tǒng)的輸入文件,通過傳統(tǒng)編譯系統(tǒng)進行處理。在本發(fā)明中,采用'MCU'標示不同的處理器核專屬變量、函數(shù)和中斷等,采用'PUB'標 示共享變量、函數(shù)和中斷。
4. 根據(jù)權利要求1所述的關鍵字在C語言中的使用方法設計如下 1)、MCU關鍵字可以置于所有定義語句后面,在其后面為相應的處理器編號(a) 變量定義;置于該定義變量后面,標示該變量為某一處理器的專有變量。如 ^ te7iCZ/7;/7' 力f著類產(chǎn)力、7 '力f著名'iCZ/'力關獰字,〃 ?'恭效穀游錄魏潘器,7^(b) 函數(shù)定義置于該函數(shù)定義后面,標示該函數(shù)定位在某一處理器的程序存儲區(qū)中, 并且在該處理器中執(zhí)行。如^0/0^朋"/0/^#<^//,// 0/^力廚#"_^^^;^產(chǎn)^ '/朋c"o/ 7 ^iCZ/' 力關獰名'7 '表i遂廚箭存錄玄必潘器,2 ,虜薦^f〃存錄^7i/7^ #A必潘器,7 ^(c) 中斷定義置于該中斷定義后面,標示該中斷定位在某一處理器中,該中斷由該處理器處理。如Kw'o7/7terr一7iCZ/7,W raW力廚箭返廚澄類遮V/ terrwW//力縱名歡窗'賴齢'7 '恭z,纖存縦必潘器,2顏薦//凝錄^7i77W,遂W箭A必潘器,7 ^/y^箭必潘2)、 PUB關鍵字針對存在公共存儲區(qū)的處理器可以置于所有定義語句后面,在其后面為相應的公共存儲區(qū)編號;(a) 變量定義;置于該定義變量后面,標示該變量為某一公共存儲區(qū)的專有變量。如 i/ te7尸朋7;/7' iW力f著類產(chǎn)力、7 '力f著名'iCZ/'力關獰字,〃 ?'恭效穀游錄殺縣軀7^(b) 函數(shù)定義置于該函數(shù)定義后面,標示該函數(shù)定位在公共程序存儲區(qū)中,并且可以 由處理器任一處理器核中執(zhí)行。如raif/f朋c"o/77/^^〃/7 oiy力廚^"^^/^/;^^J^ '/i// c"o/ 7 力關獰名'7'表i遂廚箭存錄^^義存錄g7 W, f//議^在一必潘器,教#(c) 中斷定義置于該中斷定義后面,標示該中斷定位在公共存儲區(qū)中,該中斷可以由 任一處理器處理。如Kw'o7/ terr一7尸朋7,W raW力廚箭返廚澄類遮V/ terrwW 〃力廚箭名歡?朋'力關獰名'7 '表i遂廚箭存錄^^義存錄g 2 W,遂^箭^議 敝一雄器,術。
5. 根據(jù)權利要求1所述的設置默認處理器的方法如下在前置編譯程序中,定義默認處理器編號為o,當程序源文件中的變量定義、函數(shù)定義、中斷定義沒有出現(xiàn)MCU、 PUB關鍵字時,在前置編譯程序中將該變量定義、函數(shù)定義、中斷定 義歸類為默認處理器編號為O,并整理到處理器編號為0的處理器核對應中間文本中。 若源程序中出現(xiàn)"MCU"或"PUB"關鍵字,則按照上述c項方法進行前置編譯。
6. 根據(jù)權利要求1所述的對兩個關鍵字進行處理的前置編譯程序方法如下 前置編譯程序的主要功能是按照源程序的"MCU"關鍵字定義將源文件進行整理并添加按照對應處理器核應用說明的程序存儲規(guī)則要求的存儲空間定位指令。前置編譯程序由我 們設計完成,其包括三部分一是對"MCU"的處理,按照該關鍵字后的編號值將各個變量、源程序、中斷函數(shù)等分類 并整理為各個處理器核對應的中間文件。二是對"PUB"的處理,將所有包含該關鍵字的變量、函數(shù)、中斷整理歸類為勇于存儲于 公共存儲區(qū)的文件。三是對上述處理形成的文件添加定位信息。由于各個多核處理器對于其程序存儲空間 的分配規(guī)則是不同的,主要是以下幾種1)、共用程序存儲區(qū),但各個處理器核對應的程序位于不同的存儲空間地址,某些多 核處理器還包含共用程序的存儲區(qū)。比如有些16位處理器將0x0000 0x7fff作為處理 器0對應的程序存儲區(qū),將0x8000 0xffff作為處理器1對應的程序存儲區(qū);有些則將 0x0000 0x3fff作為處理器0對應的程序存儲區(qū),將0x4ffff 0x7fff作為處理器1對應的 程序存儲區(qū),將0x8000 0xffff作為公共程序存儲區(qū)。此時程序編譯結果則需要按照統(tǒng)一 的二進制程序文件進行編譯,將不同處理器核的程序分配到不同的存儲空間地址,但生成 的二進制文件則是唯一的。2)、每個處理器核采用各自獨立的存儲空間,即各個處理器核采用一一對應的程序存 儲空間,此時程序編譯結果則需要按照每一個處理器核對應的程序存儲空間進行存儲,生 成對應于各個程序存儲空間的多個二進制文件。所以,針對不同的處理器需要按照其應用規(guī)則添加不同的定位信息。由于不同處理器的C語言定位指令不是完全一樣的,所以不同處理器的需要添加的定 位指令也不同。我們采用支持文件的方式實現(xiàn)對不同處理器的支持。支持文件在前置編譯 程序被調(diào)用,用于不同處理器的定位信息處理。
7.根據(jù)權利要求1所述的添加現(xiàn)有C語言編譯程序的方法如下添加現(xiàn)有C語言編譯程序的方法是在前置處理程序的最后調(diào)用現(xiàn)有的C語言編譯 程序,即在前置編譯程序的最后,將前置編譯程序生成的中間文件作為現(xiàn)有C語言編譯程 序的輸入,并對生成的中間文件進行編譯,從而生成連續(xù)的二進制文件。若是需要生成多個 二進制文件,則需要多次調(diào)用現(xiàn)有的編譯程序,生成多個二進制文件。
全文摘要
本發(fā)明涉及一種基于現(xiàn)有標準C語言的擴充方法,以便使現(xiàn)有C語言規(guī)范可應用于多核處理器的程序設計。并且描述了相應的對現(xiàn)有C語言編譯系統(tǒng)的改進方法,使之能夠支持上述改進方法,并且完成多核程序的編譯工作。通過添加關鍵字“MCU”和“PUB”,將源程序按照不同的處理器核和公共存儲區(qū)進行標注,并在本發(fā)明涉及的C語言前置編譯程序的處理下,將其處理為按照不同處理器核和公共存儲區(qū)對應的源程序文件,再調(diào)用傳統(tǒng)C語言編譯系統(tǒng)進行編譯并最終得到一個或多個二進制程序文件,進行系統(tǒng)運行。本發(fā)明基于現(xiàn)有的C語言體系,采用添加關鍵字的方法對C語言程序進行擴展,在擴展C語言中兼容了所有的C語言的功能定義模塊,應用簡單,易于接受。能夠保證按照傳統(tǒng)C語言進行編譯,并編譯成用于多核處理器的二進制程序文件。在添加了本發(fā)明的前置編譯程序的情況,能夠在多核處理器上進行編譯并生成可執(zhí)行文件,便于擴展現(xiàn)有的編譯軟件,使之能夠實現(xiàn)針對多核的編譯。本發(fā)明可應用于基于多核技術的嵌入式控制器,并且與控制器類型并沒有直接聯(lián)系,只需要在編譯系統(tǒng)中增加本前置編譯程序即可實現(xiàn),可廣泛應用于所有多核處理器程序的編譯系統(tǒng)中。
文檔編號G06F9/45GK101794230SQ20101014082
公開日2010年8月4日 申請日期2010年4月7日 優(yōu)先權日2010年4月7日
發(fā)明者孫斌 申請人:孫斌