ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:17.80KB ,
资源ID:27927289      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27927289.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(TI06版Zigbee协议栈学习01.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

TI06版Zigbee协议栈学习01.docx

1、TI06版Zigbee协议栈学习01TI_06版Zigbee协议栈学习_01 整个协议栈是以一个OS贯穿的,我们要加入自己的应用,就要添加一个任务,在任务中执行,与协议栈连接。首先在OSAL_Task.h头文件中声明函数,在OSAL_Task.c中实现这些函数,完成以下的功能:任务系统的初始化,加一个任务到任务列表,调用每个任务的初始化函数,指到下一个任务,返回任务指针到任务(从任务ID中找到的任务)。Int *p;Int i;P=&i;/指针P指向一个整形变量i,即指针P的值是i的的址;OSAL_Task.h1. CONSTANTS/* * CONSTANTS */#define TASK_

2、NO_TASK 0xFF/ Task priority level 定义任务优先级#define OSAL_TASK_PRIORITY_LOW 50#define OSAL_TASK_PRIORITY_MED 130#define OSAL_TASK_PRIORITY_HIGH 2302. TYPEDEFS/* * TYPEDEFS */ Task Initialization function prototype 任务初始化函数原型typedef void (*pTaskInitFn)( unsigned char task_id );/ Event handler function pro

3、totype 事件处理函数原型 / pTaskInitFn所定义函数指针类型的别名,用此类型生成一个指向函数的指针(如下面的pTaskInitFn pfnInit,则当pfnInit获取函数的地址后,就可以像调用原函数一样来使用这个函数指针:pfnInit(unsigned char task_id)typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short event );/(解释同上,pTaskEventHandlerFn pfnEventProcessor后,可以像调用原函数一样

4、来使用这个函数指针pfnEventProcessor( unsigned char task_id, unsigned short event ))typedef struct osalTaskRec/任务是以栈的形式存在的 struct osalTaskRec *next; pTaskInitFn pfnInit;/ pfnInit是指向任务初始化函数的指针 pTaskEventHandlerFn pfnEventProcessor;/ pfnEventProcessor是指向事件处理函数的指针 byte taskID; byte taskPriority; uint16 events; o

5、salTaskRec_t;/ osalTaskRec_t是一个结构体类型(别名)3. GLOBAL VARIABLES/* * GLOBAL VARIABLES*/extern osalTaskRec_t *activeTask;/ 指针activeTask指向osalTaskRec_t这种结构体类型的首地址4. FUNCTIONS/* * FUNCTIONS */ Initialization for the Tasking System. 任务系统的初始化extern void osalTaskInit( void );/ 特别注意这个函数,osalTaskAdd():/ Add a ta

6、sk to the task list 加一个任务到任务列表extern void osalTaskAdd( pTaskInitFn pfnInit, pTaskEventHandlerFn pfnEventProcessor, byte taskPriority);/(指向任务初始化函数的指针,指向事件处理函数的指针,任务优先级别)/ Call each of the tasks initailization functions. 调用每个任务的初始化函数extern void osalInitTasks( void );/ This function will return the nex

7、t active task. 指到下一个任务extern osalTaskRec_t *osalNextActiveTask( void );/?指针函数osalNextActiveTask(void)指向osalTaskRec_t这种结构体的首地址/ This function will return a task pointer to the task ,found with the passed in task ID./ 返回任务指针到任务(从任务ID中找到的任务)extern osalTaskRec_t *osalFindTask( byte taskID );OSAL_Task.c1

8、. INCLUDES/* * INCLUDES */#include ZComDef.h#include OSAL.h#include OSAL_Tasks.h#include OSAL_Custom.h2. GLOBAL VARIABLES/* * GLOBAL VARIABLES */ Task ControlosalTaskRec_t *tasksHead;/指针tasksHead指向osalTaskRec这类结构体osalTaskRec_t *activeTask;/同上byte taskIDs;(任务列表头;激活任务;任务ID)3. FUNCTIONS/* * FUNCTIONS *

9、/ 初始化任务系统(任务是以栈的形式存在的)void osalTaskInit( void ) tasksHead = (osalTaskRec_t *)NULL;/指针tasksHead指向空。 = 应是一个地址(osalTaskRec_t类型空结构体NULL的地址) activeTask = (osalTaskRec_t *)NULL; taskIDs = 0;/ 特别注意这个函数,osalTaskAdd();/ 添加一个任务到列表,保持任务的优先级void osalTaskAdd( pTaskInitFn pfnInit, pTaskEventHandlerFn pfnEventProc

10、essor, byte taskPriority)/ /(指向任务初始化函数的指针,指向任务处理函数的指针,任务优先级别) osalTaskRec_t *newTask; osalTaskRec_t *srchTask; osalTaskRec_t *ptr;/指针变量ptr指向另一指针变量 newTask = osal_mem_alloc( sizeof( osalTaskRec_t ) );/任务以栈的形式存在,为其分配空间,空间大小即描述任务的结构体的大小 if ( newTask ) / Fill in new task newTask-pfnInit = pfnInit;/ pfnI

11、nit是指向任务初始化函数的指针大意应该是新任务结构体中的任务初始化函数= pfnInit(这个指针所指的函数肯定还要定义过) newTask-pfnEventProcessor = pfnEventProcessor;/同上,任务处理函数 newTask-taskID = taskIDs+; /赋给新任务taskID后自增1 newTask-taskPriority = taskPriority; newTask-events = 0; newTask-next = (osalTaskRec_t *)NULL; / ptr is the address of the pointer to t

12、he new task when the new task is inserted. Initially it is set to address of tasksHead in case the newtask is higher priority than the existing head or the queue is empty. ptr = &tasksHead;/ptr双重指针,其值应为ptr所指向的指针变量的地址 srchTask = tasksHead; / while (srchTask) if (newTask-taskPriority srchTask-taskPrio

13、rity) / insert here. New task has a higher priority than the task / with which is being compared and a lower or equal priority / to any task that precedes it. newTask-next = srchTask; *ptr = newTask; / 指针变量*ptr的值(指向一个osalTaskRec类型结构体的首地址)=指针变量newTask的值(即其所指向的osalTaskRec类型结构体的首地址)/注意ptr是双重指针? return;

14、 / set ptr to address of the pointer to next in the current / (soon to be previous) task control block ptr = &srchTask-next;/双重指针ptr指向指针变量srchTask-next的地址 srchTask = srchTask-next;/ 指针变量srchTask的值(即其所指向的osalTaskRec类型结构体的首地址)=指针变量srchTask-next的值(同样即其所指向的osalTaskRec类型结构体的首地址) / Were at the end of the

15、current queue. New task is not higher / priority than any other already in the list. Make it the tail. / (It is also the head if the queue was initially empty.) *ptr = newTask; return;/ 调用每个任务的初始化函数void osalInitTasks( void ) / Start at the beginning activeTask = tasksHead;/激活任务(初始化任务)/ 两个指针都是指向osalT

16、askRec这类结构体 / Stop at the end while ( activeTask ) if ( activeTask-pfnInit ) activeTask-pfnInit( activeTask-taskID );/任务初始化函数pfnInit(taskID),实参activeTask-taskID activeTask = activeTask-next; activeTask = (osalTaskRec_t *)NULL;/ 指向下一个任务osalTaskRec_t *osalNextActiveTask( void ) osalTaskRec_t *srchTask

17、; / Start at the beginning srchTask = tasksHead; / When found or not while ( srchTask ) /找到有任务,执行while()里面的程序 if (srchTask-events)/此任务有事件未处理,返回这个任务 / task is highest priority that is ready return srchTask; srchTask = srchTask-next;/此任务无事件要处理,指向下一任务 return NULL;/没有找到任务,返回null/ 返回任务指针到任务(在任务ID中找到的任务)o

18、salTaskRec_t *osalFindTask( byte taskID )/这个函数返回一个指向osalTaskRec_t类结构体的指针 osalTaskRec_t *srchTask; /srch=search / Start at the beginning srchTask = tasksHead; / When found or not while ( srchTask )/找到有任务 / Look for any activity if ( srchTask-taskID = taskID )/任务ID相同,即是我们所要找的任务 return ( srchTask );/则返回这个任务(任务是以堆栈的形式存在的) srchTask = srchTask-next;/ 任务ID不相同,往下找 return ( (osalTaskRec_t *)NULL );/没有任务,返回NULL,即空的结构体

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1