zoukankan      html  css  js  c++  java
  • 协议栈的使用

    1、安装协议栈软件ZStack-CC2530-2.3.0-1.4.0.exe(是TI公司的)

    根据不同行业的应用发布不同的协议栈

    nesh版本是这些版本的升级版

    HA(home auto)是智能家庭研发人员提供开发的。

    SE智能能源方面研发人员提供的。

    建立自己的zstack工程:

    将安装好的软件目录ZStack-CC2530-2.3.0-1.4.0拷贝到另外一个自己新建工程的地方,且除了Components和Projects保留外其他删除。

    把Projects/zstack/Samples下除了GenericApp都删除。

    将GenericApp改成SDApp(自己任意修改),将Source代码下的文件名以及文件里面的GenericApp改成SDApp,ctrl+h

    进入CC2530DB修改GenericApp.eww、GenericApp.ewp、GenericApp.ewd、GenericApp.dep修改为对应的SDApp.xxx

    ,同样按照前面一样地修改文件里面的内容,替换成SDApp,针对工程文件要先修改成.txt,再进行替换。

    最后再双击打开工程,就是我们个性化的工程了。编译一下有四个警告,

    主要关心:App下的文件以及ZMain下的文件。

     之前我们在做实验的时候,有协议栈、路由器、终端,那么这些代码是怎么生成的?

    选择这个表示协调器,然后,编译、下载相应模块就称为协调器模块了。

    如果选择RouterEB-Pro就会成为路由器模块,选择EndDeviceEB-Pro就会成为终端模块。

    为什么选择不同选项有这么大的变化,可以参看一下Tools文件夹下有对应文件,当对应功能被选择的时候,其他两项文件就无效!

    实验:把数码管代码移植过来74LS164_8LED.c和74LS164_8LED.h文件添加到工程文件夹下添加到GenericApp/Source下面。然后在工程里面选中App,然后把文件添加进来。

    把74LS164_8LED.c文件里面的头文件包含#include "74LS164_8LED.h"放到ZMain下的ZMain.c里面;

    以及把74LS164_8LED.c文件里面的初始化函数void LS164_Cfg(),放到ZMain.c文件里面

    然后编译,会出现一些错误,修改:右键选中工程->options->c/c++ compiler->去掉Require prototype.因为它检查语法很严格;重新编译,就没错误了。

    打开App文件夹下面的SDApp.c文件,添加数码管函数,首先要把数码管的头文件放过来,

    找到一个函数名为SDApp_ProcessEvent(事件处理函数)的函数,对里面的这个进行改进

    注意:它的注释快捷键为Ctrl+k,取消注释为ctrl+shift+k

    下面用协调器方式编译:选择project->rebuild all。编译成功。

    然后,开始组网,在没有出现协调器的时候,其他路由器和终端是不会成功组网,显示相应字母。

    带Pro与EB之间的区别,zigbee在发展过程中经历了三个版本,zigbee在07年出的是最新的版本,这个规范有两个版本,一个是zigbee2007以及zigbeePRO,他们之间功能基本相同,PRO版本功能稍微强大;一般都选择PRO。

    打开工程下的Tools下的f8wConfig.cfg文件

    对于路由器和终端来说,只能选择11号信道,然后在这个信道里相对稳定的网络加入进去。

    而对于协调器来说,只能在11号信道创建属于自己的网络。

    上面的值之间可以相互或比如0x00001000|0x00000800=0x00001800,对于路由器和终端来说,可以选择在信道11和12之中,信号相对稳定的网络加入进去。

    对于协调器来说,可以在11或者12信道,选择最佳的信道,来创建属于自己的网络。

    PANID有两种值选择:一个是0xFFFF;一个是非0xFFFF;

     当两个模块下载相同的协调器代码,并且指定的PANID参数值为非0xffff,后果会怎样?

    打开一个协调器,会创建一个网络

    打开第二个协调器

    可以看出第一个协调器创建的PANID为0xFFF8,第二个协调器可以创建网络的,它的PANID值为在0xFFF8基础上加一的0xFFF9,如果还有那么继续累加。

    下面把中断开启,让它入网

    可以看出它入的网是0xFFF8.说明了它必须要加入到0xFFF8;

    那么测试一下,让0xFFF8的协调器断点,让终端重启,那么它一直都加入不了0xFFF9的网络。

    然后改一下中断的那个值,改成0xFFFF,看它能否加入到0xFFF9,结果可以加入,即为0xFFFF的时候,对PANID没有限制。

    当协调器的PANID为0xFFFF,看它实际生成的PANID是不是随机的,结果是随机的。

    它叫做设置任务事件函数。

    zstack这个协议栈它的代码按照功能来划分成不同的层,硬件配置寄存器的代码叫做硬件层,网络相关的代码叫做网络层,上层可以写代码应用的叫做应用层,其实还有很多的层,在zstack里,几乎每一个层都是一个任务,系统会为每一个任务分配一个字节数据唯一的编号,每个任务都会处理一些他们能够处理的事物,我们可以通过上面这个函数来调用相应任务来执行一些事,

    该函数的第一个参数就是任务的编号task_id,第二个参数为这个任务为我们处理的事件,

    在初始化的时候,系统会把这个任务task_id传递进来,并保存在SDApp_TaskID里面,这个任务能够处理的所有事件就在SDApp_ProcessEvent这个函数里面,其中每一个if里面的东西就是一个事件,里面默认是两个事件。

    在里面修改如下

    目的是点亮一个led灯,可以设置断点调试。

    再来看一个函数

     这个函数的意思是第三个参数代表毫秒,多少毫秒以后,来处理任务。

    把上面的那个函数改成本函数测试一下。

    默认只有两个事件,那么我们可以自己去增加事件吗?

    进入该事件的定义查看

    上面事件的值为0x0001,事件取值的特点是其值必须16位中只有一位为1,其余的全为零。所以最多只能定义16个事件。

    下面定义一个自己的事件

    将该事件添加进来

    那么我们就为应用层任务添加了一个事件。按照电灯的方式,可以测试一下

    没有点亮,为什么?进入ZMain.c文件

    进入到函数HalDriverInit(),该函数对评估板硬件上做了一些初始化,要使我们的初始化与他的初始化不发生冲突,那么我们的初始化一定要放在

    或者

    点亮成功!

    在ZSTACK里,任务事件定义的特点决定了,每一个任务最多只能处理16种不同的事件,而系统在运行时候有许多事物需要处理,如果每一个事物处理都定义成1个事件,那么16种事件肯定是不够用的,所以引入了消息。

    系统里面默认定义了两个事件,第一个事件是系统事件,

    消息的处理事物的原理:

    定义了一个事件如下

    当需要应用层任务来处理某个事物的时候,首先给应用层任务发送一个消息,然后调用设置任务事件函数osal_set_event(SDApp_TaskID,SYS_EVENT_MSG);其中函数参数事件为系统事件,那么这样一来,应用层就会进入系统事件处理,在这个事件处理里判断,到底刚刚引发我们产生这种事件是哪一种类型的消息,然后根据消息的类型做相应的处理。

    而消息的类型可以自己定义,这样一来,消息的类型可以很多,那么应用层任务处理的事物种类就很多了。

    自己给应用层发送一个消息,以按钮状态改变为例:KEY_CHANGE;

    当模块成为协调器之后,会执行到这个地方来,如下:

    做按钮实验:

    把SD_Key.c和SD_Key.h拷贝到工程之前那个地方,添加到工程;

    把按钮的头文件SD_Key.h拷贝到主函数里面来

    然后对按钮进行初始化

    检查移植成功与否,在进行编译和下载之前,需要把它自带的中断给注释掉

    以上中断还只是我们的延时函数作用的除抖动效果

    我们采用今天学习的这个任务

    修改如下

    该函数里面的宏应该引入进来

    将定义该宏的头文件包含进来#include "SDApp.h"

    任意一个按钮按下都会向应用层发送一个事件,

    这里延时25毫秒,进入中断后,执行该函数,它会开始25ms的倒计时,只有倒计时25ms完了,才去处理,所有只有25毫秒倒计时完了才能发生中断,相当于消抖动的效果,

     

    生成.HEX文件

    进入到f8w2530.xcl

  • 相关阅读:
    嵌入式软件开发环境搭建与工具推荐
    软件常用设计原则与实践:契约式接口设计、安全编码实践
    服务器崩掉 ,只剩下挂载文件,重现github docker 容器
    基础巩固篇 —— CountDownLatch的理解
    基础巩固篇 —— 对锁的理解
    基础巩固篇 —— 对不安全集合的理解
    基础巩固篇 —— 对CAS的理解
    基础巩固篇 —— 对volatile关键字的理解
    响应式布局
    jQuery Mobile 网格
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5719714.html
Copyright © 2011-2022 走看看