OMAPL138双核系统的调试方案设计
3.1 DSP端
(4)释放内存
释放内存主要采用MSGQ_release(DebugMsgq),进行消息队列的释放。
3.2 GPP端
GPP端的消息结构与DSP端相同。
(3)释放内存
主要采用MSGQ_Close(GppMsgq);释放建立的消息队列。
根据图3,在DSP端,首先需要建立调试打印任务并且为所需要传输的log长度分配内存空间,随后在log发送端初始化中进行MSGQ的定位MSGQ_locate(),通过定位将指定连接DSP与GPP端的消息传输队列。消息就通过此队列进行传输,采用MSGQ_put()将DSP端的调试信息发送到GPP端。在多次传输调试信息后,占用过多的内存空间会导致内存泄露。为防止这种状况的发生,要在传输完毕后进行空间的释放,在下次传输时再重新创建。虽然这会影响到传输时间,但是为了内存空间更加便利安全的管理,在传输结束后应立即释放。
在GPP端,为了使MSGQ调试程序与主程序的运行互不干扰,创建单独线程进行调试使用。在接收内存空间分配好后,采用MSGQ_open()打开已经创建的MSGQ,使用MSGQ_get()消息接收。在接收完调试信息后,可以直接利用printf将调试信息通过串口打印在调试工具上。GPP端打印完成后,同样需要对分配内存空间进行释放。至此完成调试。
该调试方法同样存在着缺陷:DSP端正在运行的任务无法直接显示消息,需要将消息暂存,随后进行任务切换传输,因此无法即时进行调试信息的显示。但对于开发者来说,常常只是需要知道变量的数值或者程序运行的进度,所以此缺陷不会成为影响调试的大障碍,可以接受。
4 测试验证
采用DVSDK中提供的exanlple进行更改,更改上述调试模块,对MSGQ的双核调试信息进行测试,打印出通过与EMIFA相连接的LED的值,如图4所示。
采用insmod dsplinkk.ko将编译好的内核模块加载进系统中,然后利用GPP端应用程序载入DSP端应用,在DSP端中,将string为“led test reg=”作为msg->str参数,将控制LED的寄存器作为arg[]参数,传入GPP端打印出来。
结语
本文针对OMAP双核体系分析了在TI双核体系中双核进行通信的方式,又分析了DVSDK中双核通信底层模块DSPLink在Linux操作系统中的搭建和以MSGQ通信时的过程。双核体系硬件拟合性好,功耗低,有很好的应用前景。针对的双核开发过程中调试难的特点设计了log打印的调试方式,在实际的应用中有较大的意义。
- 基于XML技术的考试阅卷系统方案设计(10-30)
- 基于单片机的智能家居安防系统方案设计(10-14)
- 基于CAN总线的电梯外呼系统方案设计(10-06)
- 基于Virtex-5 FPGA的音视频监视系统方案设计(10-06)
- 基于单片机的智能家居安防系统的方案设计(09-26)
- 基于OuartusⅡ和GW48EDA开发工具的电子抢答器方案设计(09-16)