基站诊断工具——DSP开发小结

本文详细介绍了在爱立信实习期间参与的基站监测工具开发项目,重点讨论了DSP部分的功能实现,包括流量信息、数据信息、信号状态等的收集,以及PC端的监视和控制。通过socket通信和自定义协议进行DSP与PC间的交互,并在无PC应用时,DSP将信息记录在文件中。文中还阐述了进程间通信的基本操作,以及处理大量天线数据时采用的DMA技术和定时状态检查,确保数据有效性。此外,提到了文件ID创建时的加锁机制以及处理大体积数据的优化策略。

本篇日志记录了我在爱立信实习中参与的一个项目:基站监测与调试工具的开发。

WoD工具分为两部分,一部分是在DSP侧,实现在基站freescale的板子上,提供基站端的流量信息/数据信息/signal状态/内存信息等;另一部分是PC侧,负责监视。控制基站与显示,记录数据结果。两部分之间通过socket通信,在自己设计的数据包传输协议基础上交换信息。(在外场测试中,没有PC侧的应用,DSP侧应将各种信息或数据记录在文件中存储,需要时用脚本解析)。

相关代码主要为om_message.c

在DSP0的app.c中,appstart()调用om_init(),这个函数创建了几个低优先级的进程(为了保证基站端物理层处理的实时性,WoD相关的进程优先级都会设为最低的):

 

void om_init(void)
{
    om_pool_id = s_create_pool(0, (OSADDRESS)&om_pool_buf[krn_get_core_id()][0], OM_POOL_BUF_SIZE, omPoolSizes);
	
    pid_wod_send = create_process(OS_PRI_PROC, "wodSendProc", wodSendProc,
    		(OSADDRESS)4096, WOD_SEND_PRIORITY, 0, 0, 0, 0, 0);
    start(pid_wod_send);
    
    pid_wod_recv = create_process(OS_PRI_PROC, "wodRecvProc", wodRecvProc,
    		(OSADDRESS)4096, WOD_RECV_PRIORITY, 0, 0, 0, 0, 0);
    start(pid_wod_recv);	
    pid_log_to_file = create_process(OS_PRI_PROC,"logToFileProc",logToFileProc,
		    (OSADDRESS)4096, WOD_LOG_TO_FILE_PRIORITY, 0,0,0,0,0);
    start(pid_log_to_file);
    
    om_debug_log_init();
}

 

下面以通信最基本的send和recv操作来记录进程键通信的用法:

简洁起见,以记录小数据和天线数据(大量)到文件这两个功能为例,涉及到的操作有文件的建立,关闭和写入。

send进程等待信号并判断sig的action,根据action的类别来封装message各个字段内容。除了包头(dspID,coreID,fileID,packetID等)外,payload通过

memcpy(p + 9, sig->send_req.sendbuf, sig->send_req.sendlength);
来具体赋值,及sig中传入了sendbuf中有效信息,如文件名,天线数据等。PS:天线数据因为过大,是从bufpointer开始copy过来的。之后通过socket发送

 

err = ipcom_sendto(sockcli, sendbuf, sendsize, 0, (struct Ip_sockaddr *)&serveraddr, sizeof(serveraddr));
		free_buf(&sig);

OS_PROCESS(wodSendProc)
{
	S32 err;
	union SIGNAL *sig;
	static SIGSELECT sigsel[] = {1,SIG_SEND_REQ};

	U32 * p;
        struct msgHead* msg_p; 	
	U8 sendbuf[MAX_WOD_SEND_LENGTH];
#pragma align sendbuf 8
	U32 sendsize;
	
	Ip_fd_set readset;
	Ip_fd sockcli;
	
	sockcli = ipcom_socket(IP_AF_INET, IP_SOCK_DGRAM, 0);
	IP_FD_ZERO(&readset);
	IP_FD_SET(sockcli, &readset);	
	
	for(;;)
	{
		sig = receive
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值