在zstack协议栈简介的多个任务中,哪个层次的任务优先级最高

本文将以在GenericApp项目的基础上,一步一步地建立一个应用;需要实现的任务目标:1、使用Zigbee终端设备捕获串口中的字符“silverze” 。2、当Zigbee终端设备捕获到该字符串后,触发一个Zstack协议栈OSAL的任务消息 Get_Name。3、Zigbee终端设备在OSAL任务处理函数中处理Get_Name消息,并发送“Hello,silverze!”至协调器,协调器通过串口输出接收到Zigbee终端设备发送的内容。
步骤一:Zigbee终端设备捕获字符串
首先,我们要让cc2530的串口在Zstack中使用起来,这一步骤可以参照我之前写的。
Zstack串口能够正常使用起来后,我们新建两个文件Silverze.c、Silverze.h保存在..\GenericApp\source\文件夹下并添加到IAR工程App虚拟目录下。
在MT_UART.c文件中,有一个串口接收数据的回调函数:
void MT_UartProcessZToolData ( uint8 port, uint8 event ) ;为了减少对MT_UART.c文件的修改,我们将该回调函数指向到我们刚才新建立的Silverze.c文件中的函数:void Silverze_UartProcessZToolData ( uint8 port, uint8 event )。
具体的函数代码:
/***************************************************************************************************
Silverze_UartProcessZToolData
处理UART接收到的数据
- UART port
- Event that causes the callback
***************************************************************************************************/
void Silverze_UartProcessZToolData ( uint8 port, uint8 event )
uint8* str = "silverze";
// Intentionally unreferenced parameter
while (Hal_UART_RxBufLen(port))
HalUARTRead (port, &ch, 1);
if(ch == str[cnt])
if(cnt == strlen((char*)str))
HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );//加入板子上LED toggle,便于调试
Silverze_SendGetNamdeOverMsg(); //接收到"silverze",发送OSAL任务消息
如果一切顺利,我们通过串口助手,发送包含“silverze”的字符串,就能看到开发板上(这个需要特定的开发板,根据使用的板子决定吧!)的LED3 Toggle。
步骤二:触发一个自定义的OSAL任务消息
完成步骤二的内容,后我们可以的应用已经能够通过串口捕获想要捕获的字符串了,而且我也将发送OSAL消息的函数结构给调用了。但这里还只是一个空壳,在完成该函数前;我们要先在Silverze.c文件中编写一个应用注册函数,这个函数很简单:
uint8 registTaskID;
/***************************************************************************************************
Silverze_RegisterTaskID
注册该应用的任务ID
- 该应用任务的ID
***************************************************************************************************/
Silverze_RegisterTaskID( uint8 task_id )
registTaskID = task_
该函数会在GenericApp.c文件中的void GenericApp_Init( uint8 task_id )中调用,同时在Silverze.h文件中声明函数原型:
extern void
Silverze_RegisterTaskID( uint8 task_id );
我们在void GenericApp_Init( uint8 task_id )中调用上面的任务注册函数:
void GenericApp_Init( uint8 task_id )
GenericApp_TaskID = task_
GenericApp_NwkState = DEV_INIT;
GenericApp_TransID = 0;
MT_UartInit ();
GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrNotP
GenericApp_DstAddr.endPoint = 0;
GenericApp_DstAddr.addr.shortAddr = 0;
GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;
GenericApp_epDesc.task_id = &GenericApp_TaskID;
GenericApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&GenericApp_SimpleD
GenericApp_epDesc.latencyReq = noLatencyR
afRegister( &GenericApp_epDesc );
Silverze_RegisterTaskID( GenericApp_TaskID );
RegisterForKeys( GenericApp_TaskID );
#if defined ( LCD_SUPPORTED )
HalLcdWriteString( "GenericApp", HAL_LCD_LINE_1 );
ZDO_RegisterForZDOMsg( GenericApp_TaskID, End_Device_Bind_rsp );
ZDO_RegisterForZDOMsg( GenericApp_TaskID, Match_Desc_rsp );
#if defined( IAR_ARMCM3_LM )
RTOS_RegisterApp( task_id, GENERICAPP_RTOS_MSG_EVT );
还有两个小步骤需要完成:
a、在Silverze.h头文件中定义一个结构:
typedef struct
osal_event_hdr_
} getName_t;
b、在comdef.h中定义宏
#define GET_NAME
//串口获取到指定字符串事件
这里我们为什么要定义GET_NAME为0xE1呢?在ZComdef.h头文件中,我发现有很多系统消息被使用了,而且Zstack提示:
所以,我们可以定义自己的应用消息范围0xE0 - 0xFC!
好了,现在准备开始编写Silverze_SendGetNamdeOverMsg( )函数的内容:
/***************************************************************************************************
Silverze_SendGetNamdeOverMsg
发送从串口接收到指定数据后的消息给OSAL应用层
***************************************************************************************************/
static void Silverze_SendGetNamdeOverMsg( void )
getName_t *msgP
msgPtr = (getName_t *)osal_msg_allocate( sizeof(getName_t) );//为带发送的消息指针申请内存空间
if(msgPtr)
msgPtr-&hdr.event = GET_NAME;
msgPtr-&name = "silverze";
osal_msg_send( registTaskID, (uint8 *)msgPtr); //将消息发给OSAL应用层
至此,我们已经将从串口捕获到指定字符串“silverze”的自定义应用消息发送给了GenericApp这个任务,接下来的事情就是到uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )函数中处理该应用消息了!
怎么样快速,确定我们上面的工作已经OK了?方法很简单啦,之前我们不是弄了一个LED灯来作为我们程序运行的指示吗。现在只要将之前在void Silverze_UartProcessZToolData ( uint8 port, uint8 event )中的
HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );
注释掉,并移动到uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )函数中,而其捕捉到串口字符串后,我们还能看到相同的实验现象。
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
if ( events & SYS_EVENT_MSG )
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
while ( MSGpkt )
switch ( MSGpkt-&hdr.event )
case ZDO_CB_MSG:
GenericApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
case GET_NAME:
HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );
步骤三:发送数据给协调器
利用Zstack将数据发送出去,只需将终端设备、协调器建立连接后;调用
AF_DataRequest() 函数即可发送数据
根据该函数的参数,在GenericApp.c文件中定义目标地址类型参数,修改簇数组:
const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] =
GENERICAPP_CLUSTERID,
SILVERZE_CLUSTERID
afAddrType_t Silverze_DstA
在GenericApp.h 增加一个簇 #define SILVERZE_CLUSTERID
并将簇的最大值修改为对应大小,以及在将簇数组初始化。
#define GENERICAPP_MAX_CLUSTERS
2 //增加一个簇 SILVERZE_CLUSTERID
#define GENERICAPP_CLUSTERID
#define SILVERZE_CLUSTERID
在void GenericApp_Init( uint8 task_id )函数中,初始化Silverze_DstAddr:
Silverze_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent
Silverze_DstAddr.endPoint = 1
Silverze_DstAddr.addr.shortAddr = 0
接下来定义一个发送数据的函数,在该函数中调用AF_DataRequest()实现数据发送。
static void GenericApp_SendSilverzeMsg(
char* name )
char hello[] = "Hello,";
char* say_hello = strcat( hello, name );
if ( AF_DataRequest( &Silverze_DstAddr, &GenericApp_epDesc,
SILVERZE_CLUSTERID,
strlen(say_hello) + 1,
(uint8*)say_hello,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
程序编写至此;我本以为在uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )函数中的switch-case语句中进行调用、发送即可:
case AF_INCOMING_MSG_CMD:
GenericApp_MessageMSGCB( MSGpkt );
case GET_NAME:
GenericApp_SendSilverzeMsg( ((getName_t*)MSGpkt)-&name );
当然, GenericApp_MessageMSGCB( MSGpkt ) 函数已经修改成如下:
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
switch ( pkt-&clusterId )
case GENERICAPP_CLUSTERID:
#if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt-&cmd.Data, "rcvd" );
#elif defined( WIN32 )
WPRINTSTR( pkt-&cmd.Data );
printf("绑定成功后,接收到周期数据!\n");
case SILVERZE_CLUSTERID:
HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );
printf("%s\n", pkt-&cmd.Data);
此时,调试程序;发现ZStack触发不了 AF_INCOMING_MSG_CMD事件,后面想起该GenericApp需要操作开发板上按键,才能进行终端与协调绑定,建立连接。这里为了减少硬件的差异,我就让终端启动完成后,自动发起绑定请求,在uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )函数中添加下面代码:
if ( events & GENERICAPP_SEND_MSG_EVT )
if(cnt == 0)
dstAddr.addrMode = Addr16B
dstAddr.addr.shortAddr = 0x0000; // Coordinator
ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
GenericApp_epDesc.endPoint,
GENERICAPP_PROFID,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
步骤四:协调器接收接收数据后,串口打印
完成,上面终端设备与协调器绑定后,且 AF_INCOMING_MSG_CMD事件的处理函数GenericApp_MessageMSGCB对应的SILVERZE_CLUSTERID簇id打印接收到的数据即可实现了。
本文已收录于以下专栏:
相关文章推荐
这段时间研究TCP/IP协议,用于单片机通信。昨天为止,基本实现了基础通信(ARP,UDP,ICMP_Ping,TCP)。
1,ARP主动,被动可以实现,但是要知道一般基于路由器下的主机,无论ARP...
数据传输的基本功能:两个Zigbee节点进行点对点通信,Zigbee节点2发送&LED&三个字符,Zigbee节点1收到数据后,对接收到的数据进行判断,如果收到的数据是&LED&,则使开发板上的LED...
ZStack OSAL的事件(event)与消息(message)——part1
本文转载自:http://blog.csdn.net/ceci_zhou/article/details/978734...
一、JAVA编码转换的详细过程我们常见的JAVA程序包括以下类别:  *直接在console上运行的类(包括可视化界面的类)  *JSP代码类(注:JSP是Servlets类的变型)  *Servel...
一、JAVA编码转换的详细过程
我们常见的JAVA程序包括以下类别:
  *直接在console上运行的类(包括可视化界面的类)
  *JSP代码类(注:JSP是Servlets类的变型)
BLE 协议栈中对于触发任务事件大可分为三种方式:
1 通过设置一个“软件定时器”,当其溢出时触发事件。osal_start_timerEx()—osalTimerUpdate()— osal_set...
TI的蓝牙4.0BLE协议栈为BLE-CC254x-1.4.0,即现在的版本是1.4版本的。可以从TI官方下载或从附件中下载安装,默认是安装在C盘中。因为上一篇博文提到进行空中固件升级,当时没有安装在...
Zigbee协议栈OSAL层API函数 ( 21:18)
ZigBee 技术学习
        OSAL层提供了很多的API来对整个的协议...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)热销排行榜
1.2.3.4.5.6.7.8.9.10.
最近浏览的其他商品
浏览更多同类商品
【 】??????????
物联网平台开发及应用-基于CC2530和ZigBee
978-7-121-29816-5
电子工业出版社
出版日期:
读者对象:
¥42.50&&&
立刻节省:¥16.50
所属分类:
本书是一本由浅入深对物联网系统进行开发的书籍,全书采用任务式开发的学习方法,共积累了近50生
动有趣、贴近生活的案例,每个案例均有完整的开发过程,分别是明确的学习目标、清晰的环境开发要求、
深入浅出的原理学习、详细的开发内容和完整的开发步骤,最后得出任务结论,引导读者一步一步轻松完成
理论学习,并将理论学习用于开发实践进行验证,避免的枯燥的理论学习,强调理论与实践的有机结合,全书
配套了相应的源代码,在书本源代码的基础可以进行快速二次开发。
该书按照知识点分类,分为入门篇、基础开发篇和云平台开发篇,将嵌入式系统的开发技术、处理器基
本接口驱动、传感器驱动、无线射频技术、Android移动互联网开发和云平台用一种通信协议结合在一起,实
现了强大的物联网数据采集、传输和处理,能适用在多个行业的应用。
本书既可作为高等院校相关专业师生的教材或教学参考书,也可供相关领域的工程技术人员查阅,对于
物联网系统开发爱好者,本书也是一本深入浅出、生动有趣、贴近生活的技术读物。
廖建尚,男,副教授,毕业于广东工业大学通信与信息系统专业,硕士,先任职于广东交通职业技术学院。长期从事物联网技术的开发和教学工作。
入门篇第1章
物联网开发硬件与软件31.1
任务1:认识物联网31.1.1
物联网31.1.2
国外物联网41.1.3
国内物联网51.1.4
物联网重点领域61.1.5
国外物联网发展重点方向和机遇71.2
任务2:认识物联网开发硬件81.2.1
物联网开发硬件――TI CC2530处理器81.2.2
CC2530无线节点91.2.3
跳线设置及硬件连接91.2.4
CC2530无线节点硬件资源11第2章
物联网开发环境搭建152.1
任务3:物联网开发环境搭建152.1.1
学习目标152.1.2
开发环境152.1.3
原理学习152.1.4
开发步骤152.2
任务4:创建第一个IAR应用程序182.2.1
创建工程182.2.2
工程设置222.2.3
IAR程序的下载与调试252.2.4
下载hex文件29第2篇
基础开发篇第3章
CC2530外围接口项目开发353.1
任务5:LED控制353.1.1
学习目标353.1.2
开发环境353.1.3
原理学习353.1.4
开发内容373.1.5
开发步骤383.2
任务6:外部中断383.2.1
学习目标383.2.2
开发环境393.2.3
原理学习393.2.4
开发内容403.2.5
开发步骤413.3
任务7:定时器423.3.1
学习目标423.3.2
开发环境423.3.3
原理学习423.3.4
开发内容443.3.5
开发步骤453.4
任务8:串口453.4.1
学习目标453.4.2
开发环境463.4.3
原理学习463.4.4
开发内容483.4.5
开发步骤503.5
任务9:ADC采集513.5.1
学习目标513.5.2
开发环境513.5.3
原理学习513.5.4
开发内容523.5.5
开发步骤533.6
任务10:休眠与唤醒543.6.1
学习目标543.6.2
开发环境553.6.3
原理学习553.6.4
开发内容553.6.5
开发步骤583.7
任务11:看门狗583.7.1
学习目标583.7.2
开发环境583.7.3
原理学习593.7.4
开发内容593.7.5
开发步骤603.8
任务12:DMA613.8.1
学习目标613.8.2
开发环境613.8.3
原理学习613.8.4
开发内容613.8.5
开发步骤64第4章
传感器开发项目654.1
任务13:光敏传感器654.1.1
学习目标654.1.2
开发环境654.1.3
原理学习654.1.4
开发内容654.1.5
开发步骤674.1.6
任务结论674.2
任务14:温/湿度传感器674.2.1
学习目标674.2.2
开发环境674.2.3
原理学习674.2.4
开发内容694.2.5
开发步骤714.2.6
任务结论714.3
任务15:雨滴/凝露传感器714.3.1
学习目标714.3.2
开发环境724.3.3
原理学习724.3.4
开发内容724.3.5
开发步骤734.3.6
任务结论744.4
任务16:火焰传感器744.4.1
学习目标744.4.2
开发环境744.4.3
原理学习744.4.4
开发内容754.4.5
开发步骤764.4.6
任务结论764.5
任务17:继电器传感器764.5.1
学习目标764.5.2
开发环境774.5.3
原理学习774.5.4
开发内容784.5.5
开发步骤794.5.6
任务结论794.6
任务18:霍尔传感器794.6.1
学习目标794.6.2
开发环境794.6.3
原理学习804.6.4
开发内容814.6.5
开发步骤814.6.6
任务结论824.7
任务19:超声波测距传感器824.7.1
学习目标824.7.2
开发环境824.7.3
原理学习824.7.4
开发内容834.7.5
开发步骤854.7.6
任务结论854.8
任务20:人体红外传感器854.8.1
学习目标854.8.2
开发环境854.8.3
原理学习854.8.4
开发内容864.8.5
开发步骤874.8.6
任务结论884.9
任务21:可燃气体/烟雾传感器884.9.1
学习目标884.9.2
开发环境884.9.3
原理学习884.9.4
开发内容894.9.5
开发步骤904.9.6
任务结论914.10
任务22:空气质量传感器914.10.1
学习目标914.10.2
开发环境914.10.3
原理学习914.10.4
开发内容924.10.5
开发步骤924.10.6
任务结论924.11
任务23:三轴传感器934.11.1
学习目标934.11.2
开发环境934.11.3
原理学习934.11.4
开发内容954.11.5
开发步骤994.11.6
任务结论994.12
任务24:压力传感器994.12.1
学习目标994.12.2
开发环境994.12.3
原理学习1004.12.4
开发内容1024.12.5
开发步骤1054.12.6
任务结论1054.13
任务25:RFID读写1054.13.1
学习目标1054.13.2
开发环境1054.13.3
原理学习1054.13.4
开发内容1094.13.5
开发步骤1174.13.6
任务结论117第5章
无线射频开发项目1195.1
任务26:点对点通信1195.1.1
学习目标1195.1.2
开发环境1195.1.3
原理学习1195.1.4
开发内容1195.1.5
开发步骤1225.1.6
任务结论1235.2
任务27:广播通信1235.2.1
学习目标1235.2.2
开发环境1235.2.3
原理学习1235.2.4
开发内容1235.2.5
开发步骤1265.2.6
任务结论1275.3
任务28:信道监听1275.3.1
学习目标1275.3.2
开发环境1275.3.3
原理学习1275.3.4
开发内容1285.3.5
开发步骤1305.3.6
任务结论1315.4
任务29:无线控制1315.4.1
学习目标1315.4.2
开发环境1315.4.3
原理学习1325.4.4
开发内容1325.4.5
开发步骤1345.4.6
任务结论135第6章
ZStack协议栈开发1376.1
任务30:认识ZStack协议栈1376.1.1
ZStack的安装1376.1.2
ZStack的结构1386.1.3
设备的选择1406.1.4
定位编译选项1416.1.5
ZStack中的寻址1426.1.6
ZStack中的路由1446.1.7
OSAL调度管理1446.1.8
ZStack的串口通信1456.1.9
配置信道1466.2
任务31:ZStack协议栈工程解析1476.2.1
学习目标1476.2.2
开发环境1476.2.3
原理学习1476.3
任务32:多点自组织组网1616.3.1
学习目标1616.3.2
预备知识1616.3.3
开发环境1616.3.4
原理学习1616.3.5
开发内容1636.3.6
开发步骤1666.3.7
任务结论1686.4
任务33:信息广播/组播1686.4.1
学习目标1686.4.2
预备知识1686.4.3
开发环境1686.4.4
原理学习1686.4.5
开发内容1696.4.6
开发步骤1726.4.7
任务结论1736.5
任务34:网络拓扑―星状网1746.5.1
学习目标1746.5.2
预备知识1746.5.3
开发环境1746.5.4
原理学习1746.5.5
开发内容1746.5.6
开发步骤1786.5.7
任务结论1786.6
任务35:网络拓扑―树状网1796.6.1
学习目标1796.6.2
预备知识1796.6.3
开发环境1796.6.4
原理学习1796.6.5
开发内容1796.6.6
开发步骤1826.6.7
任务结论1836.7
任务36:ZigBee串口应用1836.7.1
学习目标1836.7.2
预备知识1846.7.3
开发环境1846.7.4
原理学习1846.7.5
开发内容1846.7.6
开发步骤1866.7.7
任务结论1876.8
任务37:ZigBee协议分析1876.8.1
学习目标1876.8.2
预备知识1876.8.3
开发环境1876.8.4
原理学习1886.8.5
开发内容1896.8.6
开发步骤1916.8.7
任务结论1926.9
任务38:ZigBee绑定1936.9.1
学习目标1936.9.2
预备知识1936.9.3
开发环境1936.9.4
原理学习1936.9.5
开发内容1946.9.6
开发步骤1966.9.7
任务结论197第7章
物联网开发综合项目1997.1
任务39:物联网平台控制操作2007.1.1
准备开发环境2007.1.2
启动程序2007.1.3
搜索网络2017.1.4
传感器节点操作2027.2
任务40:智能网关程序2047.2.1
智能网关程序框架2047.2.2
智能网关服务程序解析2057.3
任务41:节点间通信协议2127.3.1
应用层通信协议解析2127.3.2
串口通信协议解析2147.3.3
协议栈通信协议解析2177.4
任务42:Android控制程序2187.4.1
Android用户控制程序框架2187.4.2
导入Android用户控制程序2267.5
任务43:ZigBee节点控制程序2287.5.1
节点工程介绍2297.5.2
传感器介绍2307.5.3
传感器底层代码解析2317.6
任务44:添加自定义传感器节点2397.6.1
定义节点间通信协议2397.6.2
编写传感器节点程序2397.6.3
编写Android界面控制程序244第3篇
云平台开发篇第8章
云平台项目开发2538.1
任务45:智云物联开发基础2548.1.1
智云物联平台介绍2548.1.2
智云物联基本框架和常用硬件2548.1.3
智云物联案例2558.1.4
开发前准备工作2568.2
任务46:智云平台基本使用2568.2.1
学习目标2568.2.2
开发环境2568.2.3
原理学习2568.2.4
开发内容2578.2.5
开发步骤2628.2.6
任务结论2678.3
任务47:通信协议2678.3.1
学习目标2678.3.2
开发环境2678.3.3
原理学习2678.3.4
开发内容2728.3.5
开发步骤2738.3.6
任务结论2758.4
任务48:智云硬件驱动开发2758.4.1
学习目标2758.4.2
开发环境2768.4.3
原理学习2768.4.4
开发内容277<b
客服专线:010- 客服邮箱:
Copyright & 北发图书网 2007,
All Rights Reserved
北京北发电子商务股份有限公司 版权所有请教Zstack2.5.1a休眠配置后并且App层里没任何定时任务,为啥还是有每秒一次是闪灯? - ZigBee技术 - 德州仪器在线技术支持社区
请教Zstack2.5.1a休眠配置后并且App层里没任何定时任务,为啥还是有每秒一次是闪灯?
发表于2年前
<input type="hidden" id="hGroupID" value="43"
VV大神,能帮忙解答这个疑问吗?量了电流,有段时间是1点多uA,有个瞬间是12mA的变动,就是闪灯引起的吧,闪灯就是休眠被唤醒了。为什么呢?大概每秒闪一下。奇怪了,是那个系统任务影响的?&/p>&div style=&clear:&>&/div>" />
请教Zstack2.5.1a休眠配置后并且App层里没任何定时任务,为啥还是有每秒一次是闪灯?
此问题尚无答案
All Replies
VV大神,能帮忙解答这个疑问吗?量了电流,有段时间是1点多uA,有个瞬间是12mA的变动,就是闪灯引起的吧,闪灯就是休眠被唤醒了。为什么呢?大概每秒闪一下。奇怪了,是那个系统任务影响的?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1155分
try to change this setting,
/* The number of milliseconds to wait between data request polls to the coordinator. */-DPOLL_RATE=1000
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
从这句话来看,好像是修改节点向协调器的数据请求时间间隔,这样理解对吗?还有,这个设置做什么用?节点还得每秒对协调器做数据请求?把这个值调多大合适,我试过调成0,结果还是一样,还是每秒闪灯一次。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元74045分
这是调整轮询时间的,就是终端每隔一段时间向协调器轮询一次看有没有发送数据。设置为0节点就不会向协调器查询数据了。你DQUEUED_POLL_RATE,DRESPONSE_POLL_RATE设置的多少?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
都是设置为0了,还是一样的结果,每秒闪一次
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元55981分
把按键改成中断方式
ISR_KEY_INTERRUPT
如果要上传ZigBee Sniffer Log,请把文件另外为psd或者cubx文件,用附件方式上传,不要使用截图没有任何作用。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
我的按键中断是在OnBorad.c文件里把InitBoard函数里HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);这句换成HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);来的,没找到ISR_KEY_INTERRUPT这个宏或变量。请问又是如何设置的呢?设置按键为中断模式为什么能解决掉休眠问题?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1155分
void InitBoard( uint8 level ){ if ( level == OB_COLD ) { // IAR does not zero-out this byte below the XSTACK. *(uint8 *)0x0 = 0; // Interrupts off osal_int_disable( INTS_ALL ); // Check for Brown-Out reset ChkReset(); } else // !OB_COLD { /* Initialize Key stuff */ #if defined (ISR_KEYINTERRUPT) HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE , OnBoard_KeyCallback); #else HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback); #endif }}
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
谢谢回复,这个修改和我的修改是一样的,但,还是没能解决每秒醒来一次的问题。还有哪里要注意的呢?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
举人1155分
1. Maybe you can search all&osal_start_timerEx() API of your project to check it?
2. Why don&#39;t your use the new zstack like home 1.2.2? It may solve your problem.
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
can using home 1.2.2?
I have try search, and I find the code&as follow
/************************************************************************************************** * @fn halProcessKeyInterrupt * * @brief Checks to see if it&#39;s a valid key interrupt, saves interrupt driven key states for * processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later. * * @param * * @return **************************************************************************************************/void halProcessKeyInterrupt (void){ bool valid=FALSE;
if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT) /* Interrupt Flag has been set */ { HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */ valid = TRUE; } if (HAL_KEY_SW_7_PXIFG & HAL_KEY_SW_7_BIT) /* Interrupt Flag has been set */ { HAL_KEY_SW_7_PXIFG = ~(HAL_KEY_SW_7_BIT); /* Clear Interrupt Flag */ valid = TRUE; }
if (HAL_KEY_JOY_MOVE_PXIFG & HAL_KEY_JOY_MOVE_BIT) /* Interrupt Flag has been set */ { HAL_KEY_JOY_MOVE_PXIFG = ~(HAL_KEY_JOY_MOVE_BIT); /* Clear Interrupt Flag */ valid = TRUE; }
if (valid) { osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE); }}
This looks like the interrupt handler, if removing key&interrupt can&solve the problem?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元55981分
每隔1s醒来是不是你的POLL_RATE=1000
如果要上传ZigBee Sniffer Log,请把文件另外为psd或者cubx文件,用附件方式上传,不要使用截图没有任何作用。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
这个设置0的话,是不起作用的,但是修改成10000,10秒的值,可以把每秒起来改成10秒,起作用。可是这样是否就会导致子节点取父节点数据时间间隔变大,会丢失在休眠期间发给子节点的数据呢?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元55981分
是的,默认父设备为子设备保存数据的时间是7.5s,所以10秒的话,数据在父节点就丢弃了。
如果要上传ZigBee Sniffer Log,请把文件另外为psd或者cubx文件,用附件方式上传,不要使用截图没有任何作用。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
现在有个需求疑问就是一个纽扣电池100mA/h的,能让低功耗状态下的跑多久呢?并如何在协议栈代码里设置?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.

我要回帖

更多关于 zstack协议栈 的文章

 

随机推荐