##IAR下无法调试解决方案## 本文针对的情况是CC-Debugger调试线已经接好,用SmartRF Flash programmer可以编程。
但是用IAR IDE环境
的单步调试无法运行,出现下面情况的解决方法。
这明显是由于驱动文件匹配不正确导致的。
在win7下打开设备管理器,会看见Cebal Controlled devices里面有一个CC-Debugger。它对应的驱动在8051\drivers\Texas Instruments目录下面。有这些文件:
ref04eb.inf对应的是旧版的驱动2.0.0.0,这个才能在IAR下进行调试。而新版本的驱动只能用SmartRF进行下载。
##程序实例## 下面对Zigbee无线点对点的线透明传输程序进行调试。
<!-- lang: cpp -->
/**************************************************************************************************
* 函数名称:SerialApp_ProcessEvent
*
* 功能描述:用户应用层任务处理函数
*
* 参 数:task_id - 任务ID
* events - 当前需处理的事件
*
* 返 回 值:未处理的事件
**************************************************************************************************/
UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events )
{
(void)task_id;
if ( events & SYS_EVENT_MSG ) //用户层处理函数的系统事件
{
afIncomingMSGPacket_t *MSGpkt;
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) )
{
switch ( MSGpkt->hdr.event )
{
case ZDO_CB_MSG: //ZDO层收到新的任务信息回调处理事件
SerialApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;
case KEY_CHANGE: //按键事件
SerialApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
break;
case AF_INCOMING_MSG_CMD:
SerialApp_ProcessMSGCmd( MSGpkt ); //执行进来消息命令的回调函数
break;
default:
SerialApp_HandleKeys(0,11);//测试,默认就行发起绑定
}
osal_msg_deallocate( (uint8 *)MSGpkt );
}
return ( events ^ SYS_EVENT_MSG );
}
if ( events & SERIALAPP_SEND_EVT ) //串口发送请求,这里是指串口通过CC2530发送到另一个无线设备
{
SerialApp_Send();
return ( events ^ SERIALAPP_SEND_EVT );
}
if ( events & SERIALAPP_RESP_EVT ) //发送回复信息事件
{
SerialApp_Resp();
return ( events ^ SERIALAPP_RESP_EVT );
}
return ( 0 );
}
我自己加了SerialApp_HandleKeys(0,11),默认发起绑定。因为还没弄清楚Zstack的函数程序执行顺序,在这个处理函数的default中加入这句话进行自动绑定测试。
实测发现可以进行通信。但是一个存在的问题是,每次进入循环判断switch ( MSGpkt->hdr.event )时,如果没有其他事件,会再次发生绑定请求。还有待于进一步研究,最好是去除断电绑定这种机制,让它们全自动组网。