Arm匯編代碼調(diào)試處理方法及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例提供一種ARM匯編代碼調(diào)試處理方法及裝置,該方法包括:根據(jù)轉(zhuǎn)換規(guī)則,將ARM匯編代碼轉(zhuǎn)換為ARM匯編仿真代碼ASC,所述ASC為使用C++語(yǔ)法形式表示的ARM匯編代碼;應(yīng)用C++集成開(kāi)放環(huán)境對(duì)所述ASC進(jìn)行調(diào)試。本發(fā)明實(shí)施例中,根據(jù)轉(zhuǎn)換規(guī)則將ARM匯編代碼轉(zhuǎn)換為ASC,然后就可以應(yīng)用C++IDE對(duì)該ASC進(jìn)行調(diào)試,而無(wú)需再依賴于專業(yè)的特定的仿真器,也可以實(shí)現(xiàn)快速支持ARM最新指令集,使得相關(guān)產(chǎn)品的開(kāi)發(fā)更加靈活、可擴(kuò)展。
【專利說(shuō)明】ARM匯編代碼調(diào)試處理方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信技術(shù),尤其涉及一種ARM匯編代碼調(diào)試處理方法及裝置。
【背景技術(shù)】
[0002] 高級(jí)精簡(jiǎn)指令集機(jī)器(Advanced RISC Machines,簡(jiǎn)稱ARM)體系結(jié)構(gòu)目前已經(jīng)大 面積運(yùn)用在移動(dòng)平臺(tái)中,例如手機(jī)、平板電腦等。由于對(duì)功耗的敏感性,開(kāi)發(fā)低功耗、高性能 的應(yīng)用成為提升用戶體驗(yàn)的關(guān)鍵途徑之一。
[0003] 對(duì)于性能敏感的代碼,一般采用匯編及其變體,如內(nèi)聯(lián)匯編、Intrinsic等方式進(jìn) 行編寫(xiě),其中Intrinsic為特定于某種編譯器的用于替代內(nèi)聯(lián)匯編的語(yǔ)法。內(nèi)聯(lián)匯編和 Intrinsic都需要特定編譯器支持,特別地,對(duì)于不同的Intrinsic還需要不同的編譯器支 持,因此使用Intrinsic會(huì)降低代碼的可移植性。而普通的匯編則只需要相應(yīng)的匯編器支 持即可,移植性能較好。但是,匯編代碼的編寫(xiě)相對(duì)于C++等代碼的編寫(xiě)更容易出錯(cuò),因而 匯編代碼的調(diào)試顯得尤為重要。隨著ARM指令集架構(gòu)不斷升級(jí),如果沒(méi)有仿真器進(jìn)行單步 調(diào)試,那么進(jìn)行函數(shù)、功能模塊集成將變得異常困難。
[0004] 現(xiàn)有技術(shù)中,對(duì)于ARM匯編指令的調(diào)試,是使用相應(yīng)的指令集仿真器,例如WinCE 所使用的Visual Studio,塞班(Symbian)系統(tǒng)所使用的Carbide、ARM官方的Real View套 件。
[0005] 但是,采用現(xiàn)有技術(shù)的方法,如果開(kāi)發(fā)、調(diào)試新的指令集代碼需要等待仿真環(huán)境的 更新,而這些環(huán)境的更新時(shí)間也無(wú)法保證,往往會(huì)影響產(chǎn)品的開(kāi)發(fā)進(jìn)度。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明提供一種ARM匯編代碼調(diào)試處理方法及裝置,用于解決ARM匯編代碼必須 使用特定仿真器進(jìn)行調(diào)試的問(wèn)題。
[0007] 本發(fā)明實(shí)施例第一方面提供一種ARM匯編代碼調(diào)試處理方法,包括:
[0008] 根據(jù)轉(zhuǎn)換規(guī)則,將ARM匯編代碼轉(zhuǎn)換為ARM匯編仿真代碼ASC,所述ASC為使用C++ 語(yǔ)法形式表示的ARM匯編代碼;
[0009] 應(yīng)用C++集成開(kāi)放環(huán)境對(duì)所述ASC進(jìn)行調(diào)試。
[0010] 結(jié)合第一方面,在第一方面的第一種可能的實(shí)施方式中,所述轉(zhuǎn)換規(guī)則包括以下 各轉(zhuǎn)換子規(guī)則之一或其組合:
[0011] ARM普通指令轉(zhuǎn)換子規(guī)則、ARM寄存器轉(zhuǎn)換子規(guī)則、ARM常量轉(zhuǎn)換子規(guī)則、ARM桶形 移位器轉(zhuǎn)換子規(guī)則、NEON標(biāo)量轉(zhuǎn)換子規(guī)則、ARM Neon指令轉(zhuǎn)換子規(guī)則。
[0012] 結(jié)合第一方面的第一種可能的實(shí)施方式,在第一方面的第二種可能的實(shí)施方式 中,所述ARM普通指令轉(zhuǎn)換子規(guī)則包括:將所述ARM普通指令轉(zhuǎn)換為C++語(yǔ)法形式中的函 數(shù)。
[0013] 結(jié)合第一方面的第一種可能的實(shí)施方式,在第一方面的第三種可能的實(shí)施方式 中,所述ARM寄存器轉(zhuǎn)換子規(guī)則包括:將所述ARM寄存器轉(zhuǎn)換為C++語(yǔ)法形式中的全局變 量。
[0014] 結(jié)合第一方面的第一種可能的實(shí)施方式,在第一方面的第四種可能的實(shí)施方式 中,所述ARM常量轉(zhuǎn)換子規(guī)則包括:將所述ARM常量轉(zhuǎn)換為C++語(yǔ)法形式中的常量。
[0015] 結(jié)合第一方面的第一種可能的實(shí)施方式,在第一方面的第五種可能的實(shí)施方式 中,所述NEON標(biāo)量轉(zhuǎn)換子規(guī)則包括:將所述NEON標(biāo)量轉(zhuǎn)換為C++語(yǔ)法形式中的數(shù)組和常 量,其中,所述常量為所述數(shù)組的索引。
[0016] 結(jié)合第一方面的第一種可能的實(shí)施方式,在第一方面的第六種可能的實(shí)施方式 中,所述ARM桶形移位器轉(zhuǎn)換子規(guī)則包括:將所述ARM桶形移位器轉(zhuǎn)換為C++語(yǔ)法形式中的 枚舉值。
[0017] 結(jié)合第一方面的第一種可能的實(shí)施方式,在第一方面的第七種可能的實(shí)施方式 中,所述ARM Neon指令轉(zhuǎn)換子規(guī)則包括:將所述ARM Neon指令轉(zhuǎn)換為C++語(yǔ)法形式中的對(duì) 象和成員函數(shù)。
[0018] 本發(fā)明實(shí)施例第二方面提供一種ARM匯編代碼調(diào)試處理裝置,包括:
[0019] 轉(zhuǎn)換模塊,用于根據(jù)轉(zhuǎn)換規(guī)則,將ARM匯編代碼轉(zhuǎn)換為ARM匯編仿真代碼ASC,所述 ASC為使用C++語(yǔ)法形式表不的ARM匯編代碼;
[0020] 調(diào)試模塊,用于應(yīng)用C++集成開(kāi)放環(huán)境對(duì)所述ASC進(jìn)行調(diào)試。
[0021] 結(jié)合第二方面,在第二方面的第一種可能的實(shí)施方式中,所述轉(zhuǎn)換規(guī)則包括以下 各轉(zhuǎn)換子規(guī)則之一或其組合:
[0022] ARM普通指令轉(zhuǎn)換子規(guī)則、ARM寄存器轉(zhuǎn)換子規(guī)則、ARM常量轉(zhuǎn)換子規(guī)則、ARM桶形 移位器轉(zhuǎn)換子規(guī)則、NEON標(biāo)量轉(zhuǎn)換子規(guī)則、ARM Neon指令轉(zhuǎn)換子規(guī)則。
[0023] 結(jié)合第二方面的第一種可能的實(shí)施方式,在第二方面的第二種可能的實(shí)施方式 中,所述ARM普通指令轉(zhuǎn)換子規(guī)則包括:將所述ARM普通指令轉(zhuǎn)換為C++語(yǔ)法形式中的函 數(shù)。
[0024] 結(jié)合第二方面的第一種可能的實(shí)施方式,在第二方面的第三種可能的實(shí)施方式 中,所述ARM寄存器轉(zhuǎn)換子規(guī)則包括:將所述ARM寄存器轉(zhuǎn)換為C++語(yǔ)法形式中的全局變 量。
[0025] 結(jié)合第二方面的第一種可能的實(shí)施方式,在第二方面的第四種可能的實(shí)施方式 中,所述ARM常量轉(zhuǎn)換子規(guī)則包括:將所述ARM常量轉(zhuǎn)換為C++語(yǔ)法形式中的常量。
[0026] 結(jié)合第二方面的第一種可能的實(shí)施方式,在第二方面的第五種可能的實(shí)施方式 中,所述ΝΕ0Ν標(biāo)量轉(zhuǎn)換子規(guī)則包括:將所述ΝΕ0Ν標(biāo)量轉(zhuǎn)換為C++語(yǔ)法形式中的數(shù)組和常 量,其中,所述常量為所述數(shù)組的索引。
[0027] 結(jié)合第二方面的第一種可能的實(shí)施方式,在第二方面的第六種可能的實(shí)施方式 中,所述ARM桶形移位器轉(zhuǎn)換子規(guī)則包括:將所述ARM桶形移位器轉(zhuǎn)換為C++語(yǔ)法形式中的 枚舉值。
[0028] 結(jié)合第二方面的第一種可能的實(shí)施方式,在第二方面的第七種可能的實(shí)施方式 中,所述ARM Neon指令轉(zhuǎn)換子規(guī)則包括:將所述ARM Neon指令轉(zhuǎn)換為C++語(yǔ)法形式中的對(duì) 象和成員函數(shù)。
[0029] 本發(fā)明實(shí)施例中,根據(jù)轉(zhuǎn)換規(guī)則將ARM匯編代碼轉(zhuǎn)換為ASC,然后就可以應(yīng)用 C++IDE對(duì)該ASC進(jìn)行調(diào)試,而無(wú)需再依賴于專業(yè)的特定的仿真器,也可以實(shí)現(xiàn)快速支持ARM 最新指令集,使得相關(guān)產(chǎn)品的開(kāi)發(fā)更加靈活、可擴(kuò)展。
【專利附圖】
【附圖說(shuō)明】
[0030] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā) 明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0031] 圖1為本發(fā)明提供的ARM匯編代碼調(diào)試處理方法實(shí)施例一的流程示意圖;
[0032] 圖2為本發(fā)明提供的ARM匯編代碼調(diào)試處理裝置實(shí)施例一的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0033] 為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0034] 圖1為本發(fā)明提供的ARM匯編代碼調(diào)試處理方法實(shí)施例一的流程示意圖,如圖1 所示,該流程包括:
[0035] S101、根據(jù)轉(zhuǎn)換規(guī)則,將ARM匯編代碼轉(zhuǎn)換為ARM匯編仿真代碼(ARM Simulated Code,簡(jiǎn)稱ASC),該ASC為使用C++語(yǔ)法形式表示的ARM匯編代碼。
[0036] 該轉(zhuǎn)換規(guī)則為將ARM匯編代碼轉(zhuǎn)換為按照C++語(yǔ)法形式表示的ARM匯編代碼的規(guī) 則。
[0037] S102、應(yīng)用 C++集成開(kāi)放環(huán)境(C++Integrated Development Environment,簡(jiǎn)稱 C++IDE)對(duì)上述ASC進(jìn)行調(diào)試。
[0038] 本實(shí)施例中,根據(jù)轉(zhuǎn)換規(guī)則將ARM匯編代碼轉(zhuǎn)換為ASC,然后就可以應(yīng)用C++IDE對(duì) 該ASC進(jìn)行調(diào)試,而無(wú)需再依賴于專業(yè)的仿真器,也可以實(shí)現(xiàn)快速支持ARM最新指令集,使 得相關(guān)產(chǎn)品的開(kāi)發(fā)更加靈活、可擴(kuò)展。
[0039] 進(jìn)一步地,上述轉(zhuǎn)換規(guī)則包括以下各轉(zhuǎn)換子規(guī)則之一或其組合:ARM普通指令轉(zhuǎn) 換子規(guī)則、ARM寄存器轉(zhuǎn)換子規(guī)則、ARM常量轉(zhuǎn)換子規(guī)則、ARM桶形移位器轉(zhuǎn)換子規(guī)則、NEON 標(biāo)量轉(zhuǎn)換子規(guī)則、ARM Neon指令轉(zhuǎn)換子規(guī)則。
[0040] 根據(jù)上述轉(zhuǎn)換子規(guī)則,在實(shí)現(xiàn)轉(zhuǎn)換時(shí),將ARM匯編代碼劃分為ARM普通指令、ARM寄 存器、ARM常量、ARM桶形移位器、ΝΕ0Ν標(biāo)量、ARM Neon指令,這樣根據(jù)上述轉(zhuǎn)換子規(guī)則分別 進(jìn)行轉(zhuǎn)換,以獲取轉(zhuǎn)換后的ASC,這樣可以利用C++代碼中的全局變量、函數(shù)、宏、枚舉值、重 載等特性,根據(jù)上述轉(zhuǎn)換規(guī)則獲得能夠在C++IDE中進(jìn)行調(diào)試的代碼。
[0041] 舉例說(shuō)明,ARM普通指令轉(zhuǎn)換子規(guī)則可以是將ARM普通指令轉(zhuǎn)換為C++語(yǔ)法形式 中的函數(shù),例如將"add"轉(zhuǎn)換為"add () ","add"為ARM普通指令,"add() "為C++語(yǔ)法形式 中的函數(shù)。
[0042] 類似地,ARM寄存器轉(zhuǎn)換子規(guī)則可以為將所述ARM寄存器轉(zhuǎn)換為C++語(yǔ)法形式中 的全局變量,例如,將"r0,rl, r2"轉(zhuǎn)換為"r0,rl,r2" ;將、8,dO, d4"轉(zhuǎn)換為"q8,dO, d4"。
[0043] ARM常量轉(zhuǎn)換子規(guī)則可以為將所述ARM常量轉(zhuǎn)換為C++語(yǔ)法形式中的常量,例如, 將"#2"轉(zhuǎn)換為"2"。
[0044] NEON標(biāo)量轉(zhuǎn)換子規(guī)則可以為將所述NEON標(biāo)量轉(zhuǎn)換為C++語(yǔ)法形式中的數(shù)組和常 量,例如將ARM匯編代碼中的NEON標(biāo)量"d30[0] "轉(zhuǎn)換為"d30,0",其中"0"表示該數(shù)組d30 的索引。
[0045] ARM桶形移位器轉(zhuǎn)換子規(guī)則可以為將所述ARM桶形移位器轉(zhuǎn)換為C++語(yǔ)法形式中 的枚舉值,例如將" lsl "轉(zhuǎn)換為" lsl "。
[0046] ARM Neon指令轉(zhuǎn)換子規(guī)則可以為將所述ARM Neon指令轉(zhuǎn)換為C++語(yǔ)法形式中的 對(duì)象和成員函數(shù)例如,將"vmull. ul6"轉(zhuǎn)換為"vmull. ul6"。
[0047] 當(dāng)然,具體實(shí)現(xiàn)過(guò)程中并不以上述例子為限。
[0048] 在獲取到上述ASC之后,為了使該ASC能后在C++IDE中運(yùn)行,進(jìn)一步地在ASC中添 加程序運(yùn)行時(shí)限,以獲得能夠在C++IDE中運(yùn)行的ASC運(yùn)行時(shí)(ASC Run Time,簡(jiǎn)稱ASC RT)。
[0049] 具體地,上述轉(zhuǎn)換規(guī)則可以用轉(zhuǎn)換規(guī)則表來(lái)表示,可參照表1。
[0050]表 1
[0051]
【權(quán)利要求】
1. 一種ARM匯編代碼調(diào)試處理方法,其特征在于,包括: 根據(jù)轉(zhuǎn)換規(guī)則,將ARM匯編代碼轉(zhuǎn)換為ARM匯編仿真代碼ASC,所述ASC為使用C++語(yǔ) 法形式表示的ARM匯編代碼; 應(yīng)用C++集成開(kāi)放環(huán)境對(duì)所述ASC進(jìn)行調(diào)試。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述轉(zhuǎn)換規(guī)則包括以下各轉(zhuǎn)換子規(guī)則之 一或其組合: ARM普通指令轉(zhuǎn)換子規(guī)則、ARM寄存器轉(zhuǎn)換子規(guī)則、ARM常量轉(zhuǎn)換子規(guī)則、ARM桶形移位 器轉(zhuǎn)換子規(guī)則、NEON標(biāo)量轉(zhuǎn)換子規(guī)則、ARM Neon指令轉(zhuǎn)換子規(guī)則。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述ARM普通指令轉(zhuǎn)換子規(guī)則包括:將所 述ARM普通指令轉(zhuǎn)換為C++語(yǔ)法形式中的函數(shù)。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述ARM寄存器轉(zhuǎn)換子規(guī)則包括:將所述 ARM寄存器轉(zhuǎn)換為C++語(yǔ)法形式中的全局變量。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述ARM常量轉(zhuǎn)換子規(guī)則包括:將所述 ARM常量轉(zhuǎn)換為C++語(yǔ)法形式中的常量。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述NEON標(biāo)量轉(zhuǎn)換子規(guī)則包括:將所述 NEON標(biāo)量轉(zhuǎn)換為C++語(yǔ)法形式中的數(shù)組和常量,其中,所述常量為所述數(shù)組的索引。
7.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述ARM桶形移位器轉(zhuǎn)換子規(guī)則包括:將 所述ARM桶形移位器轉(zhuǎn)換為C++語(yǔ)法形式中的枚舉值。
8.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述ARM Neon指令轉(zhuǎn)換子規(guī)則包括:將 所述ARM Neon指令轉(zhuǎn)換為C++語(yǔ)法形式中的對(duì)象和成員函數(shù)。
9. 一種ARM匯編代碼調(diào)試處理裝置,其特征在于,包括: 轉(zhuǎn)換模塊,用于根據(jù)轉(zhuǎn)換規(guī)則,將ARM匯編代碼轉(zhuǎn)換為ARM匯編仿真代碼ASC,所述ASC 為使用C++語(yǔ)法形式表示的ARM匯編代碼; 調(diào)試模塊,用于應(yīng)用C++集成開(kāi)放環(huán)境對(duì)所述ASC進(jìn)行調(diào)試。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述轉(zhuǎn)換規(guī)則包括以下各轉(zhuǎn)換子規(guī)則之 一或其組合: ARM普通指令轉(zhuǎn)換子規(guī)則、ARM寄存器轉(zhuǎn)換子規(guī)則、ARM常量轉(zhuǎn)換子規(guī)則、ARM桶形移位 器轉(zhuǎn)換子規(guī)則、NEON標(biāo)量轉(zhuǎn)換子規(guī)則、ARM Neon指令轉(zhuǎn)換子規(guī)則。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述ARM普通指令轉(zhuǎn)換子規(guī)則包括:將 所述ARM普通指令轉(zhuǎn)換為C++語(yǔ)法形式中的函數(shù)。
12.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述ARM寄存器轉(zhuǎn)換子規(guī)則包括:將所 述ARM寄存器轉(zhuǎn)換為C++語(yǔ)法形式中的全局變量。
13.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述ARM常量轉(zhuǎn)換子規(guī)則包括:將所述 ARM常量轉(zhuǎn)換為C++語(yǔ)法形式中的常量。
14.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述NEON標(biāo)量轉(zhuǎn)換子規(guī)則包括:將所 述NEON標(biāo)量轉(zhuǎn)換為C++語(yǔ)法形式中的數(shù)組和常量,其中,所述常量為所述數(shù)組的索引。
15.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述ARM桶形移位器轉(zhuǎn)換子規(guī)則包括: 將所述ARM桶形移位器轉(zhuǎn)換為C++語(yǔ)法形式中的枚舉值。
16.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述ARM Neon指令轉(zhuǎn)換子規(guī)則包括:
【文檔編號(hào)】G06F11/36GK104142886SQ201310173636
【公開(kāi)日】2014年11月12日 申請(qǐng)日期:2013年5月10日 優(yōu)先權(quán)日:2013年5月10日
【發(fā)明者】明亮, 何士雙 申請(qǐng)人:華為軟件技術(shù)有限公司