ZigBee 协议移植(ARM+Linux)
时间:11-21
来源:互联网
点击:
ZigBee协议栈移植步骤大致如下:1) 详细了解自定义硬件平台与Microchip ZigBee协议栈支持硬件之间的异同。对用户自定义的硬件平台和Microchip ZigBee协议栈支持的硬件平台进行分析比较,了解它们的处理器在I/O端口分配,内存组成及使用、中断处理、堆栈操作等各个方面的异同。另外还要分析两者所采用的ZigBee无线收发器之间的异同,了解它们的操作时序、控制命令、各寄存器的作用等。 Microchip 协议栈设计为仅在Microchip PIC18F 系列单片机上运行。协议的移植主要体现在对平台相关部分的改写或重写, 以及在Linux环境下的并发控制及性能优化上。包括:SPI接口、动态内存分配、固态存储、节拍控制等的改写或重写,中断服务(ISR)与底半部(bottom half)的设计。应用程序接口、进程的适时睡眠与唤醒,守护进程等。其中动态内存分配、节拍控制等可以利用Linux操作系统的系统函数,实现较为方便。利用内核的内存分配和回收函数kmalloc和kfree可实现动态内存分配:利用全局节拍变量jiffies(Linux中称为系统“嘀哒”)改写节拍控制模块。SPI接口方面,此处采用S3C2410 ARM芯片,利用它内置的SPI控制器。可以方便地实现SPI功能。同时利用GPIO控制器实现其余I/O口的控制与中断采集。这些IO口包括CC2420的芯片使能Cs、电压调节器使能、RESET控制、CCA (信道空闲)检测、FIFOP中断,FIFO检测(用于判断溢出)、SFD中断。
2. 在MicroChip协议栈中应用程序接口被设计成API函数或宏定义。应用程序只要在代码中包含定义了这些函数或宏的头文件,在编译时就能自动链接形成一个完整的可执行程序。而在基于Linux的程序设计中,代码被分为内核态和用户态,只有内核态代码可以访问中断,因而ZigBee协议或驱动必须运行存内核态,而应用程序则处在用户态。应用程序在编译时不直接与协议提供的接El函数链接。而是通过ioctl系统调用实现访问。在驱动中定义一个Zigbee ioctl函数。在这个函数中具有不同参数的ioctl系统调用被分派到不同的接El函数中,实现不同的功能。例如为使应用程序可以使用发送键值对的接口函数。在zigbee ioctl中就应该有这样的语句 APSDE_DATA_request即为应用支持层(APS)提供的数据发送接口函数。此时应用程序必须以APLSendKVPDirect为参数进行ioctl系统调用。在zigbee_ioctl函数中还可根据应用的需要增加调用接口,为应用程序的编写提供方便。
3. ZigBee协议栈中各个子层都有各自的任务函数,它们被设计成必须在应用中尽可能多地调用包括接收数据包、超时处理、数据转发等。这些函数在嵌人式Linux环境下同样被设计成由应用程序通过系统调用来访问。调用他们的应用程序扮演着守护进程的角色,由于这些函数被封装成一次系统调用.因此在单CPU环境下,更需考虑竞态的发生。
2)
3)
4)
5)
2.
case APLSendKVPDirect:
return APSDE_DATA_request (
(MESSAGE_INFO *)arg
);
3.
ZigBee协议移植ARMLinu 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)