Zstack杂乱笔记1

scikit-image图像处理实战:科研与工业级预处理指南 图像处理是计算机视觉和数据分析的基础环节,其核心在于将原始图像转化为机器可读、分析可靠、流程可复现的数据形态。从X光去伪影、显微图像背景校正,到工业缺陷增强与多光谱对齐,关键不在于滤镜堆砌,而在于对曝光校正、形态学操作、频域滤波等底层原理的精准控制。scikit-image凭借基于NumPy的科学计算设计、CIE标准色彩空间支持及模块化算法分层(如exposure、restoration、segmentation),成为连接图像物理本质与AI模型输入的理想桥梁。本文聚焦真实工程场景中的预处理链路构建、参数可 阅读详情

    我看的代码条理不清,东一棒槌,西一榔头。惭愧。

       1. DMA方式与ISR方式的UART传输,有什么区别?分别如何实现?

  2. ZDO_CB_MSG与AF_INCOMING_MSG_CMD等事件的产生机制?
  3. 如何完成“多对一”或者“一对多”的通信?
  4. 绑定表的存储位置与生命周期?


一个设备可以有240个端点,每个端点必须有一个端点描述符endPointDesc,端点描述符里包括一个简单描述符。在看Zstack的例子时应该详细看一下应用层,3个文件,SerialApp.h SerialApp.c OSAL_SerialApp.c

端点描述符结构:

typedef struct
{
  byte endPoint;
  byte *task_id;  // Pointer to location of the Application task ID.
  SimpleDescriptionFormat_t *simpleDesc;
  afNetworkLatencyReq_t latencyReq;  //延时请求
} endPointDesc_t;

//初始化后的一个端点描述符结构

const endPointDesc_t SerialApp_epDesc =
{
  SERIALAPP_ENDPOINT,
 &SerialApp_TaskID,
  (SimpleDescriptionFormat_t *)&SerialApp_SimpleDesc,
  noLatencyReqs
};

简单描述符的结构

typedef struct
{
  byte          EndPoint;     //端点号1-240
  uint16        AppProfId;     //支持的Profile ID
  uint16        AppDeviceId; //支持的设备ID
  byte          AppDevVer:4; //执行的设备描述的版本
  byte          Reserved:4;             // AF_V1_SUPPORT uses for AppFlags:4.
  byte          AppNumInClusters; //终端支持的输入簇数目
  cId_t         *pAppInClusterList; //指向输入Cluster ID列表的指针
  byte          AppNumOutClusters;//终端支持的输出簇数目
  cId_t         *pAppOutClusterList;//指向输出Cluster ID列表的指针
} SimpleDescriptionFormat_t;

//初始化后的一个简单描述符结构

const SimpleDescriptionFormat_t SerialApp_SimpleDesc =
{
  SERIALAPP_ENDPOINT,              //  int   Endpoint;
  SERIALAPP_PROFID,                //  uint16 AppProfId[2];
  SERIALAPP_DEVICEID,              //  uint16 AppDeviceId[2];
  SERIALAPP_DEVICE_VERSION,        //  int   AppDevVer:4;
  SERIALAPP_FLAGS,                 //  int   AppFlags:4;
  SERIALAPP_MAX_CLUSTERS,          //  byte  AppNumInClusters;
  (cId_t *)SerialApp_ClusterList,  //  byte *pAppInClusterList;
  SERIALAPP_MAX_CLUSTERS,          //  byte  AppNumOutClusters;
  (cId_t *)SerialApp_ClusterList   //  byte *pAppOutClusterList;
};

AF.c 中的afStatus_t afRegister( endPointDesc_t *epDesc ),//在AF层注册该端口描述符。

只有分别在两个节点的简单描述结构体中,同时注册了相同的命令标示符并且方向相反才能建立绑定。

SerialApp_TxBuf[0]存放的是发送的序列号SerialApp_TxSeq,即通过串口发送的数据SerialApp_TxBuf,是从SerialApp_TxBuf[1]开始的,同样接收数组SerialApp_RxBuf[0]存放的是接收的序列号SerialApp_RxSeq,为什么会这样?

其实这里加了个保险措施,其实就是发送设备将发送序列号加在数据中一块发送,接收设备接收到数据后,将发送序列号回传给发送设备,发送设备将该序列号和发送时的序列号比较一下,如果相等则说明数据发送成功。

通过上面的分析可知,接收设备收到数据后,将接数据有关的状态以及接收序列号(其实就是发送设备的发送序列号)等信息放在一个4字节的数组里面,然后将该数组发送给发送设备。

发送设备接收到接收设备回传的响应信息后,将发送序列号和接收序列号比较,如果相等,则说明原来的数据发送成功了。

参考http://www.feibit.com/forum.php?mod=viewthread&tid=2928

代码分析:

void SerialApp_Init( uint8 task_id )
{
  halUARTCfg_t uartConfig;


  SerialApp_TaskID = task_id;
  SerialApp_RxSeq = 0xC3;//不知为何????
   //在AF层注册该端口描述符
  afRegister( (endPointDesc_t *)&SerialApp_epDesc );

//按键事件交给本任务处理
  RegisterForKeys( task_id );

//串口配置
  uartConfig.configured           = TRUE;              // 2x30 don't care - see uart driver.
  uartConfig.baudRate             = SERIAL_APP_BAUD;
  uartConfig.flowControl          = FALSE;
  uartConfig.flowControlThreshold = SERIAL_APP_THRESH; // 2x30 don't care - see uart driver.
  uartConfig.rx.maxBufSize        = SERIAL_APP_RX_SZ;  // 2x30 don't care - see uart driver.
  uartConfig.tx.maxBufSize        = SERIAL_APP_TX_SZ;  // 2x30 don't care - see uart driver.
  uartConfig.idleTimeout          = SERIAL_APP_IDLE;   // 2x30 don't care - see uart driver.
  uartConfig.intEnable            = TRUE;              // 2x30 don't care - see uart driver.
  uartConfig.callBackFunc         = SerialApp_CallBack;//回调函数
  HalUARTOpen (SERIAL_APP_PORT, &uartConfig);


#if defined ( LCD_SUPPORTED )
  HalLcdWriteString( "SerialApp", HAL_LCD_LINE_2 );
#endif
  //注册节点绑定响应事件和匹配描述符响应事件
  ZDO_RegisterForZDOMsg( SerialApp_TaskID, End_Device_Bind_rsp );
  ZDO_RegisterForZDOMsg( SerialApp_TaskID, Match_Desc_rsp );
#if defined (ZDO_COORDINATOR)//有三种设备不知怎样定义????
  HalUARTWrite(SERIAL_APP_PORT,szWelcomeMsgCoor,sizeof(szWelcomeMsgCoor));
#else
  HalUARTWrite(SERIAL_APP_PORT,szWelcomeMsgRouter,sizeof(szWelcomeMsgRouter));
#endif


}

#define End_Device_Bind_rsp     (End_Device_Bind_req | ZDO_RESPONSE_BIT)

#define End_Device_Bind_req     ((uint16)0x0020)

#define ZDO_RESPONSE_BIT        ((uint16)0x8000)

#define Match_Desc_rsp          (Match_Desc_req | ZDO_RESPONSE_BIT)

#define Match_Desc_req          ((uint16)0x0006)

/*********************************************************************
 * @fn          ZDO_RegisterForZDOMsg
 *
 * @brief       Call this function to register of an incoming over
 *              the air ZDO message - probably a response message
 *              but requests can also be received.
 *              Messages are delivered to the task with ZDO_CB_MSG
 *              as the message ID.
 *
 * @param       taskID - Where you would like the message delivered
 * @param       clusterID - What message?
 *
 * @return      ZSuccess - successful, ZMemError if not
 */
ZStatus_t ZDO_RegisterForZDOMsg( uint8 taskID, uint16 clusterID )
{
  ZDO_MsgCB_t *pList;
  ZDO_MsgCB_t *pLast;
  ZDO_MsgCB_t *pNew;

  // Look for duplicate
  pList = pLast = zdoMsgCBs;
  while ( pList )
  {
    if ( pList->taskID == taskID && pList->clusterID == clusterID )
      return ( ZSuccess );
    pLast = pList;
    pList = (ZDO_MsgCB_t *)pList->next;
  }

  // Add to the list
  pNew = (ZDO_MsgCB_t *)osal_mem_alloc( sizeof ( ZDO_MsgCB_t ) );
  if ( pNew )
  {
    pNew->taskID = taskID;
    pNew->clusterID = clusterID;
    pNew->next = NULL;
    if ( zdoMsgCBs )
    {
      pLast->next = pNew;
    }
    else
      zdoMsgCBs = pNew;
    return ( ZSuccess );
  }
  else
    return ( ZMemError );
}

#define ZDO_CB_MSG                0xD3    // ZDO incoming message callback

什么时候会调用下面这个函数呢???是在UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events )中

/*********************************************************************
 * @fn      SerialApp_ProcessZDOMsgs()
 *
 * @brief   Process response messages
 *
 * @param   none
 *
 * @return  none
 */
static void SerialApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )
{
  switch ( inMsg->clusterID )
  {
    case End_Device_Bind_rsp:
      if ( ZDO_ParseBindRsp( inMsg ) == ZSuccess )
      {
        // Light LED
        HalLedSet( HAL_LED_4, HAL_LED_MODE_ON );
      }
#if defined(BLINK_LEDS)
      else
      {
        // Flash LED to show failure
        HalLedSet ( HAL_LED_4, HAL_LED_MODE_FLASH );
      }
#endif
      break;
      
    case Match_Desc_rsp:
      {
        ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg );
        if ( pRsp )
        {
          if ( pRsp->status == ZSuccess && pRsp->cnt )
          {
            SerialApp_TxAddr.addrMode = (afAddrMode_t)Addr16Bit;
            SerialApp_TxAddr.addr.shortAddr = pRsp->nwkAddr;
            // Take the first endpoint, Can be changed to search through endpoints
            SerialApp_TxAddr.endPoint = pRsp->epList[0];
            
            // Light LED
            HalLedSet( HAL_LED_4, HAL_LED_MODE_ON );
          }
          osal_mem_free( pRsp );
        }
      }
      break;
  }
}

MT这又是哪一层?

开始时所有任务的状态都被初始化为0,代表了当前任务没有需要响应的事件。事件是如何被OSAL捕获的,即taskEvents数组中的元素是什么时候设定为非零的?

参考http://bbs.feibit.com/thread-280-1-1.html

以按键响应为例,处理按键响应的函数是 Hal_ProcessEvent,采用扫描的方式。那么 Hal_ProcessEvent对应的taskEvents是在什么时候被置为非0的呢?

大体思路是这样的:

1、 // Final board initialization
  InitBoard( OB_READY );中的
 HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);     


2、在void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)中最后有 osal_set_event(Hal_TaskID, HAL_KEY_EVENT);将事件HAL_KEY_EVENT交给任务Hal_TaskID处理,即taskEvents中的与Hal_TaskID相对的元素就被置为了非0,从而调用了

uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )

3、在uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )中又调用了   HalKeyPoll();并且启动了osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100);即每隔100微秒就要调用uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )一次,而在HalKeyPoll();中来扫描判断按键是否变化。HalKeyPoll()中(pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);

static halKeyCBack_t pHalKeyProcessFunction;

pHalKeyProcessFunction这个函数指针指向了 void OnBoard_KeyCallback ( uint8 keys, uint8 state ),在这个函数中,又调用了byte OnBoard_SendKeys( byte keys, byte state ),在这个函数中,按键的状态信息被封装到了一个消息结构体中(对于消息,我们稍后再说)。最后有一个极其重要的函数被调用了。osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );registeredKeysTaskID所指示的任务正是我们需要响应按键的SerialApp这个任务。在osal_msg_send函数中osal_set_event( destination_task, SYS_EVENT_MSG );

HalKeyPoll()获取当前按键的状态,并且通过调用OnBoard_KeyCallback函数向SerialApp任务发送一个按键消息,并且设置tasksEvents中SerialApp所对应的值为非零。

大神的解答:

第一、pHalKeyProcessFunction这个函数指针为何指向了OnBoard_KeyCallback函数。
  在HAL\Commen\ hal_drivers.c这个文件中,我们找到了HalDriverInit这个函数,在这个函数中,按键的初始化函数HalKeyInit被调用。在HalKeyInit中有这样的语句:
  {
        pHalKeyProcessFunction  = NULL;
  }
  这说明在初始化以后pHalKeyProcessFunction并没有指向任何一个函数。那pHalKeyProcessFunction是什么时候被赋值的呢?
  就在HalKeyInit的下方有一个这样的函数HalKeyConfig。其中有这样一条语句:
  pHalKeyProcessFunction = cback;
  cback是HalKeyConfig所传进来的参数,所以,想要知道它所指向的函数,必须找到其调用的地方。经过简单的搜索我们不难找出答案。在main函数中有这样一个函数调用:InitBoard( OB_READY );此函数中做了如下调用:
  {
        HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
  }
  第二、registeredKeysTaskID为什么标识了GenericApp这个任务?
  由于OSAL是一个支持多任务的调度机制,所以在同一时间内将会有多个任务同时运行。但是从逻辑上来讲,一个事件只能由一个任务来处理。按键事件也不例外。
  那么如何向OSAL声明处理按键事件的任务是GenericApp呢?
  在GenericApp_Init(GenericApp的任务初始化函数)中有这么一个语句:
  {
        RegisterForKeys( GenericApp_TaskID );
  }
  RegisterForKeys函数向OSAL声明按键事件将由GenericApp任务来处理。在RegisterForKeys函数中:
  {
        registeredKeysTaskID = task_id;
  }


说实话下面这句不懂??是回调函数,就是要向SerialApp任务发送按键消息。

/* Invoke Callback if new keys were depressed */
  if (keys && (pHalKeyProcessFunction))
  {
    (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
  }


AI草图转代码实战:基于Xcode与本地智能体实现SwiftUI界面自动化生成 在移动应用开发领域,UI/UX设计稿到前端代码的转换是提升开发效率的关键环节。其核心原理在于通过计算机视觉技术识别界面元素,并结合布局分析算法解析其空间关系,最终通过代码生成模型将结构化描述转换为可执行代码。这项技术的核心价值在于极大缩短了从视觉概念到可交互原型的验证周期,降低了设计与开发间的沟通成本,并为快速原型设计提供了强大支持。其典型应用场景包括产品经理快速验证想法、设计师与开发者的协作桥梁,以及独立开发者的效率工具。本文聚焦于iOS/macOS开发生态,详细阐述了如何利用Xcode开发环境、Free 阅读详情

相关推荐

CKAD-CN 考试知识点分享(12) Secret - 1

步骤操作完成1提取 Deployment 中的硬编码 Secret 值✅2创建名为postgres的 Secret✅3修改 Deployment 使用引用 Secret✅4验证新 Pod 正常运行✅❌未删除原 Deployment✅(遵守要求)✅任务完成。敏感信息已从环境变量移出,安全地存储在 Kubernetes Secret 中。

轻的博客 632

zigbee学习笔记——四种地址绑定模式

ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,                         SERIALAPP_PROFID,                         SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,

tanqiuwei的专栏 2372

线性回归LinearRegression

对视频中线性回归算法的相关内容进行总结与记录 文章目录一、理论基础二、实例2.1 一元线性回归2.1.1 推导过程2.1.2 代码实现(基于numpy)2.1.3 代码实现(基于sklearn)2.2 多元线性回归2.2.1 代码实现(基于numpy)2.2.2 代码实现(基于sklearn) 一、理论基础 回归 通常是指利用某个函数,尽可能把数据样本点“串”在一起,用于描述输入变量和输出变量间的变化关系 线性回归 特点:用来把数据“串”起来的那个函数是线性的 (一元线性回归(一个自变量) &a.

邱邱邱的博客 1068

注册一个应用的端点描述符afRegister( endPointDesc_t *epDesc )

afRegister( endPointDesc_t *epDesc )这个函数用来注册一个新的端点到task,这样当空中有这个端点的数据到来会直接发送到对应的task。 传入参数: typedef struct {   byte endPoint; //端点号   byte *task_id;   //端点对应的任务号   SimpleDescriptionFormat_t *sim

TOM的专栏 3236

服务器测试之GPU基础汇总

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。可以形象的理解为90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)GPU的设计原理——总结为大量的简单运算。

qq_41897488的博客 2万+

Oracle EBS FA 如何打开关闭的资产会计期间?

用户“运行折旧”,误勾选为“关闭期间”,还有一部分资产还需要操作报废和调整,希望后台打开关闭的资产会计期。

陈显平的专栏-Oracle EBS 1030

ZIGBee组网流程

转载:http://blog.sina.com.cn/s/blog_9d48d26f01015tph.html 第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络 //第一步:Z-Stack  由 main()函数开始执行,main()函数共做了 2 件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统 int main( void )                

tanqiuwei的专栏 9155

Ollama教程——模型:如何将模型高效导入到ollama框架

本教程详细介绍了如何将GGUF、PyTorch和Safetensors格式的模型导入到ollama框架中。通过一系列步骤,从环境准备、模型转换和量化,到最终的模型创建和运行,我们为开发者提供了一个清晰的指南。此外,我们还探讨了如何发布模型到ollama平台,使得模型可以被更广泛地分享和应用。ollama框架提供了一个灵活、高效的解决方案,帮助开发者在各种环境中部署和运行机器学习模型。无论您是想将现有模型快速部署到生产环境,还是希望探索新的模型架构,ollama都能为您提供所需的工具和资源。

walkskyer的博客 1万+

再谈ZigBee中的绑定机制

再谈ZigBee中的绑定机制 2012-05-22 16:38:23 分类: 原文地址:再谈ZigBee中的绑定机制 作者:frankzfz 这里主要再讨论一下绑定的机制,绑定是ZigBee中应该是比较重要的一个部分。前面的几篇文章也对绑定有了具体的分析,主要分析了两种绑定方式,介绍了绑定的流程,源代码方面。这里主要是理清整个绑定在组网中的概念。绑定是和EndPoint紧密联

linuxheik的专栏 1196

BES 平台 SDK之 美格信Dongle 连接

最近项目到了试产阶段,需要用到美格信的Dongel 来测试ANC 相关功能。在此简单介绍下如何连接Dongel 的操作步骤。

谢文浩博客 925

我装了10个ClawHub技能,这些最好用!

ClawHub就是Clawdbot的"应用商店"。Clawdbot是手机ClawHub是App Store技能就是各种App装了技能,Clawdbot才能干更多事。这个技能解决了我的信息过载问题。为什么装我订阅了很多Newsletter。每天收到一堆长文章,根本看不完。怎么用“总结这篇文章的核心观点”“把这个Newsletter提炼成3个要点”“这篇技术博客有哪些可以实践的建议?安装命令真实体验现在我收到长文章,直接转发给Clawdbot。它会提炼出核心要点和行动清单。

Maynor的博客 6101

协议栈相关实验之 SerialApp实验 详解

类 |字号 订阅 组网流程图如下:      第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络 //第一步:Z-Stack  由 main()函数开始执行,main()函数共做了 2 件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统  int main( void )

海纳百川 8311

这款值68亿的游戏,你不实战一下吗?安排!

本文介绍了如何使用Cocos开发传送带像素消除类游戏。游戏包含像素画、传送带、炮台等核心元素,需要先解析图片生成像素数据,再通过关卡编辑器设计关卡机制。炮台会在传送带上环绕运动,发射子弹消除匹配颜色的像素点。文章详细讲解了游戏对象实现方法,包括像素生成、传送带运动轨迹、炮台瞄准算法等,并展示了实战效果。完整源码已集成到亿元Cocos小游戏实战合集中,适合对像素消除游戏开发感兴趣的开发者参考。

lsw_Cs的博客 438

Zstack杂乱笔记2

Zstack的SerialApp 例子中,是怎么接受空气中的信息以及是怎样对信息进行处理的?接收了信息最终要用下面这个函数来处理,但是在哪使taskArrs[]中相对应的元素置为非零呢?也就是在哪产生了SYS_EVENT_MSG事件,并且附带消息为ZDO_CB_MSG。 /**************************************************************

2528

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Zstack杂乱笔记4

在SensorDemo,想知道到底在哪调用了static int8 readTemp(void)来读取CC2530上的温度? Zigbee网络中的三种设备是怎样组网的?组网概念? #define SERIALAPP_MSG_RTRY_EVT       0x0001 //重发数据 #define SERIALAPP_RSP_RTRY_EVT       0x0002//重发响应信息 #de

4178

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Zstack杂乱笔记3

网路设备的启动过程 无论是协调器还是路由器或是终端设备,其启动过程至网络初始步骤均是一样的,只是不同设备的配置文件在编译时有所区别: 协调器:F8wCoord.cfg 路由器:F8wRouter.cfg 终端设备:F8wEndev.cfg 启动过程: 1、int main( void )中的 osal_init_system(); 2、 osal_init_syste

2612

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

DAN 攻击原理详解:手把手完成一次 ChatGPT 越狱检测与防护

本文用 LLM 漏洞扫描器 garak 讲清一件事:DAN(Do Anything Now)攻击是怎么把大语言模型"说服"无视安全规则的,以及你能照做的三步检测法和一份防护清单。读完你会知道 DAN 攻击原理、DAN 11.0 为什么难绕过,还能用开源工具对自己的模型跑一遍越狱扫描。 ## 先搞懂 DAN 攻击是什么:一场给 AI 的"角色扮演" 把大模型想象成一个受训有素的客服:背后有一份"

gitblog_00773的博客 150

AI草图转代码:构建SwiftUI智能生成工作流实践

AI代码生成技术正改变软件开发范式,其核心原理是通过大语言模型理解设计意图并自动输出高质量代码。这项技术能显著提升开发效率,将开发者从重复的界面编码中解放出来,专注于核心业务逻辑。在移动开发领域,特别是iOS应用开发中,AI可基于设计草图或结构化描述,自动生成SwiftUI或UIKit代码,快速构建界面原型。本文以构建一个从手绘草图到SwiftUI代码的本地工作流为例,详细介绍了如何利用智能体(Agent)技术栈,结合视觉识别模块和代码生成模块,实现设计到代码的自动化转换。通过具体示例,展示了如何通过提示词

weixin_34174105的博客 421

zigbee协议栈学习(四)

准备开始分析代码的,突然发现还有一个重要的知识点没有讲,没办法还是得补齐,呵呵 消息提取函数 uint8 *osal_msg_receive( uint8 task_id ) //这个函数返回一个指向所需提取信息的指针 属性(at tribute) 设备之间通信的每一种数据像开关的状态或温度计值等皆可称为属性。每个 属性可得到唯一的 ID,它们都用...

weixin_34248118的博客 262

ZStack-OSAL中任务初始化中的afRegister函数调用分析总结

首先看下以下几个结构体,定义在AF.h文件中 typedef struct { uint8 EndPoint; //端点/端口/终端号 1-240 uint16 AppProfId; //支持的Profile ID,配置文件ID uint16 AppDeviceId;

努力创作有价值的文章 3353

Zstack协议栈(二)

Components 文件夹: 存放协议栈库文件的,里面放了一些我们用到的 ZDO,driver,hal,zcl 等库的代码。Documents 文件夹: 存放 TI 的开发文档的,里面很多都是讲述协议栈的 API 的。Proiects 文件夹: 存放的是 TI协议栈的例子程序的,其中 ProiectslzstacklSamples 文件夹是我们常用的 ZStack 应用程序路径。Tools 文件夹:存放 TI 的例子程序配套的一些上位机程序和调试工具。

weixin_63926501的博客 2096

zigbee系统篇——ZStack文件框架

了解硬件和更多资料可点击:点击了解 新建一个物联网行业交流学习QQ群,感兴趣可加:928840648 =====CUT===== 本章目的: 1)了解Z-Stack3.0的文件组织形式。 2)了解Z-Stack3.0的框架结构。 Z-Stack 3.0.1 SDK文件组织形式 如果大家按照默认的位置安装了Z-Stack3.0,那么可以在C盘下找到相应的文件目录: ZStack 3.0.1就是TI提供的ZigBee解决方案软件支持包(SDK),SDK并不是全开源的,没有开源的部分是..

u010119959的专栏 2093

zigbee学习笔记4----初次接触zstack

1.写在前面 之前一直在写裸机下的cc2530的那部分,现在觉得这样子写没啥意思,所以不再写那部分了,需要到http://www.cnblogs.com/hustlzp/archive/2011/02/13/1952881.html,这里面有你们需要的,而且里面写的很不错,所以请需要的人请移步。在这篇学习笔记中将初次接触Ti公司的zstack。 2.揭开她的面纱           在开始的

我的学习笔记专栏 2万+

协议栈中绑定流程的一点认识

2011年4月27日 初学者关于协议栈中绑定流程的一点认识 本人刚接触zigbee不久,在学习中将不断记录每天的进步,期待大家的指导!! 在这里指出我还是参考了ZStack-CC2530-2.3.1-1.4.0\Projects\zstack\Samples\GenericApp例程 在协议栈中关于bind的服务主要有一下几类。     End_Device_Bind

linuxheik的专栏 3134

ZigBee TI ZStack CC2530 4.18 绑定通信02-实验验证

【 源码、文档、软件、硬件、技术交流、技术支持,入口见文末】

拿破仑940911 2333

学习z-stack协议栈的serialApp例子(1)

(支持原创,如需转载,请注明地址:http://blog.sina.com.cn/litianping0709 作者:叶雨荫城(阿雨))   今天开始接触z-stack的串口通信例子。恩,加油,好好学,一定要搞懂。 先看说明: 本实验是一个取代两个非ZigBee设备之间电缆连接的基本应用。该应用具有实际应用意义,例如RS232ZigBee转换器,给具有RS232接口的设备增

Stephen_yu的专栏 4038
上一篇: Zigbee 之SerialApp HalDriverInit()
下一篇: Zstack杂乱笔记2
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值