www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]好久沒寫公眾號(hào)了,最近兩個(gè)月基本忙成狗,沒辦法,工作和家庭都要相互兼顧,有了個(gè)小寶寶以后好多時(shí)間都沒那么自由啦,2020年第一篇就來分享一個(gè)剛畢業(yè)的時(shí)候?qū)懙囊粋€(gè)量產(chǎn)測(cè)試工具吧,采用的是C語言來編寫,剛開始應(yīng)用在Linux和Android平臺(tái)上,后面通過移植也















好久沒寫公眾號(hào)了,最近兩個(gè)月基本忙成狗,沒辦法,工作和家庭都要相互兼顧,有了個(gè)小寶寶以后好多時(shí)間都沒那么自由啦,2020年第一篇就來分享一個(gè)剛畢業(yè)的時(shí)候?qū)懙囊粋€(gè)量產(chǎn)測(cè)試工具吧,采用的是C語言來編寫,剛開始應(yīng)用在Linux和Android平臺(tái)上,后面通過移植也用在單片機(jī)上,使用起來非常簡(jiǎn)單,讓我們來看看怎么回事。


一、主程序源碼分析

int main(void){ s32 i ; //初始化測(cè)試系統(tǒng) INIT_TEST_SYSTEM(); //定義頭指針,初始化頭節(jié)點(diǎn) INIT_WORK(work_node); for(i = ZERO ; i < NR(work_Register) ; i++)  { //實(shí)現(xiàn)工作任務(wù)的注冊(cè) REGISTER_WORK(work_node , create_cwork(work_Register[i].work_num ,work_Register[i].work_name , work_Register[i].work_handler)); } //調(diào)度工作任務(wù),編號(hào)從小到大排序 SCHEDULING_WORK(work_node,Positive,NR(work_Register)); while(True) { ; } DESTROY_WORK(work_node,work_Register); return SUCCESS ;}

這段程序的核心框架由四部分組成:

  • INIT_WORK

  • REGISTER_WORK

  • SCHEDULING_WORK

  • DESTROY_WORK

如果你不去追,你可能以為這是四個(gè)定義好的函數(shù),別被它的表面欺騙了,其實(shí)它們是宏,宏的下面一級(jí)才是函數(shù)的實(shí)現(xiàn):

   
  1. #define __INIT_WORK(_work) \

  2. do{ \

  3. _work =Init_cwork(_work); \

  4. }while(0)


  5. #define INIT_WORK(work_node) \

  6. _work work_node = NULL ; \

  7. __INIT_WORK(work_node);


  8. #define REGISTER_WORK(__work,new_work) \

  9. Register_work_fuc(__work,new_work);


  10. #define SCHEDULING_WORK(work_node,direction,array_size) \

  11. Run_Priority_work(work_node,direction,array_size);



  12. #define DESTROY_WORK(work_node,array) \

  13. work_node =Destroy_work(work_node ,array);

各個(gè)子函數(shù)的實(shí)現(xiàn):

   
  1. //初始化一個(gè)子任務(wù)

  2. _work Init_cwork();

  3. //創(chuàng)建一個(gè)子任務(wù)

  4. _work create_cwork(s32 work_num,pchar work_name ,work_fun work_fuc);

  5. //注冊(cè)子任務(wù)

  6. No_returnRegister_work_fuc(_work __work,_work new_work);

  7. //查找子任務(wù)的編號(hào)

  8. s32 Find_Work_Num(_work headler,s32 work_num);

  9. //查找子任務(wù)的名稱

  10. pchar Find_Work_Name(_work headler,pchar work_name);

  11. //執(zhí)行子任務(wù)----根據(jù)任務(wù)名稱來執(zhí)行

  12. s32 Run_work_for_work_name(_work headler,pchar work_name);

  13. //銷毀一個(gè)子任務(wù)

  14. s32 Destroy_cwork(_work headler,pchar work_name);

  15. //銷毀全部任務(wù)

  16. _work Destroy_work(_work headler,_work array);

  17. //工作優(yōu)先級(jí)調(diào)度執(zhí)行--->工作編號(hào)小的優(yōu)先級(jí)高,依次類推

  18. s32 Run_Priority_work(_work handler,s32 direction,const s32 work_array_size);

通過宏調(diào)用各個(gè)子函數(shù)完成任務(wù)的初始化,注冊(cè)、執(zhí)行、銷毀,這個(gè)過程是由一個(gè)鏈表來實(shí)現(xiàn)的:

   
  1. typedefstruct __Work

  2. {

  3. //任務(wù)編號(hào)

  4. //根據(jù)任務(wù)編號(hào)決定工作任務(wù)的優(yōu)先級(jí)

  5. //編號(hào)越小,優(yōu)先級(jí)越高

  6. s32 work_num ;

  7. //任務(wù)名稱

  8. pchar work_name ;

  9. //根據(jù)相應(yīng)的任務(wù)名稱,處理相應(yīng)的任務(wù)

  10. void(*work_handler)(int);

  11. struct __Work *next;

  12. }work;

  13. typedef work * _work ;

由于這是一個(gè)集成測(cè)試工具,所以存在著任務(wù)的并行執(zhí)行,所以當(dāng)執(zhí)行一個(gè)任務(wù)的時(shí)候其實(shí)就創(chuàng)建了一條線程,這個(gè)過程是在Run_Priority_work里實(shí)現(xiàn)的。

s32 Run_Priority_work(_work handler,s32 direction,const s32 work_array_size){  s32 count = 0 ; s32 i ; assert(handler != NULL); _work temp = handler->next ; s32 Curent_node_Array[work_array_size];  while(temp != NULL){ Curent_node_Array[count] = temp->work_num ; temp = temp->next ; if(count < work_array_size) count++ ; } Sort_work_num(Curent_node_Array,NR(Curent_node_Array),direction) ; for(i = 0 ; i < NR(Curent_node_Array) ; i++) Run_work_for_work_num(handler,Curent_node_Array[i]); return SUCCESS ;}

核心的部分也就這些了,接下來講講怎么用吧。

二、使用MTTEST實(shí)現(xiàn)并行測(cè)試項(xiàng)


main.c的代碼一句都不用動(dòng),如果你要添加一個(gè)并行的測(cè)試項(xiàng)目,只需要在結(jié)構(gòu)體數(shù)組里聲明好,定義好測(cè)試任務(wù)函數(shù)就可以了,具體使用方法如下:

   
  1. //按鍵測(cè)試

  2. intTpad_Key_Test(int work_num);

  3. //Gsensor測(cè)試

  4. intTpad_Gsensor_Test(int work_num);

  5. //時(shí)鐘測(cè)試

  6. int RTC_Test(int work_num);

  7. //電池電量測(cè)試

  8. intBattery_Capacity_Test(int work_num);

  9. //電池狀態(tài)測(cè)試

  10. intBattery_Status_Test(int work_num);

  11. //內(nèi)存測(cè)試

  12. int DDR_Test(int work_num);

  13. //EMMC測(cè)試

  14. int EMMC_Test(int work_num);

  15. //SD卡測(cè)試

  16. int SD_Test(int work_num);

  17. //WIFI MAC地址讀取測(cè)試

  18. int NVRAM_WIFI_MAC_ADDRESS_READ_TEST(int work_num);

  19. //WIFI ssid獲取測(cè)試

  20. int WIFI_SSID_Test(int work_num);

  21. //LCD RGB測(cè)試

  22. int LCD_Test(int work_num);

  23. //初始化測(cè)試系統(tǒng)

  24. int INIT_TEST_SYSTEM();

  25. //Camera旋轉(zhuǎn)按鍵測(cè)試

  26. int camera_rotate_test(int work_num);



  27. //結(jié)構(gòu)體數(shù)組描述:

  28. /*

  29. ep:

  30. {1,"LCD_Test",LCD_Test},

  31. 1表示任務(wù)編號(hào),同時(shí)也表示在LCD的哪一行進(jìn)行顯示

  32. "LCD_Test"表示任務(wù)名稱

  33. LCD_Test表示任務(wù)執(zhí)行函數(shù)

  34. */

  35. work work_Register[]=

  36. {

  37. {1,"Tpad_Key_Test",Tpad_Key_Test},

  38. {2,"Tpad_Gsensor_Test",Tpad_Gsensor_Test},

  39. {3,"RTC_Test",RTC_Test},

  40. {4,"Battery_Capacity_Test",Battery_Capacity_Test},

  41. {5,"Battery_Status_Test",Battery_Status_Test},

  42. {6,"DDR_Test",DDR_Test},

  43. {7,"EMMC_Test",EMMC_Test},

  44. {8,"SD_Test",SD_Test},

  45. {9,"NVRAM_WIFI_MAC_ADDRESS_READ_TEST",NVRAM_WIFI_MAC_ADDRESS_READ_TEST},

  46. {10,"WIFI_SSID_Test",WIFI_SSID_Test},

  47. #ifndef __PLAN_A

  48. {11,"camera_rotate_test",camera_rotate_test},

  49. #endif

  50. {12,"LCD_Test",LCD_Test},

  51. };


預(yù)知詳情,請(qǐng)?jiān)敿?xì)看看我分享的項(xiàng)目代碼,注釋很詳細(xì)。

三、分享鏈接


   
  1. 鏈接:https://pan.baidu.com/s/1rPjS2r1-JgmzhF1nFhc0Kg

  2. 提取碼:dlv3


往期分享

分享一個(gè)非常有用且簡(jiǎn)單C語言測(cè)試框架

C語言strstr函數(shù)解析自定義協(xié)議參數(shù)

深入淺出剖析C語言函數(shù)指針與回調(diào)函數(shù)

C語言數(shù)組結(jié)合位運(yùn)算實(shí)戰(zhàn)-位移與查表


我的創(chuàng)業(yè)故事


2019年和同學(xué)一起注冊(cè)了一家公司—深圳云之手科技有限公司,主要是物聯(lián)網(wǎng)相關(guān)產(chǎn)品的開發(fā),目前任副總經(jīng)理職位,我主要負(fù)責(zé)的是企業(yè)的經(jīng)營和管理,由于人員還沒有那么多,所以偶爾也會(huì)兼任產(chǎn)品的研發(fā)管理,如果各位有客戶需要開發(fā)相關(guān)產(chǎn)品可以通過以下名片聯(lián)系我,推薦成功的朋友有現(xiàn)金提成,絕對(duì)不低!

企業(yè)介紹






免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉