高级会员
- 积分
- 875
- 金钱
- 875
- 注册时间
- 2013-12-18
- 在线时间
- 41 小时
|
有不理解endpoint的,看一下这里,这也是我从帖子里找到的,不是我写的,之所以不敢发网址,是怕又有人说是不是病毒啊,什么的,让我无语
内容我看过了,通俗易懂,写的很好的。
内容:
今天看了毛毛老师关于端口的一些心得,他的思路写的很清楚,唯一的不足是没有结合代码来说明。
ENDPOINT。很多资料将其翻译为“端点”,我们不如也这么叫。不过问题的关键不是它如何称呼,而是如何认识它。我们来研究这样一个事实:outman在看我的帖子的同时他又使用QQ和别人聊天。假设他的电脑IP地址为192.168.1.2。那么当他的QQ好友向他发送了一句话的时候,这个信息里面包含了目的IP地址,所以通过TCP/TP协议可以到达outman的电脑。但是问题随之而来。当outman电脑上的操作系统接收到此条信息时,它将把这个信息交给浏览器(我们刚才说了,他在看帖子,所以肯定开着浏览器)呢,还是交给QQ?操作系统通过怎么样的方法作出裁决呢?显然,只通过IP地址是没有办法决定的,所以这条消息除了包含IP地址以外,还要告诉目的机,这条消息应该交由哪个应用程序来处理。于是端口(Port)的概念产生了。操作系统为应用程序提供了很多端口,消息由IP地址到达操作系统,再由端口找到处理消息的应用程序。同样的道理,在ZigBee的应用程序框架里(结构图请看《深入浅出Z-Stack 2006 OSAL多任务资源分配机制》)包含了最多240个应用程序对象,每个应用程序对象在OSAL中对应了一个任务,当网络层接收到信息以后如何决定将此信息传递给哪个任务呢?ENDPOINT决定了传递方向,于是我们可以说ENDPOINT的作用与TCP/IP协议中的端口的作用是一样的。
Cluster。中文翻译为“簇”。我们如何去理解“簇”这个概念呢?当一个任务接收到消息(这里所说的消息是指无线网络之中的数据)之后,一定会对消息进行处理。但是我们的应用肯定不会盲目的处理所有消息,消息一定会被分门别类。“簇”代表了消息的类型,为与相同簇的消息具有相同的类型,而这个类型可以被用户自定义。
以上摘自飞比论坛《z-stack简单应用开发》,个人认为把端点的概念说的很清楚,唯一不足是没有从代码层面来说明。
当空气中有数据过来,通过物理层,mac层,网络层,在网络层中最终会调用AF.c中afIncomingDate()函数,在该函数中会调用afBuildMSGIncoming(),该函数又调用osal-msg-send(),即osal_msg_send( *(epDesc->task_id), (uint8 *)MSGpkt );
对于osal-msg-send()最终会触发应用层任务处理函数,还是ZDo层,要看task-id
afRegister( (endPointDesc_t *)&SerialApp_epDesc );//在应用层初始化函数中
afRegister( (endPointDesc_t *)&ZDApp_epDesc );//在zdo中初始化函数中
端点号和任务id是怎么联系起来的,我的理解是这样的,两者是不分家的,端点号,和任务id都包括在端点描述符中,在发送的信息中包含了端点号和任务id。在代码编写过程中之需要用到task-id即可。
|
|