亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于cpu模擬器的嵌入式c語言目標(biāo)碼級單元測試方法

文檔序號:6622537閱讀:309來源:國知局
一種基于cpu模擬器的嵌入式c語言目標(biāo)碼級單元測試方法
【專利摘要】本發(fā)明公開了一種基于CPU模擬器的嵌入式C語言目標(biāo)碼級單元測試方法。本發(fā)明采用CPU模擬器技術(shù),解決了不同嵌入式處理器的目標(biāo)碼在通用PC機上的執(zhí)行問題,使得可以在通用PC機上進行嵌入式C語言目標(biāo)碼級的單元測試,本發(fā)明利用CPU模擬器,配合測試驅(qū)動程序的編寫約定,實現(xiàn)了被測函數(shù)目標(biāo)碼覆蓋率的自動記錄和輸出,能夠統(tǒng)計測試用例執(zhí)行的目標(biāo)碼語句和分支覆蓋率。本與現(xiàn)有技術(shù)相比,本發(fā)明保證被測試的C語言目標(biāo)碼與真實處理器上執(zhí)行的目標(biāo)碼一致,確保了測試結(jié)果的有效性,同時與現(xiàn)有的C語言單元測試工具結(jié)合可以構(gòu)建自動化的嵌入式C語言目標(biāo)碼級單元測試解決方案。
【專利說明】-種基于CPU模擬器的嵌入式C語言目標(biāo)碼級單元測試方 法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種嵌入式C語言單元測試方法,尤其涉及一種基于CPU模擬器的嵌 入式C語言目標(biāo)碼級單元測試方法,屬于計算機軟件檢測【技術(shù)領(lǐng)域】。

【背景技術(shù)】
[0002] 單元測試目的是完成對軟件的最小設(shè)計單元進行驗證,充分的單元測試對發(fā)現(xiàn)軟 件中的缺陷,以及定位和排除這些缺陷都相對比較容易,所花的成本最小,這是因為單元測 試中只包含較少的軟件代碼,所以軟件缺陷比較容易隔離出來,因此對于排除軟件缺陷,單 元測試是最有效的一類測試。經(jīng)驗表明,單元測試具有不可替代的重要性,這個階段發(fā)現(xiàn)的 問題有相當(dāng)大的一部分是在其后的測試階段中很難發(fā)現(xiàn)的。
[0003] 對于安全性和可靠性要求較高的嵌入式系統(tǒng),單元測試是軟件開發(fā)過程中的重要 環(huán)節(jié),日益受到軟件設(shè)計師的重視。C語言目前仍是嵌入式軟件開發(fā)的主流編程語言。C語 言等高級語言編寫的程序不能直接在目標(biāo)系統(tǒng)上運行,其必須經(jīng)過編譯器的編譯生成特定 處理器的目標(biāo)碼才可以執(zhí)行。而由于編譯器的解釋、優(yōu)化等因素,使得編譯器產(chǎn)生的目標(biāo)碼 的控制流結(jié)構(gòu)多少會與源代碼不一致,二者之間控制流結(jié)構(gòu)的不同在測試過程中會產(chǎn)生較 大的差異。因此,僅對高級語言源代碼驗證并不能保證目標(biāo)碼執(zhí)行的正確性。
[0004] 目前,很多安全性和可靠性要求高的軟件,都要求進行目標(biāo)碼級的驗證。目標(biāo)碼驗 證確保真正在處理器上執(zhí)行的代碼是正確的,并建議在單元測試階段就開始進行目標(biāo)碼驗 證,在開發(fā)階段的早期識別出目標(biāo)碼和源代碼結(jié)構(gòu)覆蓋的差異/不足,通過設(shè)計針對性的 測試用例來對目標(biāo)碼進行驗證。
[0005] 針對嵌入式C語言的單元測試方案一般是手工或者利用C語言單元測試工具,如 CANTATA、TestBed TBRun、Rational TestRealTime等輔助編寫測試C語言函數(shù)用的測試驅(qū) 動程序,然后利用PC機上的x86C語言編譯器將測試驅(qū)動程序編譯成可執(zhí)行程序,執(zhí)行該程 序后,查看結(jié)果和統(tǒng)計C語言級的覆蓋率。利用這種方法,被測試的程序?qū)嶋H是編譯后的 x86處理器上的程序,如果目標(biāo)機的處理器與x86處理器不同,則測試的程序并不是真實的 目標(biāo)程序。目前,嵌入式系統(tǒng)的中使用的處理器多為了50695、8051、03乂汴 〇冊沖(:等不同于 x86的處理器。因此,利用上述方法由于實際測試的目標(biāo)碼不同于真實的目標(biāo)碼,測試結(jié)果 只對C語言源代碼級的程序有效,而不能保證對真實的目標(biāo)碼有效。


【發(fā)明內(nèi)容】

[0006] 本發(fā)明解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的不足,提供一種基于CPU模擬器的嵌 入式C語言目標(biāo)碼級單元測試方法,該方法利用CPU模擬器解決被測的真實目標(biāo)碼在宿主 機(通用PC機)上的運行以及目標(biāo)碼覆蓋率統(tǒng)計問題。
[0007] 本發(fā)明的技術(shù)解決方案是:一種基于CPU模擬器的嵌入式C語言目標(biāo)碼級單元測 試方法,步驟如下:
[0008] (1)利用C語言單元測試工具生成被測程序的測試驅(qū)動程序;
[0009] (2)調(diào)用與目標(biāo)處理器對應(yīng)的嵌入式C語言編譯器,將測試驅(qū)動程序編譯成目標(biāo) 處理器運行的帶調(diào)試信息的目標(biāo)碼;
[0010] (3)調(diào)用與目標(biāo)處理器對應(yīng)的CPU模擬器軟件運行帶調(diào)試信息的目標(biāo)碼,生成輸 出端口輸出文件、反匯編程序和覆蓋率文件;
[0011] (4)利用結(jié)果及覆蓋率分析工具對CPU模擬器軟件生成的輸出端口輸出文件、反 匯編程序和覆蓋率文件進行分析,獲得測試結(jié)果和測試覆蓋信息。
[0012] 步驟(1)中測試驅(qū)動程序的基本結(jié)構(gòu)包括將被測函數(shù)名稱賦值給一個全局變量 tested_proc_name的句柄、測試用例輸入句柄Input_handle、調(diào)用被測函數(shù)test_proc句 柄、測試結(jié)果輸出句柄〇utput_handle和調(diào)用退出點函數(shù)EXIT_P0INT句柄。
[0013] 所述步驟(3)中的CPU模擬器軟件為一個命令行程序,包括3個參數(shù):
[0014] 參數(shù)1 :為輸出信息的地址,為16進制,記為0UT_P0RT ;
[0015] 參數(shù)2 :為目標(biāo)碼的全路徑名,記為Target_File ;
[0016] 參數(shù)3 :為輸出結(jié)果保存的路徑,記為0ut_Path ;
[0017] CPU模擬器軟件的工作過程為:
[0018] (l)CPU模擬器軟件解析帶調(diào)試信息的目標(biāo)碼,從帶調(diào)試信息的目標(biāo)碼的路徑 Target_File中,獲得EXIT_P0INT函數(shù)的地址并記錄在Stop_Addr變量中;獲得tested_ proc_name變量的地址并記錄在ProcPointer變量中;
[0019] (2)CPU模擬器軟件逐條執(zhí)行Target_File中的目標(biāo)碼指令;
[0020] (3)在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視輸出信息的地址0UT_P0RT,當(dāng)該 地址有輸出時,在輸出緩沖中記下輸出值,當(dāng)輸出值為〇時,將輸出緩沖中記錄的值輸出到 文件中,并清除輸出緩沖;
[0021] (4)在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視ProcPointer存儲的tested_ proc_name變量的地址,當(dāng)tested_proc_name變量被寫入時,獲得寫入的值,寫入的值為 包含被測函數(shù)名稱的字符串地址,根據(jù)字符串地址獲得被測函數(shù)名稱的字符串,根據(jù)被測 函數(shù)名稱從調(diào)試信息中獲得被測函數(shù)的開始地址和結(jié)束地址,并記錄在開始地址Func_ Start_Addr和結(jié)束地址Func_End_Addr中,CPU模擬器軟件記錄開始地址Func_Start_Addr 和結(jié)束地址Func_End_Addr之間的語句和分支覆蓋信息;
[0022] (5)在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視當(dāng)前運行的PC指針,當(dāng)PC指 針不等于Stop_Addr時,返回執(zhí)行步驟(2),當(dāng)PC指針等于Stop_Addr時,CPU模擬器軟件 停止運行,輸出被測試函數(shù)的反匯編語句到文件中、輸出被測試函數(shù)的覆蓋率信息到文件 中、輸出0UT_P0RT端口到文件中,三個文件保存在0ut_Path目錄中。
[0023] 本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于:本發(fā)明充分利用現(xiàn)有的常用C語言單元測試 工具的功能,構(gòu)建自動化的嵌入式C語言目標(biāo)碼級單元測試解決方案。例如,步驟(1)可利 用商用C語言單元測試工具都提供的測試驅(qū)動程序的輔助生成功能。步驟(2)可利用現(xiàn)有 的商用C語言單元測試工具都提供的調(diào)用編譯器編譯源代碼的功能;步驟(3)可利用現(xiàn)有 的商用C語言單元測試工具都提供的調(diào)用程序執(zhí)行的功能。針對不同的目標(biāo)處理器只需要 開發(fā)對應(yīng)的CPU模擬器軟件。利用商用C語言單元測試工具和CPU模擬器軟件就可以形成 自動化的嵌入式C語言目標(biāo)碼級單元測試解決方案。
[0024] 本發(fā)明采用CPU模擬器技術(shù),解決了不同嵌入式處理器的目標(biāo)碼在通用PC機上的 執(zhí)行問題,使得可以在通用PC機上進行嵌入式C語言目標(biāo)碼級的單元測試,本發(fā)明利用CPU 模擬器,配合測試驅(qū)動程序的編寫約定,實現(xiàn)了被測函數(shù)目標(biāo)碼覆蓋率的自動記錄和輸出, 能夠統(tǒng)計測試用例執(zhí)行的目標(biāo)碼語句和分支覆蓋率。
[0025] 本發(fā)明利用CPU模擬器運行被測試的真實目標(biāo)碼,并利用CPU模擬器輸出運行時 的目標(biāo)碼覆蓋率信息,可以在宿主機(通用PC機)上進行C語言目標(biāo)碼級的單元測試。與 現(xiàn)有技術(shù)相比,本發(fā)明保證被測試的C語言目標(biāo)碼與真實處理器上執(zhí)行的目標(biāo)碼一致,確 保了測試結(jié)果的有效性,同時與現(xiàn)有的C語言單元測試工具結(jié)合可以構(gòu)建自動化的嵌入式 C語言目標(biāo)碼級單元測試解決方案。

【專利附圖】

【附圖說明】
[0026] 圖1是本發(fā)明的流程示意圖;
[0027] 圖2是CPU模擬器軟件執(zhí)行的流程示意圖;
[0028] 圖3是輸出端口 0UT_P0RT地址監(jiān)視的流程示意圖;
[0029] 圖4是函數(shù)地址ProcPointer地址監(jiān)視的流程示意圖。

【具體實施方式】
[0030] 如圖1所述,本發(fā)明的實現(xiàn)方法為:
[0031] (1)利用C語言單元測試工具生成被測程序的測試驅(qū)動程序;
[0032] (2)調(diào)用與目標(biāo)處理器對應(yīng)的嵌入式C語言編譯器,將測試驅(qū)動程序編譯成目標(biāo) 處理器運行的帶調(diào)試信息的目標(biāo)碼;
[0033] (3)調(diào)用與目標(biāo)處理器對應(yīng)的CPU模擬器軟件運行帶調(diào)試信息的目標(biāo)碼,生成輸 出端口輸出文件、反匯編程序和覆蓋率文件;
[0034] (4)利用結(jié)果及覆蓋率分析工具對CPU模擬器軟件生成的輸出端口輸出文件、反 匯編程序和覆蓋率文件進行分析,獲得測試結(jié)果和測試覆蓋信息。
[0035] 步驟(1)中測試驅(qū)動程序的基本結(jié)構(gòu)包括將被測函數(shù)名稱賦值給一個全局變量 tested_proc_name、測試用例輸入Input_handle、調(diào)用被測函數(shù)test_proc、測試結(jié)果輸出 Output_handle和調(diào)用退出點函數(shù)EXIT_P0INT。
[0036] 步驟(3)中的CPU模擬器軟件為一個命令行程序,包括3個參數(shù):
[0037] 參數(shù)1 :為輸出信息的地址,為16進制,記為0UT_P0RT ;
[0038] 參數(shù)2 :為目標(biāo)碼的全路徑名,記為Target_File ;
[0039] 參數(shù)3 :為輸出結(jié)果保存的路徑,記為0ut_Path ;
[0040] CPU模擬器軟件的工作過程為:
[0041] (a)CPU模擬器軟件解析帶調(diào)試信息的目標(biāo)碼,從帶調(diào)試信息的目標(biāo)碼的路徑 Target_File中,獲得EXIT_P0INT函數(shù)的地址并記錄在Stop_Addr變量中;獲得tested_ proc_name變量的地址并記錄在ProcPointer變量中;
[0042] (b)CPU模擬器軟件逐條執(zhí)行Target_File中的目標(biāo)碼指令;
[0043] (c)如圖3所示,在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視輸出信息的地址 0UT_P0RT,當(dāng)該地址有輸出時,在輸出緩沖中記下輸出值,當(dāng)輸出值為0時,將輸出緩沖中 記錄的值輸出到文件中,并清除輸出緩沖;
[0044] (d)如圖4所示,在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視ProcPointer存儲 的tested_proc_name變量的地址,當(dāng)tested_proc_name變量被寫入時,獲得寫入的值,寫 入的值為包含被測函數(shù)名稱的字符串地址,根據(jù)字符串地址獲得被測函數(shù)名稱的字符串, 根據(jù)被測函數(shù)名稱從調(diào)試信息中獲得被測函數(shù)的開始地址和結(jié)束地址,并記錄在開始地 址Func_Start_Addr和結(jié)束地址Func_End_Addr中,CPU模擬器軟件記錄開始地址Func_ Start_Addr和結(jié)束地址Func_End_Addr之間的語句和分支覆蓋信息;
[0045] (e)在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視當(dāng)前運行的PC指針,當(dāng)PC指 針不等于Stop_Addr時,返回執(zhí)行步驟(b),當(dāng)PC指針等于Stop_Addr時,CPU模擬器軟件 停止運行,輸出被測試函數(shù)的反匯編語句到文件中、輸出被測試函數(shù)的覆蓋率信息到文件 中、輸出0UT_P0RT端口到文件中,三個文件保存在0ut_Path目錄中。
[0046] 在下面結(jié)合實例來進一步說明本發(fā)明的技術(shù)方案,在以下的說明中,將針對 TSC695處理器上執(zhí)行的C語言程序說明目標(biāo)碼級的單元測試方法。
[0047] 被測函數(shù)的示例如下:
[0048] float add_proc(float a, float b) {//被測試的函數(shù),其功能是計算a+b的和,其中a、b為輸入?yún)?shù)。 return a+b; }
[0049] 該函數(shù)的名稱為add_pr〇C,輸入?yún)?shù)為兩個單精度浮點數(shù),功能為執(zhí)行兩個單精 度浮點數(shù)的加,并返回。
[0050] 步驟(1):編寫測試驅(qū)動程序的示例如下:
[0051] ftdefine 0UT_P0RT *( (unsigned int *)0χ0Ε000)//定義輸出信息的端口 地址 char* tested_proc_name ;//記錄被測函數(shù)名稱的字符串指針 void info^output (char 氺fmt,…) {//函數(shù)功能:通過端口輸出信息 char buf[128] = {〇[; va_list va; int i=0; va^start (va, fmt);
[0052] vsprintf (&buf[sirlen (buf) ], fmi, va); va_end (va); while (buf [i]!=0) { OUT-PORT = buf[i++]; } OUT-PORT = 0; } void EXIT_POINT() {//函數(shù)功能:指示模擬器退出標(biāo)志函數(shù) } float test proc (float a, float b) {//被測試的函數(shù),其功能是計算a+b的和,其中a、b為輸入?yún)?shù)。 return a+b; } void main() {//測試驅(qū)動程序示例 float a, b; float res; tested_proc_name = 〃add_proc〃;//存儲被測函數(shù)名稱的全局變量賦值 /氺氺氺氺氺氺氺氺傘氺CASE 1氺氺氺水氺氺氺氺氺氺氺氺氺/ info_output(〃Case 1 Start"); a = 1. 0; //測試用例輸入 b = 2.0;//測試用例輸入 info-output("input a=%f b=%f' a, b); res = 8(1(1_〇1'〇<3(&,13);//運行被測程序
[0053] info_output(〃result = %f〃,res);//結(jié)果輸出 info-output("Case 1 End"); /氺氺氺氺氺氺氺氺氺氺CASE 2氺氺氺氺氺氺氺氺氺氺氺氺氺/ inf o_output (''Case 2 Start"); a = 3.0;//測試用例輸入 b = 4. 0;//測試用例輸入 info_o'ntput (〃 input a=%f b=%f//, a, b); res =add_proc (a,b) ; //運行被測程序 info-output(〃result = %f〃,res);//結(jié)果輸出 info_output (''Case 2 End〃); EXIT_P0INT() ;//退出點 }
[0054] 該測試驅(qū)動程序中具有約定語句:
[0055] 1) tested_proc_name = 〃add_proc";對 tested_proc_name 變量的賦值語句。
[0056] 2)EXIT_P0INT();退出空函數(shù)的調(diào)用語句。
[0057] 為了方便記錄測試結(jié)果,在測試驅(qū)動程序中增加了 info_output這樣一個輸出函 數(shù)。該函數(shù)向OxEOOO地址輸出字符串,并以0為輸出結(jié)束標(biāo)志。
[0058] ftdefine 0UT+P0RT *( (unsigned int *)ΟχΟΕΟΟΟ)//定義輸出信息的端 口地址 void info output (char *fmt, ..,) {//函數(shù)功能:通過端口輸出信息 char buf[128] = {0}; va-list va; int i=0; va_start (va, fmt);
[0059] vsprintf (&buf [strlen (buf) ], fmt, va); va^end (va); while(buf[i]!=0) { OUT-PORT = buf[i++]; } OUT PORT = 0; }
[0060] 步驟(2):調(diào)用支持TSC695處理器的GCC C語言編譯器,將測試驅(qū)動程序編譯為 帶調(diào)試信息的目標(biāo)碼,目標(biāo)文件名為a. out。
[0061] 步驟(3):調(diào)用TSC796處理器的CPU模擬軟件。
[0062] 調(diào)用已開發(fā)的TSC695處理器的CPU模擬器軟件,軟件名稱為Sim695.exe。它是一 個命令行程序,其參數(shù)包括3個。
[0063] 參數(shù)1 :為輸出信息的地址,為16進制,記為0UT_P0RT ;
[0064] 參數(shù)2 :為目標(biāo)碼的全路徑名,記為Target_File ;
[0065] 參數(shù)3 :為輸出結(jié)果保存的路徑,記為0ut_Path。
[0066] Sim695. exe運行結(jié)束后,會在0ut_Path目錄下生成四個文件,分別為:
[0067] 1) disassemble, txt為被測函數(shù)的反匯編文件;
[0068] 2) coverage, cov為被測函數(shù)執(zhí)行后的覆蓋率文件;
[0069] 3) outlnfo. txt為out_port地址的輸出信息文件。
[0070] 調(diào)用Sim695. exe執(zhí)行目標(biāo)文件。命令調(diào)用為:
[0071] Sim695. exeOxEOOOa. out c:\out_path
[0072] 其中0xE000為輸出信息的地址;a. out為目標(biāo)文件名;c:\out_path為輸出文件 名。
[0073] Sim695. exe執(zhí)行結(jié)束后,在c:\out_path目錄下生成三個文件,分別為:
[0074] disassemble. txt為被測函數(shù)add_proc的反匯編文件;
[0075] 在disassemble, txt反匯編文件中的函數(shù)名稱為add_proc,反匯編文件中第一行 對應(yīng)的地址為0x2001518,第二行對應(yīng)的地址為0x200151C,….,其中第8行對應(yīng)的地址為 0x2001534,并且該地址的語句是一個分支語句。
[0076] 根據(jù)這個文件可以統(tǒng)計出被測函數(shù)中總的目標(biāo)碼語句數(shù)和分支數(shù)。
[0077] coverage, cov為被測函數(shù)執(zhí)行后的覆蓋率文件;
[0078] 覆蓋率文件的具體格式如下:
[0079] 1)覆蓋率文件是一個DWORD類型數(shù)組的存儲。
[0080] 2)每個DWORD的值與OxFFFFFFFCO為執(zhí)行過的地址;
[0081] 3)DW0RD&0x3 ! = 0x0表示該地址為一個條件跳轉(zhuǎn);
[0082] 4) DWORD&Oxl = = 0x1表示執(zhí)行了條件跳轉(zhuǎn)的真分支;
[0083] 5) DW0RD&0x2 = = 0x2表示執(zhí)行了條件跳轉(zhuǎn)的假分支。
[0084] 根據(jù)這個文件中,可以統(tǒng)計出測試驅(qū)動程序執(zhí)行后,被測函數(shù)執(zhí)行過的目標(biāo)碼語 句數(shù)和分支數(shù),并根據(jù)被測函數(shù)中總目標(biāo)碼語句數(shù)和分支數(shù),獲得本次執(zhí)行的目標(biāo)碼語句 和分支覆蓋率。
[0085] outlnfo. txt 為 out_port 地址的輸出信息。
[0086] 該文件記錄了從ΟχΕΟΟΟ地址輸出的字符串。可以用于記錄測試狀態(tài),分析測試結(jié) 果。在以上示例中,記錄了測試用例的輸入和輸出,可用于分析測試用例執(zhí)行結(jié)果是否通 過。
[0087] 步驟(4)通過分析 disassemble, txt、disassemble, txt. line、coverage, cov、 outlnfo. txt文件,可以得到測試用例是否通過的結(jié)論,以及測試用例執(zhí)行后的目標(biāo)碼級的 語句和分支覆蓋率。
[0088] 以上所述,僅為本發(fā)明的較佳實例而已,并非用于限定本發(fā)明的保護范圍。本發(fā)明 說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員的公知技術(shù)。
【權(quán)利要求】
1. 一種基于CPU模擬器的嵌入式C語言目標(biāo)碼級單元測試方法,其特征在于步驟如 下: (1) 利用C語言單元測試工具生成被測程序的測試驅(qū)動程序; (2) 調(diào)用與目標(biāo)處理器對應(yīng)的嵌入式C語言編譯器,將測試驅(qū)動程序編譯成目標(biāo)處理 器運行的帶調(diào)試信息的目標(biāo)碼; (3) 調(diào)用與目標(biāo)處理器對應(yīng)的CPU模擬器軟件運行帶調(diào)試信息的目標(biāo)碼,生成輸出端 口輸出文件、反匯編程序和覆蓋率文件; (4) 利用結(jié)果及覆蓋率分析工具對CPU模擬器軟件生成的輸出端口輸出文件、反匯編 程序和覆蓋率文件進行分析,獲得測試結(jié)果和測試覆蓋信息。
2. 根據(jù)權(quán)利要求1所述的一種基于CPU模擬器的嵌入式C語言目標(biāo)碼級單元測試方 法,其特征在于:步驟(1)中測試驅(qū)動程序的基本結(jié)構(gòu)包括將被測函數(shù)名稱賦值給一個全 局變量tested_proc_name的句柄、測試用例輸入句柄Input_handle、調(diào)用被測函數(shù)test_ proc句柄、測試結(jié)果輸出句柄Output_handle和調(diào)用退出點函數(shù)EXIT_POINT句柄。
3. 根據(jù)權(quán)利要求1所述的一種基于CPU模擬器的嵌入式C語言目標(biāo)碼級單元測試方 法,其特征在于:所述步驟(3)中的CPU模擬器軟件為一個命令行程序,包括3個參數(shù): 參數(shù)1 :為輸出信息的地址,為16進制,記為0UT_P0RT ; 參數(shù)2 :為目標(biāo)碼的全路徑名,記為Target_File ; 參數(shù)3 :為輸出結(jié)果保存的路徑,記為Out_Path ; CPU模擬器軟件的工作過程為: (a) CPU模擬器軟件解析帶調(diào)試信息的目標(biāo)碼,從帶調(diào)試信息的目標(biāo)碼的路徑Target_ File中,獲得EXIT_POINT函數(shù)的地址并記錄在Stop_Addr變量中;獲得tested_proc_name 變量的地址并記錄在ProcPointer變量中; (b) CPU模擬器軟件逐條執(zhí)行Target_File中的目標(biāo)碼指令; (c) 在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視輸出信息的地址0UT_P0RT,當(dāng)該地址 有輸出時,在輸出緩沖中記下輸出值,當(dāng)輸出值為0時,將輸出緩沖中記錄的值輸出到文件 中,并清除輸出緩沖; (d) 在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視ProcPointer存儲的tested_proc_ name變量的地址,當(dāng)tested_proc_name變量被寫入時,獲得寫入的值,寫入的值為包含被 測函數(shù)名稱的字符串地址,根據(jù)字符串地址獲得被測函數(shù)名稱的字符串,根據(jù)被測函數(shù)名 稱從調(diào)試信息中獲得被測函數(shù)的開始地址和結(jié)束地址,并記錄在開始地址Func_Start_ Addr和結(jié)束地址Func_End_Addr中,CPU模擬器軟件記錄開始地址Func_Start_Addr和結(jié) 束地址Func_End_Addr之間的語句和分支覆蓋信息; (e) 在執(zhí)行目標(biāo)碼的過程中,CPU模擬器軟件監(jiān)視當(dāng)前運行的PC指針,當(dāng)PC指針不等 于Stop_Addr時,返回執(zhí)行步驟(b),當(dāng)PC指針等于Stop_Addr時,CPU模擬器軟件停止運 行,輸出被測試函數(shù)的反匯編語句到文件中、輸出被測試函數(shù)的覆蓋率信息到文件中、輸 出0UT_P0RT端口到文件中,三個文件保存在Out_Path目錄中。
【文檔編號】G06F11/36GK104156311SQ201410381755
【公開日】2014年11月19日 申請日期:2014年8月5日 優(yōu)先權(quán)日:2014年8月5日
【發(fā)明者】郭向英, 王小麗, 劉璟煒, 黃晨, 胡智琦 申請人:北京控制工程研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1