TWI813269B - 程式碼校驗方法及非暫態電腦可讀記錄媒體裝置 - Google Patents
程式碼校驗方法及非暫態電腦可讀記錄媒體裝置 Download PDFInfo
- Publication number
- TWI813269B TWI813269B TW111115904A TW111115904A TWI813269B TW I813269 B TWI813269 B TW I813269B TW 111115904 A TW111115904 A TW 111115904A TW 111115904 A TW111115904 A TW 111115904A TW I813269 B TWI813269 B TW I813269B
- Authority
- TW
- Taiwan
- Prior art keywords
- name
- target
- storage area
- target function
- function name
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000012795 verification Methods 0.000 claims description 40
- 238000013507 mapping Methods 0.000 claims description 31
- 230000006870 function Effects 0.000 description 133
- 238000010586 diagram Methods 0.000 description 12
- 238000007689 inspection Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000010187 selection method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Abstract
一種程式碼校驗方法包含:使編譯器根據高階程式碼文件產生映射文件及低階程式碼文件;自映射文件取得目標函數信息;自低階程式碼文件找到目標程式碼文件;自目標程式碼文件獲取目標函數信息的目標函數名的第一返回指令;遍歷低階程式碼文件以取得各調用模組名與各調用函數名的第二返回指令;自映射文件取得各調用模組名的第二儲存區域;根據目標函數信息的第一儲存區域、第一返回指令、每一第二儲存區域與每一第二返回指令判斷各調用函數名對目標函數名的調用是否符合分頁切換編寫格式;及於判定不符分頁切換編寫格式時產生校驗失敗結果。
Description
本案是關於程式碼的校驗,特別是一種基於分頁切換編寫格式的程式碼校驗方法及非暫態電腦可讀記錄媒體裝置。
小型設備C語言編譯器(Small Device C Compiler,SDCC)為一種專用於開發8051程式碼的開源工具(open source tool)。小型設備C語言編譯器具有一預定格式,即如果發生跨頁調用其他函數的情形,需在被調用函數的定義位置以及調用函數的調用申明處分別添加調用關鍵字“__banked”。然而,在使用小型設備C語言編譯器開發8051程式碼時,其並不會自動檢查程式碼是否違反此預定格式。是以,即便違反了也不會跑出編譯警告或錯誤。如此一來,恐導致執行此錯誤程式碼的硬體會發生程序卡死或其他重大問題,進而影響到8051產品的品質。
本案提供一種程式碼校驗方法。在一實施例中,程式碼校驗方法包含:利用編譯器根據至少一高階程式碼文件產生映射文件及至少一低階程式碼文件;自映射文件取得目標函數信息,其中目標函數信息包含目標函數名、目標函數名所屬的目標模組名與目標函數名的入口地址所在的第一儲存區域;根據目標模組名自至少一低階程式碼文件中找到對應的目標程式碼文件;自目標程式碼文件中獲取對應目標函數名的第一返回指令;遍歷至少一低階程式碼文件以取得調用目標函數名的至少一調用模組名與至少一調用函數名對應的第二返回指令;自映射文件取得對應至少一調用模組名所在的第二儲存區域;根據第一儲存區域、第一返回指令、每一第二儲存區域及每一第二返回指令判斷各調用函數名對目標函數名之調用是否符合分頁切換編寫格式;以及於判定不符合分頁切換編寫格式時,產生校驗失敗結果。
本案另提供一種非暫態電腦可讀記錄媒體裝置。在一實施例中,非暫態電腦可讀記錄媒體裝置儲存至少一程式。當電子裝置載入並執行非暫態電腦可讀記錄媒體裝置所儲存的至少一程式時,該至少一程式致使電子裝置執行以下步驟:利用編譯器根據至少一高階程式碼文件產生映射文件及至少一低階程式碼文件;自映射文件取得目標函數信息,其中目標函數信息包含目標函數名、目標函數名所屬的目標模組名與目標函數名的入口地址所在的第一儲存區域;根據目標模組名自至少一低階程式碼文件中找到對應的目標程式碼文件;自目標程式碼文件中獲取對應目標函數名的第一返回指令;遍歷至少一低階程式碼文件以取得調用目標函數名的至少一調用模組名與至少一調用函數名對應的第二返回指令;自映射文件取得對應至少一調用模組名所在的第二儲存區域;根據第一儲存區域、第一返回指令、每一第二儲存區域及每一第二返回指令判斷各調用函數名對目標函數名之調用是否符合分頁切換編寫格式;以及於判定不符合分頁切換編寫格式時,產生校驗失敗結果。
以下在實施方式中詳細敘述本案之詳細特徵以及優點,其內容足以使任何熟習相關技藝者瞭解本案之技術內容並據以實施,且根據本說明書所揭露之內容、申請專利範圍及圖式,任何熟習相關技藝者可輕易地理解本案相關之目的及優點。
為使本案之實施例之上述目的、特徵和優點能更明顯易懂,下文配合所附圖式,作詳細說明如下。
請參閱圖1,本案任一實施例之程式碼校驗方法可由非暫態電腦可讀記錄媒體裝置100來實現。非暫態電腦可讀記錄媒體裝置100用以儲存至少一程式,以當電子裝置200載入並執行此至少一程式後,此至少一程式能致使電子裝置200執行本案任一實施例之程式碼校驗方法。於執行本案任一實施例之程式碼校驗方法後,如圖5、圖9與圖11所示,電子裝置200便可有效確認出在至少一高階程式碼文件C1-CN中是否有錯漏了調用位於另一儲存區之函數時所需添加的調用關鍵字K1(即“__banked”),以避免後續在將低階程式碼文件A1-AN組譯(Assemble)為機械碼並交由處理器(例如,8051單晶片)來執行後,處理器會因高階程式碼文件C1-CN中所錯漏的調用關鍵字K1而發生卡死或其他重大問題。是以,本案任一實施例之程式碼校驗方法可提高程式碼的開發效率以及執行此程式碼之應用產品的品質。
在一些實施例中,非暫態電腦可讀記錄媒體裝置100可為電子裝置200內部的儲存器220。在另一些實施例中,非暫態電腦可讀記錄媒體裝置100可為遠端儲存元件,並且經由有線或無線的方式通訊於電子裝置200。在又一些實施例中,非暫態電腦可讀記錄媒體裝置100可為電子裝置200外部的儲存元件,並經由電子裝置200的讀取器或連接器連接並存取此儲存元件的程式碼。在一些實施態樣中,儲存器220可由一個或多個儲存元件實現,並且各儲存元件可為但不限於非揮發性記憶體,例如唯讀記憶體(ROM)或快閃記憶體(Flash memory)等或揮發性記憶體,例如隨機存取記憶體(RAM)。此外,電子裝置200可利用但不限於電腦、中央處理器(CPU)或特殊應用積體電路(ASIC)等來實現。
請參閱圖1至圖5。在程式碼校驗方法之一實施例中,電子裝置200可先利用一編譯器210讀取至少一高階程式碼文件C1-CN,並根據至少一高階程式碼文件C1-CN進行編譯(Compile),以形成至少一低階程式碼文件A1-AN(步驟S10)。高階程式碼文件C1與低階程式碼文件A1-AN儲存在儲存器220中。在一些實施態樣中,各高階程式碼文件C1可為程式設計者利用C語言撰寫而成的程式碼文件。各高階程式碼文件C1包含至少一個C語言函數。編譯器210可為一種專用於開發8051程式碼的小型設備C語言編譯器(Small Device C Compiler,SDCC)。編譯器210對各個模組以組合語言(Assembly Language)進行編譯,以相應生成對應於高階程式碼文件C1-CN的低階程式碼文件A1-AN。低階程式碼文件A1-AN為匯編文件(asm file)。各高階程式碼文件C1-CN與各低階程式碼文件A1-AN即分別為一軟體模組。一般而言,各高階程式碼文件C1-CN分別與對應的低階程式碼文件A1-AN具有相同的模組名(檔名)。換言之,若得知一高階程式碼文件C1-CN的檔名(模組名),即可得知相對應的低階程式碼文件A1-AN的檔名(模組名),反之亦然。因此,文後所提及的「模組名」泛指相對應的高階程式碼文件C1-CN和/或低階程式碼文件A1-AN的模組名。
一般來說,處理器能力有其侷限,僅能支援有限的程式碼尋址範圍,例如8051的尋址範圍僅能支援64千位元組(KB)。若程式碼超過此尋址範圍,一般會使用代碼分頁(Code banking)的方式來擴充程式空間。代碼分頁是將程式儲存空間劃分成多個分頁。以程式儲存空間為2百萬位元組(MB)為例,若欲以64千位元組(KB)來將所有程式儲存空間劃分分頁時,共可分成32分頁P1-P32,如圖2所示。需注意的是,程式儲存空間並不一定需要全部劃分成分頁,亦可保留部分不做劃分。各分頁P1-P32可包含共用區COM與儲存區Bank1-Bank32。
於編譯過程中,編譯器210會分析至少一高階程式碼文件C1-CN而產生一映射文件(map file)M1(步驟S10)。
在一些實施態樣中,映射文件M1儲存在儲存器220中。映射文件M1記載定義在每一共用區COM與儲存區Bank1-Bank32的函數名、定義各函數名之模塊的模組名,以及各函數名的入口地址。其中,每一函數名用以指示一個組合語言函數或一個C語言函數。一般來說,相對應的組合語言函數和C語言函數具有幾乎相同的函數名,差異僅在於組合語言函數較C語言函數多了一前綴“_”。換言之,若得知一組合語言函數名,即可得知相對應的C語言函數,反之亦然。因此,文後所提及的「函數名」泛指相對應的組合語言函數和/或C語言函數的名稱。
於取得映射文件M1後,電子裝置200可自映射文件M1中取得作為當前檢查目標的一目標函數信息T1(步驟S20)。於此,目標函數信息T1可包含目標函數名T11、定義此目標函數名T11的目標模組名T12以及目標函數名T11之入口地址所在的一第一儲存區域T13。例如,如圖8所示,“_rtk_gpio_output”為目標函數名T11。 “_rtk_gpio” 為目標模組名T12。“00074FE8” 為入口地址,其中 “0007” 是儲存區Bank7的代碼,亦即可根據“0007”得知其第一儲存區域T13為儲存區Bank7。
在步驟S20之一實施例中,電子裝置200可先分析映射文件M1,以根據映射文件M1產生一函數列表。其中,函數列表包含可被調用的複數函數信息。之後,電子裝置200便可自函數列表中取得此些函數信息中之一者來作為當前檢查目標的目標函數信息T1。於此,每一函數信息可包含函數名、定義此函數名的模組的檔名(模組名)以及此函數名之入口地址所在的儲存區域。並且,目標函數信息T1的目標函數名T11、定義目標函數名T11的目標模組名T12以及目標函數名T11之入口地址所在的一第一儲存區域T13即分別為所取得之函數信息的函數名、定義此函數名的模組名以及函數名之入口地址所在的儲存區域。
在步驟S20之一實施態樣中,電子裝置200是依據一既定方式來擇取出作為目標函數信息T1的一函數信息。其中,所述既定方式可為依序、隨機或其他合適的擇取方式等。
於取得目標函數信息T1後,電子裝置200可根據目標函數信息T1的目標模組名T12自低階程式碼文件A1-AN中找到對應的一目標程式碼文件TF(步驟S30)。亦即,找尋低階程式碼文件A1-AN之中具有與目標模組名T12相同檔名者。接著,自目標程式碼文件TF中獲取在對應於目標函數名T11之函數定義中的一第一返回指令R1(步驟S40)。如圖10所示,為目標模組名為“_rtk_gpio”的目標程式碼文件TF,可以看到第一返回指令R1為“ljmp sdcc_banked_ret”。於此,僅呈現出關於目標函數名T11之函數(即,“_rtk_gpio_output”)的部分。第一返回指令R1是位於目標函數名T11之函數定義的最後一行。
接續,電子裝置200遍歷低階程式碼文件A1-AN,以取得調用此目標函數名T11的調用模組名以及調用函數名對應的第二返回指令R2(步驟S50),並且自映射文件M1取得對應調用模組名所在的一第二儲存區域(步驟S60)。調用函數名為調用此目標函數名T11的某一函數。而調用模組名是此調用函數名所在的低階程式碼文件A1-AN的檔名(模組名)。舉例而言,電子裝置200可於如圖12所示的一低階程式碼文件中找到調用模組名為“flow_system”,調用函數名為“_high_voltage_power_enable”且找到對應的第二返回指令R2(於此,如圖12所示,第二返回指令R2為“lcall__sdcc_banked_call”)。並且電子裝置200可於如圖7所示的映射文件M1中找到對應的第二儲存區域為儲存區Bank1(因相應的代碼為“0001”)。 第二返回指令R2是位於調用函數名之調用內容的最後一行。
之後,電子裝置200便可根據第一儲存區域T13、第一返回指令R1、每一第二儲存區域以及每一第二返回指令判斷各調用函數名對目標函數名T11之調用是否符合一分頁切換編寫格式(步驟S70)。
在步驟S70之一些實施例中,如圖4所示,電子裝置200可判斷第一儲存區域T13是否為共用區COM(步驟S71)。於判定第一儲存區域T13為共用區COM時,表示目標函數名T11所對應的C語言函數是定義在分頁P1-P32中之某一者的共用區COM中。以圖6所示為例,關鍵字“CSEG”表示為共用區COM。此處所列的函數均定義於共用區COM。例如,當目標函數名T11為“_timer0_isr”,則第一儲存區域T13為共用區COM。由於共用區COM之特性,無論調用此目標函數名T11的各調用函數名所對應的函數是定義在共用區COM或儲存區Bank1-Bank32,電子裝置200都會判定各調用函數名對目標函數名T11之調用是符合分頁切換編寫格式(步驟S80)。
當電子裝置200於步驟S71之判定結果是第一儲存區域T13不為共用區COM時,電子裝置200進一步判斷第一儲存區域T13與各第二儲存區域是否均相同(步驟S73)。亦即,判斷第一儲存區域T13與各第二儲存區域是否為儲存區Bank1-Bank32中的同一個。於判定第一儲存區域T13與各第二儲存區域均相同時,表示無跨頁調用函數之情況發生,因此電子裝置200會判定各調用函數名對目標函數名T11之調用符合分頁切換編寫格式(步驟S80)。
如圖4所示,當電子裝置200於步驟S73中判定任一第二儲存區域不同於第一儲存區域T13(即,位於不同的分頁P1-P32中)時,表示有跨頁調用函數之情況發生。舉例而言,假設第一儲存區域T13為儲存區Bank1,而一第二儲存區域例如為儲存區Bank3或共用區COM時,電子裝置200會認為有跨頁調用函數之情況發生。此時,電子裝置200會判斷第一返回指令R1是否為一分頁返還指令,並且判斷對應的第二返回指令R2(即,所對應之第二儲存區域與第一儲存區域T13不同的調用模組名的第二返回指令R2)是否為一分頁呼叫指令(步驟S74)。在步驟S74之一些實施例中,電子裝置200可僅針對於步驟S73中判定不同於第一儲存區域T13的每一第二儲存區域所對應的第二返回指令R2來判斷是否為分頁呼叫指令。換言之,可不對已判斷和第一儲存區域T13相同的每一第二儲存區域所對應的第二返回指令R2進行判斷。
在一些實施態樣中,分頁返還指令可為用以返回當前函數的“ljmp __sdcc_banked_ret”,且分頁呼叫指令可為用以調用位於其他分頁的“lcall __sdcc_banked_call”。
當電子裝置200於步驟S74中判定第一返回指令R1為分頁返還指令且對應的第二返回指令R2為分頁呼叫指令時,表示目標函數名T11所對應的C語言函數在定義時有添加了調用關鍵字K1(例如,“__banked”,如圖9所示),且在此調用函數名所對應的C語言函數在申明調用目標函數名T11所對應的C語言函數時亦有添加了調用關鍵字K1(例如,“__banked”,如圖11所示)。因此,電子裝置200會判定此調用函數名對目標函數名T11之調用符合分頁切換編寫格式。在步驟S74之一些實施例中,如果還存有其他第二儲存區域對應的第二返回指令R2需要判斷是否為分頁呼叫指令時,電子裝置200會繼續判斷各第二返回指令R2是否為分頁呼叫指令。並且,電子裝置200可於判定第一返回指令R1為分頁返還指令且判定所有第二儲存區域所對應的第二返回指令R2皆為分頁呼叫指令時,而判定各調用函數名對目標函數名T11之調用符合分頁切換編寫格式(步驟S80)。
當電子裝置200於步驟S74中判定第一返回指令R1不為分頁返還指令(例如為一般返還指令R3,如圖13所示,“ret”為一般返還指令R3)或判定對應的第二返回指令R2不為分頁呼叫指令(例如為一般呼叫指令R4,如圖14所示,“lcall _rtk_gpio_output”為一般呼叫指令)時,表示目標函數名T11所對應的C語言函數在定義時未添加調用關鍵字K1(例如,“__banked”)(即,第一返回指令R1不為分頁返還指令時),或者在此調用函數名所對應的C語言函數在申明調用此目標函數名T11所對應的C語言函數時未添加調用關鍵字K1(例如,“__banked”)(即,第二返回指令R2不為分頁呼叫指令時)。因此,電子裝置200會判定此調用函數名對目標函數名T11之調用不符合分頁切換編寫格式(步驟S90)。如圖3所示,於判定不符合分頁切換編寫格式後,電子裝置200會產生一校驗失敗結果(步驟S100)。
在程式碼校驗方法之一實施例中,電子裝置200可更根據校驗失敗結果致使編譯器210停止其編譯程序(步驟S110),並且顯示出校驗失敗結果(步驟S120)。其中,校驗失敗結果可包含導致產生此校驗失敗結果的目標函數名T11與目標模組名T12(如果於步驟S74中有判定第一返回指令R1不為分頁返還指令),及/或調用模組名與調用函數名(如果於步驟S74中有判定第二返回指令R2不為分頁呼叫指令)。如此一來,程式設計者便可根據校驗失敗結果來快速得知需對高階程式碼文件C1中的何處進行修正。
在一些實施態樣中,校驗失敗結果可透過電子裝置200其自身的顯示器來進行顯示。而在另一些實施態樣中,校驗失敗結果亦可透過以有線連接或無線連接於電子裝置200的顯示裝置來進行顯示。
在程式碼校驗方法之一實施例中,電子裝置200於執行步驟S80而判定各調用函數名對此目標函數名之調用符合分頁切換編寫格式後,電子裝置200可返回步驟S20,以重新取得另一函數信息作為當前檢查目標的目標函數信息T1,並接續執行後續步驟。在一些實施例中,倘若函數列表中的所有函數信息電子裝置200都已通過本案一實施例之程式碼校驗方法之校驗,則電子裝置200可結束對至少一高階程式碼文件C1的整個校驗程序。
綜上所述,本案實施例之程式碼校驗方法及非暫態電腦可讀記錄媒體裝置,其透過自映射文件中取得的第一儲存區域、自目標程式碼文件中取得的第一返回指令、自映射文件中取得的每一第二儲存區域以及自低階程式碼文件中取得的每一第二返回指令來判斷各調用函數名對目標函數名之調用是否符合分頁切換編寫格式。如此一來,本案可有效確認出在高階程式碼文件中是否有錯漏了調用位於另一儲存區之函數時所需添加的調用關鍵字,以避免後續在將低階程式碼文件組譯為機械碼並交由處理器來執行後,處理器會因高階程式碼文件中所錯漏的調用關鍵字而發生卡死或其他重大問題,進而可提高程式碼的開發效率以及執行此程式碼之應用產品的品質。此外,本案實施例之程式碼校驗方法及非暫態電腦可讀記錄媒體裝置,其可於判定不符合分頁切換編寫格式時,產生並顯示出校驗失敗結果,以便於程式設計者可據此快速修正程式碼。
雖然本案的技術內容已經以較佳實施例揭露如上,然其並非用以限定本案,任何熟習此技藝者,在不脫離本案之精神所作些許之更動與潤飾,皆應涵蓋於本案的範疇內,因此本案之保護範圍當視後附之申請專利範圍所界定者為準。
100:非暫態電腦可讀記錄媒體裝置
200:電子裝置
210:編譯器
220:儲存器
A1-AN:低階程式碼文件
Bank1-Bank32:儲存區
C1-CN:高階程式碼文件
COM:共用區
K1:調用關鍵字
M1:映射文件
P1-P32:分頁
R1:第一返回指令
R2:第二返回指令
R3:一般返還指令
R4:一般呼叫指令
T1:目標函數信息
T11:目標函數名
T12:目標模組名
T13:第一儲存區域
TF:目標程式碼文件
S10-S120:步驟
S71:步驟
S73-S74:步驟
圖1為非暫態電腦可讀記錄媒體裝置與電子裝置之一實施例的方塊示意圖。
圖2為複數分頁之一實施例的概要示意圖。
圖3為程式碼校驗方法之一實施例的流程示意圖。
圖4為步驟S70之一實施例的流程示意圖。
圖5為編譯器根據高階程式碼文件產生映射文件與低階程式碼文件之一實施例的概要示意圖。
圖6為映射文件中關於共用區部分之一實施例的示意圖。
圖7為映射文件中關於儲存區Bank1部分之一實施例的示意圖。
圖8為映射文件中關於儲存區Bank7部分之一實施例的示意圖。
圖9為C語言函數在定義處有添加調用關鍵字之一實施例的示意圖。
圖10為圖9對應之低階程式碼文件之一實施例的示意圖。
圖11為在申明調用處有添加調用關鍵字之一實施例的示意圖。
圖12為圖11對應之低階程式碼文件之一實施例的示意圖。
圖13為C語言函數在定義處未添加調用關鍵字時對應之低階程式碼文件之一實施例的示意圖。
圖14為在申明調用處未添加調用關鍵字時對應之低階程式碼文件之一實施例的示意圖。
S10-S120:步驟
Claims (10)
- 一種程式碼校驗方法,包含: 利用一編譯器根據至少一高階程式碼文件產生一映射文件及至少一低階程式碼文件; 自該映射文件取得一目標函數信息,其中該目標函數信息包含一目標函數名、定義該目標函數名的一目標模組名與該目標函數名的一入口地址所在的一第一儲存區域; 根據該目標模組名自該至少一低階程式碼文件中找到對應的一目標程式碼文件; 自該目標程式碼文件中獲取對應該目標函數名之一第一返回指令; 遍歷該至少一低階程式碼文件以取得調用該目標函數名的至少一調用模組名與至少一調用函數名之一第二返回指令; 自該映射文件取得對應該至少一調用模組名所在的一第二儲存區域; 根據該第一儲存區域、該第一返回指令、每一該第二儲存區域及每一該第二返回指令判斷各該調用函數名對該目標函數名之調用是否符合一分頁切換編寫格式;以及 於判定不符合該分頁切換編寫格式時,產生一校驗失敗結果。
- 如請求項1所述的程式碼校驗方法,其中自該映射文件取得該目標函數信息之步驟包含: 根據該映射文件產生一函數列表,其中該函數列表包含複數函數信息;以及 自該函數列表中取得該些函數信息中之一作為該目標函數信息。
- 如請求項1所述的程式碼校驗方法,其中判斷各該調用函數名對該目標函數名之調用是否符合該分頁切換編寫格式之步驟包含: 判斷該第一儲存區域是否為一共用區;以及 於判定該第一儲存區域為該共用區時,判定符合該分頁切換編寫格式。
- 如請求項3所述的程式碼校驗方法,其中判斷各該調用函數名對該目標函數名之調用是否符合該分頁切換編寫格式之步驟更包含: 於判定該第一儲存區域不為該共用區時,判斷該第一儲存區域與各該第二儲存區域是否均相同;以及 於判定該第一儲存區域與各該第二儲存區域均相同時,判定符合該分頁切換編寫格式。
- 如請求項4所述的程式碼校驗方法,其中判斷各該調用函數名對該目標函數名之調用是否符合該分頁切換編寫格式之步驟更包含: 於判定任一該第二儲存區域不同於該第一儲存區域時,判斷該第一返回指令是否為一分頁返還指令以及對應的該第二返回指令是否為一分頁呼叫指令;以及 於判定該第一返回指令為該分頁返還指令以及對應的該第二返回指令為該分頁呼叫指令時,判定符合該分頁切換編寫格式。
- 如請求項5所述的程式碼校驗方法,更包含: 於判定該第一返回指令不為該分頁返還指令或對應的該第二返回指令不為該分頁呼叫指令時,判定不符合該分頁切換編寫格式。
- 如請求項1所述的程式碼校驗方法,更包含: 根據該校驗失敗結果致使該編譯器停止編譯;以及 顯示該校驗失敗結果,其中該校驗失敗結果包含:導致產生該校驗失敗結果的該目標函數名與該目標模組名,及/或該調用函數名與該調用模組名。
- 一種非暫態電腦可讀記錄媒體裝置,儲存至少一程式,當一電子裝置載入並執行該至少一程式時,該至少一程式致使該電子裝置執行以下步驟: 利用一編譯器根據至少一高階程式碼文件產生一映射文件及至少一低階程式碼文件; 自該映射文件取得一目標函數信息,其中該目標函數信息包含一目標函數名、定義該目標函數名的一目標模組名與該目標函數名的一入口地址所在的一第一儲存區域; 根據該目標模組名自該至少一低階程式碼文件中找到對應的一目標程式碼文件; 自該目標程式碼文件中獲取對應該目標函數名之一第一返回指令; 遍歷該至少一低階程式碼文件以取得調用該目標函數名的至少一調用模組名與至少一調用函數名之一第二返回指令; 自該映射文件取得對應該至少一調用模組名所在的一第二儲存區域; 根據該第一儲存區域、該第一返回指令、每一該第二儲存區域及每一該第二返回指令判斷各該調用函數名對該目標函數名之調用是否符合一分頁切換編寫格式;以及 於判定不符合該分頁切換編寫格式時,產生一校驗失敗結果。
- 如請求項8所述的非暫態電腦可讀記錄媒體裝置,其中自該映射文件取得該目標函數信息之步驟包含: 根據該映射文件產生一函數列表,其中該函數列表包含複數函數信息;以及 自該函數列表中取得該些函數信息中之一作為該目標函數信息。
- 如請求項8所述的非暫態電腦可讀記錄媒體裝置,其中判斷各該調用函數名對該目標函數名之調用是否符合該分頁切換編寫格式之步驟包含: 判斷該第一儲存區域是否為一共用區;以及 於判定該第一儲存區域為該共用區時,判定符合該分頁切換編寫格式。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210288737.2A CN116820419A (zh) | 2022-03-22 | 2022-03-22 | 源代码校验方法及非暂态计算机可读存储介质装置 |
CN202210288737.2 | 2022-03-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI813269B true TWI813269B (zh) | 2023-08-21 |
TW202338597A TW202338597A (zh) | 2023-10-01 |
Family
ID=88095839
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW111115904A TWI813269B (zh) | 2022-03-22 | 2022-04-26 | 程式碼校驗方法及非暫態電腦可讀記錄媒體裝置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11977867B2 (zh) |
CN (1) | CN116820419A (zh) |
TW (1) | TWI813269B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7949995B2 (en) * | 2005-09-14 | 2011-05-24 | Sadlek James M | Visual programming method |
CN102830975A (zh) * | 2012-08-15 | 2012-12-19 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
CN107111713A (zh) * | 2014-10-02 | 2017-08-29 | 微软技术许可有限责任公司 | 软件系统的自动验证 |
TW201923648A (zh) * | 2017-11-09 | 2019-06-16 | 安地卡及巴布達商區塊鏈控股有限公司 | 用於可驗證運算之類c語言智慧合約的算術增強技術 |
CN110506256A (zh) * | 2017-07-31 | 2019-11-26 | 帝斯贝思数字信号处理和控制工程有限公司 | 用于生成源代码的方法 |
CN113282301A (zh) * | 2021-07-22 | 2021-08-20 | 北京麟卓信息科技有限公司 | 基于高级语言与汇编语言相关性的汇编指令转换方法 |
CN113656042A (zh) * | 2021-08-24 | 2021-11-16 | 北京奇艺世纪科技有限公司 | 一种代码生成方法、装置、电子设备及存储介质 |
CN114020278A (zh) * | 2020-07-19 | 2022-02-08 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06230977A (ja) * | 1993-02-05 | 1994-08-19 | Nec Corp | 言語処理装置 |
JP3566602B2 (ja) * | 1999-11-04 | 2004-09-15 | Necマイクロシステム株式会社 | コンパイル方法、および、コンパイル用プログラムを記録した記録媒体 |
US10248545B2 (en) * | 2016-02-17 | 2019-04-02 | Parasoft Corporation | Method for tracking high-level source attribution of generated assembly language code |
US11029927B2 (en) * | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
-
2022
- 2022-03-22 CN CN202210288737.2A patent/CN116820419A/zh active Pending
- 2022-04-26 TW TW111115904A patent/TWI813269B/zh active
- 2022-08-10 US US17/885,047 patent/US11977867B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7949995B2 (en) * | 2005-09-14 | 2011-05-24 | Sadlek James M | Visual programming method |
CN102830975A (zh) * | 2012-08-15 | 2012-12-19 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
CN107111713A (zh) * | 2014-10-02 | 2017-08-29 | 微软技术许可有限责任公司 | 软件系统的自动验证 |
CN110506256A (zh) * | 2017-07-31 | 2019-11-26 | 帝斯贝思数字信号处理和控制工程有限公司 | 用于生成源代码的方法 |
TW201923648A (zh) * | 2017-11-09 | 2019-06-16 | 安地卡及巴布達商區塊鏈控股有限公司 | 用於可驗證運算之類c語言智慧合約的算術增強技術 |
CN114020278A (zh) * | 2020-07-19 | 2022-02-08 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
CN113282301A (zh) * | 2021-07-22 | 2021-08-20 | 北京麟卓信息科技有限公司 | 基于高级语言与汇编语言相关性的汇编指令转换方法 |
CN113656042A (zh) * | 2021-08-24 | 2021-11-16 | 北京奇艺世纪科技有限公司 | 一种代码生成方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
TW202338597A (zh) | 2023-10-01 |
US11977867B2 (en) | 2024-05-07 |
CN116820419A (zh) | 2023-09-29 |
US20230305821A1 (en) | 2023-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI629591B (zh) | 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與電子裝置 | |
US9298472B2 (en) | High-speed restart method, information processing device, and program | |
US7925821B2 (en) | Nonvolatile semiconductor storage device and method of managing the same | |
US20110276794A1 (en) | Information processing device having configuration changing function and system configuration method | |
JP5778296B2 (ja) | 仮想計算機システム、仮想化機構、及びデータ管理方法 | |
JP2006120082A (ja) | メモリカード、半導体装置、及びメモリカードの制御方法 | |
JP2008009721A (ja) | 評価システム及びその評価方法 | |
CN112230988A (zh) | 接口文档的生成方法、装置、计算机设备和存储介质 | |
JP5057887B2 (ja) | データ更新装置及びデータ更新方法及びデータ更新プログラム | |
TWI813269B (zh) | 程式碼校驗方法及非暫態電腦可讀記錄媒體裝置 | |
US7640421B1 (en) | Method and system for determining context switch state | |
JP2009020695A (ja) | 情報処理装置及びシステム | |
JP7369701B2 (ja) | 処理回路上で実行されるべきプログラムをデバッグするときにメタデータにアクセスする方法 | |
CN114047952A (zh) | 用于单片机的处理器、方法、单片机和存储介质 | |
CN107977282B (zh) | 一种SPI-Nand读取数据页的方法及装置 | |
US10515029B2 (en) | Conversion tool for moving from block-based persistence to byte-based persistence | |
JP6688433B2 (ja) | 計算機システム | |
US10185653B2 (en) | Integrated systems and methods for the transactional management of main memory and data storage | |
CN117170753B (zh) | 程序处理方法、程序处理装置、车辆和存储介质 | |
US10055207B2 (en) | Persistent variables in programming languages | |
JP6020071B2 (ja) | プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ | |
US20160253120A1 (en) | Multicore programming apparatus and method | |
JP2023092064A (ja) | 修正箇所特定装置 | |
CN117707535A (zh) | 基于头文件自适应的代码集成方法、装置、设备及介质 | |
CN113849395A (zh) | 组态方法、数组下标越界的动态检测方法、分散控制系统 |