本發(fā)明涉及軟plc代碼執(zhí)行,具體涉及一種提升軟plc代碼執(zhí)行速度的方法。
背景技術(shù):
1、提高程序的執(zhí)行效率是所有代碼開(kāi)發(fā)者共同追求的目標(biāo)。效率是指當(dāng)前程序的運(yùn)行速度、對(duì)系統(tǒng)資源的利用程度等。高效率的c語(yǔ)言程序一般表現(xiàn)為代碼緊湊、執(zhí)行速度快、占用空間小、程序可讀性強(qiáng)等方面。然而程序執(zhí)行速度與占內(nèi)存空間往往是相互矛盾的兩個(gè)方面,一些情況下需要以犧牲內(nèi)存空間的代價(jià)來(lái)?yè)Q取效率的提升。
2、在嵌入式軟plc系統(tǒng)中,程序的執(zhí)行速度尤為重要,現(xiàn)有文獻(xiàn)“王磊,李鑫.淺析嵌入式程序的優(yōu)化[j].電腦知識(shí)與技術(shù),2012,8(01):192-193+196”針對(duì)嵌入式系統(tǒng)的特點(diǎn),提出了對(duì)變量的處理、適量使用宏定義、對(duì)數(shù)組的處理、以及盡量避免使用除法等代碼優(yōu)化方面,來(lái)提高系統(tǒng)的性能,但是,其只針對(duì)c語(yǔ)言程序的部分代碼優(yōu)化進(jìn)行效率提升,優(yōu)化效果的提升十分有限,因此有待于進(jìn)一步提升執(zhí)行效率。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于提供一種提升軟plc代碼執(zhí)行速度的方法,解決以下技術(shù)問(wèn)題:
2、如何提升程序的執(zhí)行效率。
3、本發(fā)明的目的可以通過(guò)以下技術(shù)方案實(shí)現(xiàn):
4、一種提升軟plc代碼執(zhí)行速度的方法,包括以下步驟:
5、s01:仿真程序下載完成后,遍歷整個(gè)plc仿真文件,通過(guò)函數(shù)指針數(shù)組的方式,記錄所有調(diào)用的應(yīng)用函數(shù)指針;
6、s02:在程序執(zhí)行時(shí),遍歷函數(shù)指針數(shù)組,讀取應(yīng)用函數(shù)指針,執(zhí)行相應(yīng)的應(yīng)用函數(shù);
7、s03:判斷文件是否解析結(jié)束,若是,則結(jié)束;若否,則重復(fù)步驟s02,直至文件解析結(jié)束。
8、在本發(fā)明更進(jìn)一步的方案中:步驟s01-s03在軟plc系統(tǒng)中的具體實(shí)現(xiàn)方法為:
9、s11:先使用typedef自定義一個(gè)指向函數(shù)的指針類型;
10、s12:然后定義一個(gè)funct?i?onptr類型的數(shù)組,數(shù)組中的每個(gè)元素都可以存儲(chǔ)一個(gè)滿足這些條件的函數(shù)的地址;
11、s13:通過(guò)record_funct?i?on_ca?l?l()函數(shù)存儲(chǔ)函數(shù)指針并增加計(jì)數(shù);
12、s14:通過(guò)rep?l?ay_ca?l?l?s()函數(shù)調(diào)用記錄的應(yīng)用函數(shù)指針。
13、在本發(fā)明更進(jìn)一步的方案中:在步驟s13中,在調(diào)用應(yīng)用函數(shù)時(shí),通過(guò)record_funct?i?on_ca?l?l()函數(shù)得到儲(chǔ)存函數(shù)指針的集合。
14、在本發(fā)明更進(jìn)一步的方案中:在步驟s14中,所述應(yīng)用函數(shù)指針指向不同的應(yīng)用函數(shù),調(diào)用這些應(yīng)用函數(shù)的方法包括數(shù)組索引。
15、在本發(fā)明更進(jìn)一步的方案中:步驟s11-s14在嵌入式軟plc系統(tǒng)代碼中的使用方法為:
16、s21:在scan_l?adder_entry()解析函數(shù)中,在應(yīng)用函數(shù)后增加record_funct?ion_ca?l?l()函數(shù)記錄調(diào)用的應(yīng)用函數(shù)指針;
17、s22:在prog_process()處理程序函數(shù)中,首先解析遍歷一遍仿真文件,獲得記錄的函數(shù)指針數(shù)組,然后調(diào)用rep?l?ay_ca?l?l?s()函數(shù)去遍歷函數(shù)指針。
18、在本發(fā)明更進(jìn)一步的方案中:所述應(yīng)用函數(shù)包括以下執(zhí)行步驟:
19、sa:在mcu中找到一塊空閑的數(shù)據(jù)空間,仿真程序下載完成后,先解析一遍仿真程序,待調(diào)用的應(yīng)用函數(shù)解析出來(lái)操作數(shù)據(jù)類型后,將操作數(shù)據(jù)類型保存在前述空閑的數(shù)據(jù)空間;
20、sb:在執(zhí)行調(diào)用的應(yīng)用函數(shù)時(shí),直接從空閑的數(shù)據(jù)空間中讀取操作數(shù)據(jù)類型,執(zhí)行數(shù)據(jù)操作;
21、sc:判斷應(yīng)用函數(shù)的調(diào)用是否結(jié)束,若是,則結(jié)束;若否,則重復(fù)sb,直至調(diào)用結(jié)束。
22、在本發(fā)明更進(jìn)一步的方案中:步驟sa-sc在軟plc系統(tǒng)中的具體實(shí)現(xiàn)方法為:
23、步驟sa:首先找出mcu中足夠的空閑空間,并用指針p_s_prog指向起始位置;
24、步驟sb:使用record_type()函數(shù)寫入type并增加p_s_prog指針;
25、步驟sc:通過(guò)rep?l?ay_type()函數(shù)讀取p_s_prog當(dāng)前指向的值
26、步驟sd:通過(guò)reset_prog_po?i?nter()函數(shù)重置p_s_prog指針。
27、在本發(fā)明更進(jìn)一步的方案中:步驟sa-sd在軟plc應(yīng)用函數(shù)中涉及數(shù)據(jù)操作部分的操作步驟為:
28、sm:在原來(lái)的數(shù)據(jù)操作函數(shù)plc_readdata16()中添加record_type()函數(shù)記錄操作數(shù)據(jù)類型值;
29、sn:新建s_plc_readdata16()函數(shù)用于替換plc_readdata16()函數(shù)進(jìn)行數(shù)據(jù)讀取。
30、本發(fā)明的有益效果:
31、本發(fā)明的提升軟plc代碼執(zhí)行速度的方法,針對(duì)軟plc系統(tǒng)執(zhí)行效率較低問(wèn)題,首先通過(guò)“空間換時(shí)間”方法省去執(zhí)行應(yīng)用函數(shù)時(shí)的解析過(guò)程,進(jìn)而提升代碼執(zhí)行速度,并在此基礎(chǔ)上,通過(guò)“二次編譯”方法省去應(yīng)用函數(shù)執(zhí)行過(guò)程中的解析操作數(shù)據(jù)類型的過(guò)程,進(jìn)一步提升代碼執(zhí)行速度;通過(guò)減少程序解析步驟的思想,使得軟plc的執(zhí)行效率有較高提升。
1.一種提升軟plc代碼執(zhí)行速度的方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,步驟s01-s03在軟plc系統(tǒng)中的具體實(shí)現(xiàn)方法為:
3.根據(jù)權(quán)利要求2所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,在步驟s13中,在調(diào)用應(yīng)用函數(shù)時(shí),通過(guò)record_function_call()函數(shù)得到儲(chǔ)存函數(shù)指針的集合。
4.根據(jù)權(quán)利要求2所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,在步驟s14中,所述應(yīng)用函數(shù)指針指向不同的應(yīng)用函數(shù),調(diào)用這些應(yīng)用函數(shù)的方法包括數(shù)組索引。
5.根據(jù)權(quán)利要求2所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,步驟s11-s14在嵌入式軟plc系統(tǒng)代碼中的使用方法為:
6.根據(jù)權(quán)利要求1所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,所述應(yīng)用函數(shù)包括以下執(zhí)行步驟:
7.根據(jù)權(quán)利要求6所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,步驟sa-sc在軟plc系統(tǒng)中的具體實(shí)現(xiàn)方法為:
8.根據(jù)權(quán)利要求7所述的提升軟plc代碼執(zhí)行速度的方法,其特征在于,步驟sa-sd在軟plc應(yīng)用函數(shù)中涉及數(shù)據(jù)操作部分的操作步驟為: