将程序缕了下,大体分析如下:
1 看Access端:
main进去后初始化,通过SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr) 函数 设置本机地址,然后通过函数SMPL_Init(sCB)初始化;sCB为一回调函数,通过判断lid分辨sPeerFrameSem还是sJoinSem,主循环中分别判断sPeerFrameSem与sJoinSem,如果是sJoinSem,则通过SMPL_LinkListen(&sLID[sNumCurrentPeers]) 进行监听,如果是sPeerFrameSem,则为收到一帧数据,于是通过调用SMPL_Receive(sLID, msg, &len) 进行接收。收完后通过SMPL_Ioctl(IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_SIGINFO, (void *)&sigInfo)进行设置。然后通过串口上传至PC机。
大体上就是这么个过程吧。
2 看END 端: main进去后初始化单片机后,通过 SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr)设置,这个与上同。初始化后跟着while (SMPL_NO_JOIN == SMPL_Init((uint8_t (*)(linkID_t))0))一直等待连接。连接上后,通过“ SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_SLEEP, "" ); __bis_SR_register(LPM3_bits+GIE); // LPM3 with interrupts enabled SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_AWAKE, "" ); ” 进行设置(不同在先设置IOCTL_ACT_RADIO_SLEEP,然后使能中断,然后IOCTL_ACT_RADIO_AWAKE),跟Access不同的是,Access端设置的是IOCTL_ACT_RADIO_SIGINFO。具体的还不清楚这几个分别是什么的。如果有数据需要发送,则通过调用SMPL_Send(linkID1, msg, sizeof(msg))这个函数 将数据发送出去。
程序相对来说并不复杂,与RF相关的都是以SMPL开头的几个函数,查了下含在#include "nwk_api.h" 中,以库的形式出现的,并未有函数原型。又从网上找了下相关的解释:
/* Initialization – smplStatus_t SMPL_Init(uint8_t (*callback)(linkID_t)); ? Linking – smplStatus_t SMPL_Link(linkID_t *linkID); – smplStatus_t SMPL_LinkListen(linkID_t *linkID); ? Peer-to-peer messaging – smplStatus_t SMPL_Send(lid, *msg, len); – smplStatus_t SMPL_Receive(lid, *msg, *len); ? Configuration – smplStatus_t SMPL_Ioctl(object, action, *val); ? API calls are synchronous – Do not return until operation is complete */
程序稍整理了下,传上来了,摘出了本身AD采集的,与RF相关的 就很明了了,就那些。
[ 本帖最后由 sblpp 于 2010-11-26 08:22 编辑 ] |