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