OMAPL138雙核系統(tǒng)的調(diào)試方案設(shè)計(jì)
GPP端按如下順序開(kāi)通消息隊(duì)列:
①PROC_setup()。采用ARM端應(yīng)用程序載入DSP程序到DSP中運(yùn)行的方法啟動(dòng)DSP,由于PROC組件被用于模擬DSP,首先要針對(duì)PROC進(jìn)行創(chuàng)建和初始化。
②PROC_attach(processorId,NULL)。在DSP端運(yùn)行之前,需要建立與GPP端通信的DSP的關(guān)聯(lián),其中指定的processorId為與之通信的DSP的編號(hào),防止ARM與多DSP通信時(shí)造成連接混亂。
③POOL_open(POOL_makePoolId(processorId,POOL_ID),&SamplePoolAttrs)。打開(kāi)共享內(nèi)存池,內(nèi)存緩沖區(qū)同樣需要一個(gè)ID來(lái)進(jìn)行不同的分工。SamplePoolAttrs用來(lái)指定緩沖區(qū)大小、buffer個(gè)數(shù)等屬性。
④MSGQ_open(SampleGppMsgqName,&SampleGppMsgq,NULL)。在進(jìn)行MSGQ通信之前的一個(gè)前提是處理器雙方都需要各自打開(kāi)一個(gè)消息隊(duì)列,每個(gè)消息隊(duì)列擁有各自的name,只有當(dāng)連接方提出的name與消息隊(duì)列的name相吻合的時(shí)候,消息隊(duì)列才得到建立。利用該API打開(kāi)消息隊(duì)列,SampleGppMsgqName指代的是GPP端消息隊(duì)列的name。
⑤PROC_load(processorId,(Char8*)&imageInfo,numArgs,args)。將編譯好的DSP程序載入DSP中,相關(guān)參數(shù)為DSP的編號(hào)、DSP可運(yùn)行程序名字、參數(shù)的個(gè)數(shù)和運(yùn)行參數(shù)。
⑥PROC_start(processorId)。開(kāi)始運(yùn)行編號(hào)為processorId的DSP。
⑦M(jìn)SGQ_locate(dspMsgqName,&SampleDspMsgq,&syncLocateAttrs)。等待需要建立的消息隊(duì)列打開(kāi)。由于通信時(shí)需要將一條消息隊(duì)列的兩個(gè)端口都關(guān)聯(lián)到指定的處理器,只有name為dspMsgqName的消息隊(duì)列一邊已經(jīng)打開(kāi)后,才能連接指定要連接的消息隊(duì)列,該消息隊(duì)列才真正建立起來(lái),并進(jìn)行通信。該接口函數(shù)與MSGQ_open相呼應(yīng)。syncLocateAttrs為指定等待的相關(guān)屬性,例如指定該屬性為syncLocateAttr s.timeout=WAIT_FOREVER時(shí),程序一旦運(yùn)行到此函數(shù)處,如果另一方處理器還沒(méi)有MSGQ_open的name為dspMsgqName的消息隊(duì)列,便會(huì)阻塞在此處,直到打開(kāi)為止。至此GPP端的消息隊(duì)列已經(jīng)完成設(shè)置,等待DSP端消息隊(duì)列的建立。
DSP端按如下順序開(kāi)通隊(duì)列:
①建立TASK任務(wù)。由于DSPLink是基于處理器兩端操作系統(tǒng)進(jìn)行的連接,因此,在DSP端同樣必須采用操作系統(tǒng)作為通信的媒介,采用DSP/BIOS操作系統(tǒng),以任務(wù)的形式運(yùn)行程序。
②創(chuàng)建和初始化MSGQ傳輸屬性。在進(jìn)行MSGQ的創(chuàng)建打開(kāi)之前,要先指定MSGQ的相關(guān)屬性。
③MSGQ_open((String)dspMsgQName,&info->localMsgq,&msgqAttrs)創(chuàng)建DSP端消息隊(duì)列,原理如同GPP端。
④MSGQ_locate(GPP_MSGQNAME,&info->locatedMsgq,&syncLocateAttrs)等待連接GPP端打開(kāi)的消息隊(duì)列,原理如同GPP端。
⑤當(dāng)GPP和DSP端消息隊(duì)列都建立完畢,并且關(guān)聯(lián),通信即建立,可以采用MSGQ_put和MSGQ_get發(fā)送和接收數(shù)據(jù)。
3 基于MSGQ雙核調(diào)試方案
MSGQ組件在實(shí)際的應(yīng)用中因其數(shù)據(jù)長(zhǎng)度的可變性,對(duì)DSP端應(yīng)用程序的調(diào)試提供了強(qiáng)大的解決方案。通過(guò)MSGQ的分析可以發(fā)現(xiàn),采用ARM和DSP端聯(lián)合,通過(guò)log打印的方式可以方便地對(duì)DSP端的運(yùn)行情況進(jìn)行一定的了解。
在GPP端和DSP端應(yīng)用程序中建立獨(dú)立線程和任務(wù)。由于只需要將DSP信息傳輸?shù)紾PP端而不需要GPP端的反饋信息,因此只需要設(shè)計(jì)單向傳輸,創(chuàng)建一條消息隊(duì)列即可。當(dāng)DSP端運(yùn)行到需要打印的信息時(shí),將消息暫存于指定的內(nèi)存空間,當(dāng)任務(wù)切換到調(diào)試任務(wù)時(shí),將暫存的消息發(fā)送到GPP端,GPP端接收到消息后在終端打印。調(diào)試建立流程如圖3所示。本文引用地址:http://www.ex-cimer.com/article/149121.htm
linux相關(guān)文章:linux教程
評(píng)論