CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第四件事就是 修改第三件事信号量超时改为 事件 超时,并增加 事件控制 ,用于控制LED 闪烁时间或者关闭

/*
 * data_process.c
 *
 *  Created on: 2018年7月5日
 *      Author: admin
 */


#include "board_led.h"
#include "board_uart.h"

#include "data_process.h"


// Task configuration
#define LF_TASK_PRIORITY      1
#define LF_TASK_STACK_SIZE   512

// Task configuration
Task_Struct lfTask;
Char lfTaskStack[LF_TASK_STACK_SIZE];

Event_Handle eventLedFickerHandle;



/*********************************************************************
 * @fn      LedFicker_createTask
 *
 * @brief   Task creation function for the led ficker.
 *
 * @param   None.
 *
 * @return  None.
 */
void LedFicker_createTask(void)
{
  Task_Params taskParams;

  // Configure task
  Task_Params_init(&taskParams);
  taskParams.stack = lfTaskStack;
  taskParams.stackSize = LF_TASK_STACK_SIZE;
  taskParams.priority  = LF_TASK_PRIORITY;

  Task_construct(&lfTask, LedFicker_taskFxn, &taskParams, NULL);
}

/*********************************************************************
 * @fn      LedFicker_taskFxn
 *
 * @brief   Application task entry point for the Led Ficker.
 *
 * @param   a0, a1 - not used.
 *
 * @return  None.
 */
static void LedFicker_taskFxn(UArg a0, UArg a1)
{/* LED 闪烁任务,默认200ms闪烁一次,可以通过事件通知的方式更改LED闪烁频率 */

    uint32_t events;
    uint32_t timeoutInTicks = 200 * (1000/Clock_tickPeriod);

    Event_Params eventParams;
    Event_Struct structEvent; /* Memory allocated at build time */

    Event_Params_init(&eventParams);
    Event_construct(&structEvent, &eventParams);

    /* It's optional to store the handle */
    eventLedFickerHandle = Event_handle(&structEvent);

    if (eventLedFickerHandle == NULL) {
        /* PIN_open() failed */
        bspDebugPrintf( true,"eventLedFickerHandle Init false.\r\n" );
        while (1);
    }
    else
    {
      bspDebugPrintf( true,"eventLedFickerHandle Init ok.\r\n" );
    }

    // Application main loop
    for (;;)
    {

        /* Wait for an event to be posted */
        events = Event_pend(eventLedFickerHandle,
                            Event_Id_NONE,
                            LED_FICKER_OFF_EVT |
                            LED_FICKER_100MS_EVT |
                            LED_FICKER_1S_EVT,
                            timeoutInTicks);

        //翻转LED灯
        ledBoardToggle( ledBlueBoard );
        ledBoardToggle( ledRedBoard );

        if (events & LED_FICKER_OFF_EVT)
        {
            timeoutInTicks = BIOS_WAIT_FOREVER;/* 超时时间改为永久,这样就关闭了LED */

            //关闭LED灯
            ledBoardOff( ledBlueBoard );
            ledBoardOff( ledRedBoard );
        }

        if (events & LED_FICKER_100MS_EVT)
        {
            timeoutInTicks =  100 * (1000/Clock_tickPeriod);/* 超时时间改为100ms,这样LED就会100ms翻转一次 */
        }

        if (events & LED_FICKER_1S_EVT)
        {
            timeoutInTicks = 1000 * (1000/Clock_tickPeriod);/* 超时时间改为1s,这样LED就会1s翻转一次 */
        }

    }
}

void eventLedFicker_post( uint32_t event )
{
    if( eventLedFickerHandle )
        Event_post(eventLedFickerHandle, event);
}
/*
 * data_process.h
 *
 *  Created on: 2018年7月5日
 *      Author: admin
 */

#ifndef APPLICATION_DATA_PROCESS_H_
#define APPLICATION_DATA_PROCESS_H_

#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Event.h>
#include <ti/sysbios/BIOS.h>

#define LED_FICKER_OFF_EVT            Event_Id_00 /* led 闪烁关闭 */
#define LED_FICKER_100MS_EVT          Event_Id_01 /* led 100MS 闪烁一次 */
#define LED_FICKER_1S_EVT             Event_Id_02 /* led 1S 闪烁一次 */

void LedFicker_createTask(void);

static void LedFicker_taskFxn(UArg a0, UArg a1);

void eventLedFicker_post( uint32_t event );

#endif /* APPLICATION_DATA_PROCESS_H_ */

官方教程链接

BLE5-Stack User’s Guide

CC2640R2F / CC2640 / CC2650入门和常见问题解答

 

posted on 2018-07-05 17:11  所长  阅读(1149)  评论(0编辑  收藏  举报

导航