OSAL中LED灯工作方式简介

来源:互联网 发布:荣威rx5 新款有优化吗 编辑:程序博客网 时间:2024/04/30 23:46


          /*  关于LED灯的使用,如果需要使用LED的闪烁功能,则需要用到两个比较重要的结构体,            若不需要则可不定义        */        typedef struct {            uint8 mode;                                 /*  LED的操作模式                               */            uint8 left;                                 /*  打开和关闭LED的次数                         */            uint8 onPct;                                /*  ON状态的占空比                              */            uint16 time;                                /*  完成打开和关闭一次的时间                    */            uint32 next;                                /*  离下一次状态改变的时间                      */        } HalLedControl_t;        typedef struct        {            HalLedControl_t HalLedControlTable[HAL_LED_DEFAULT_MAX_LEDS];            uint8           sleepActive;                /*  LED的是进入睡眠状态                         */        } HalLedStatus_t;                               #ifdef BLINK_LEDS        static HalLedStatus_t HalLedStatusControl;        #endif                /*  首先系统初始化时会初始化                    */        HalLedInit();                        /*  设置GPIO口的工作方式,并把所有的灯设置为OFF */            -> HalLedSet();                             /*  初始化时调用该函数设置所有LED灯OFF          */                -> HalLedOnOff();                       /*  最终是该函数设置所有LED灯OFF                */                        /*  当用户使用控制LED灯时调用下面函数           */         HalLedSet();                                    /*  若用户只是单纯的打开关闭LED灯,直接在调用HalLedOnOff()操作  */                    -> HalLedOnOff();                           /*  最终是该函数设置所有LED灯OFF                */                        HalLedSet();                                    /*  若用户需要开启灯闪烁                        */            -> HalLedBlink();                           /*  填充上面说的结构体                          */                        -> osal_set_event();                    /*  发送 HAL_LED_BLINK_EVENT 事件               */                         Hal_ProcessEvent();                             /*  事件发送之后,系统会调用该函数              */            -> HalLedUpdate();                          /*  根据结构体更新LED的状态,                   */                ->osal_start_timerEx();                 /*  在最小的next之后发送HAL_LED_BLINK_EVENT事件 */                       ......                                 Hal_ProcessEvent();                             /*  然后就一直循环,直到闪烁的次数完成          */   

        在LED的控制中,有两个变量是很重要的,大家需要注意

        static uint8 HalLedState;              // LED state at last set/clr/blink update

        static uint8 preBlinkState;            // Original State before going to blink mode
                                                                  // bit 0, 1, 2, 3 represent led 0, 1, 2, 3

0 0
原创粉丝点击