ZigBee学习之25InitBoardWord文件下载.docx

上传人:b****5 文档编号:15778073 上传时间:2022-11-16 格式:DOCX 页数:19 大小:21.02KB
下载 相关 举报
ZigBee学习之25InitBoardWord文件下载.docx_第1页
第1页 / 共19页
ZigBee学习之25InitBoardWord文件下载.docx_第2页
第2页 / 共19页
ZigBee学习之25InitBoardWord文件下载.docx_第3页
第3页 / 共19页
ZigBee学习之25InitBoardWord文件下载.docx_第4页
第4页 / 共19页
ZigBee学习之25InitBoardWord文件下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

ZigBee学习之25InitBoardWord文件下载.docx

《ZigBee学习之25InitBoardWord文件下载.docx》由会员分享,可在线阅读,更多相关《ZigBee学习之25InitBoardWord文件下载.docx(19页珍藏版)》请在冰豆网上搜索。

ZigBee学习之25InitBoardWord文件下载.docx

//#defineHAL_LED_MODE_OFF0x00

//#defineHAL_LED_MODE_ON0x01

//#defineHAL_LED_MODE_BLINK0x02

//#defineHAL_LED_MODE_FLASH0x04

//#defineHAL_LED_MODE_TOGGLE0x08

//LED设置函数【hal_led.c】

uint8HalLedSet(uint8leds,uint8mode)

#if(defined(BLINK_LEDS))&

&

(HAL_LED==TRUE)

//前提条件是定义了闪烁LED和LED硬件驱动服务使能;

//HAL_LED定义在【hal_board_cfg.h】

#ifndefHAL_LED

#defineHAL_LEDTRUE

//当设为FALSE时就不使用LED

#endif

#if(!

definedBLINK_LEDS)&

#defineBLINK_LEDS

uint8led;

HalLedControl_t*sts;

//LED控制结构体

typedefstruct{

uint8mode;

/*操作模式*/

uint8todo;

/*剩余的闪烁周期数*/

uint8onPct;

/*周期中所占的比例*/

uint16time;

/*开关周期时间(msec)*/

uint32next;

/*下次改变的时间*/

}HalLedControl_t;

switch(mode)

caseHAL_LED_MODE_BLINK:

HalLedBlink(leds,1,HAL_LED_DEFAULT_DUTY_CYCLE,HAL_LED_DEFAULT_FLASH_TIME);

//LED设置的一些默认参数【hal_led.h】

#defineHAL_LED_DEFAULT_MAX_LEDS4

#defineHAL_LED_DEFAULT_DUTY_CYCLE5

#defineHAL_LED_DEFAULT_FLASH_COUNT50

#defineHAL_LED_DEFAULT_FLASH_TIME1000

//LED闪烁函数【hal_led.c】

voidHalLedBlink(uint8leds,uint8numBlinks,uint8percent,uint16period)

//同样先判断是否启用了LED并且使用LED闪烁功能

if(leds&

percent&

period)

//判断参数的有效性,percent参数指明一个周期中LED将开启的时间

if(percent<

100)

//如果一个周期中开启时间小于100%

led=HAL_LED_1;

leds&

=HAL_LED_ALL;

//屏蔽掉不想要操作的LED

sts=HalLedStatusControl.HalLedControlTable;

//HalLedStatusControl是事先定义好的一个结构体

typedefstruct

HalLedControl_tHalLedControlTable[HAL_LED_DEFAULT_MAX_LEDS];

uint8sleepActive;

}HalLedStatus_t;

#ifdefBLINK_LEDS

staticHalLedStatus_tHalLedStatusControl;

while(leds)

//这个循环主要是对传进来的每一个LED进行独立的设置,比如传进来的是需要设置LED1和LED2,那么此循环会先设置LED1然后再设置LED2

led)

//检测当前LED是否是需要设置的

preBlinkState|=(led&

HalLedState);

//储存目前的额LED状态

//staticuint8preBlinkState;

sts->

mode=HAL_LED_MODE_OFF;

/*关闭先前的模式*/

time=period;

/*Timeforoneon/offcycle*/

onPct=percent;

/*%ofcycleLEDison*/

todo=numBlinks;

/*Numberofblinkcycles*/

if(!

numBlinks)sts->

mode|=HAL_LED_MODE_FLASH;

//如果规定的次数未达到则继续闪烁

next=osal_GetSystemClock();

/*Startnow*/

//读取当前系统时钟【OSAL_Timers.c】

uint32osal_GetSystemClock(void)

return(osal_systemClock);

}

//staticuint32osal_systemClock;

//这样看来第一次运行的时候osal_systemClock=0,系统中应该启动了定时器,用来记录系统运行时间。

mode|=HAL_LED_MODE_BLINK;

/*Enableblinking*/

leds^=led;

//屏蔽掉已设置好的这个LED

led<

<

=1;

//检测下一个LED

sts++;

}//真的是高手才能写出的函数啊!

自叹,C语言编程能力还差的远啊

osal_set_event(Hal_TaskID,HAL_LED_BLINK_EVENT);

//【hal_drivers.h】

//#defineHAL_LED_BLINK_EVENT0x0002

//externuint8Hal_TaskID;

//此函数为用户设置任务标志【OSAL.c】

//第一个参数是任务ID,第二个参数是要设置的事件

byteosal_set_event(bytetask_id,UINT16event_flag)

if(task_id<

tasksCnt)

//【sapi.c】

constpTaskEventHandlerFntasksArr[]={

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

#ifdefined(MT_TASK)

MT_ProcessEvent,

APS_event_loop,

ZDApp_event_loop,

SAPI_ProcessEvent

};

//【OSAL_Tasks.h】

//事件处理函数原型:

typedefunsignedshort(*pTaskEventHandlerFn)(unsignedchartask_id,unsignedshortevent);

//定义事件处理函数的函数指针类型

//tasksArr中任务事件循环中的顺序必须和osalInitTask中任务的初始化顺序一致

constuint8tasksCnt=sizeof(tasksArr)/sizeof(tasksArr[0]);

//得到任务数

//只有当任务ID小于总任务数时才继续执行,也就是说只有当此为有效任务才执行。

halIntState_tintState;

//【hal_mcu.h】其实就是一个无符号字符类型

//typedefunsignedcharhalIntState_t;

HAL_ENTER_CRITICAL_SECTION(intState);

//维持全局中断状态

//【hal_mcu.h】

#defineHAL_ENTER_CRITICAL_SECTION(x)st(x=EA;

HAL_DISABLE_INTERRUPTS();

//保存当前全局中断状态,然后关闭全局中断

#defineHAL_EXIT_CRITICAL_SECTION(x)st(EA=x;

#defineHAL_CRITICAL_STATEMENT(x)st(halIntState_ts;

HAL_ENTER_CRITICAL_SECTION(s);

x;

HAL_EXIT_CRITICAL_SECTION(s);

tasksEvents[task_id]|=event_flag;

//Stufftheeventbit(s)

//uint16*tasksEvents;

HAL_EXIT_CRITICAL_SECTION(intState);

//Releaseinterrupts

else

return(INVALID_TASK);

//如果任务ID超出返回则返回任务无效

//返回值类型定义在【ZComDef.h】

//#defineINVALID_TASK1

return(ZSUCCESS);

Else

//如果点亮时间百分比超过100%也就相当于常亮了,就执行LED常亮的设置

HalLedSet(leds,HAL_LED_MODE_ON);

//【hal_led.c】

//一样的前提是开始了LED硬件驱动服务

//检测要切换的LED模式

HalLedBlink(leds,1,HAL_LED_DEFAULT_DUTY_CYCLE,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

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

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