DA14580 --- 如何创建一个任务

1.目的

     分析代码程序是如何执行开启广播的

2.分析


3.平台:

协议栈版本:DA1458x_SDK5.0.2

编译软件:keil 4.72

硬件平台:开发板

例子:DA1458x_SDK5.0.3\DA1458x_SDK5.0.3\DA1458x_SDK\5.0.3\projects\target_apps\ble_examples\prox_reporter\Keil_4

4.步骤

  1.在include"app_task.c"中

  

/* Default State handlers definition. */
const struct ke_msg_handler app_default_state[] =
{   
    {KE_MSG_DEFAULT_HANDLER,                (ke_msg_func_t)app_entry_point_handler},
    {APP_TIMER_API_MES1,                    (ke_msg_func_t)app_second_timer_handler}, //创建一个 定时器任务
};

在APP_TIMER_API_MES1 的定义  在app.h中  可以修改

/*
 * TYPE DEFINITIONS
 ****************************************************************************************
 */

/// APP Task messages
enum APP_MSG
{
    APP_MODULE_INIT_CMP_EVT = KE_FIRST_MSG(TASK_APP),
    
#if BLE_PROX_REPORTER
    APP_PXP_TIMER,
#endif //BLE_PROX_REPORTER

#if BLE_BAS_SERVER
    APP_BATT_TIMER,
    APP_BATT_ALERT_TIMER,
#endif //BLE_BAS_SERVER

#if HAS_MULTI_BOND
    APP_ALT_PAIR_TIMER,
#endif //HAS_MULTI_BOND

    APP_CREATE_NEW_TIMER,
    APP_CANCEL_TIMER,
    //Do not alter the order of the next messages 
    //they are considered a range
	  
    APP_TIMER_API_MES0,
    APP_TIMER_API_MES1=APP_TIMER_API_MES0+1,
    APP_TIMER_API_MES2=APP_TIMER_API_MES0+2,
    APP_TIMER_API_MES3=APP_TIMER_API_MES0+3,   APP_TIMER_API_MES4=APP_TIMER_API_MES0+4,
    APP_TIMER_API_MES5=APP_TIMER_API_MES0+5,
    APP_TIMER_API_MES6=APP_TIMER_API_MES0+6,
    APP_TIMER_API_MES7=APP_TIMER_API_MES0+7,
    APP_TIMER_API_MES8=APP_TIMER_API_MES0+8,
    APP_TIMER_API_MES9=APP_TIMER_API_MES0+9,
    APP_TIMER_API_LAST_MES=APP_TIMER_API_MES9,
    
    APP_MSG_UTIL_API_MES0,
    APP_MSG_UTIL_API_MES1=APP_MSG_UTIL_API_MES0+1,
    APP_MSG_UTIL_API_MES2=APP_MSG_UTIL_API_MES0+2,
    APP_MSG_UTIL_API_MES3=APP_MSG_UTIL_API_MES0+3,
    APP_MSG_UTIL_API_MES4=APP_MSG_UTIL_API_MES0+4,
    APP_MSG_UTIL_API_LAST_MES=APP_MSG_UTIL_API_MES4

};

2.创建一个文件夹,如下所示:

 

custom_task.c内容如下

#include "app.h"

#define GPIO_LED1_PORT  GPIO_PORT_1
#define GPIO_LED1_PIN   GPIO_PIN_0

void  Led_init(void)
{
		GPIO_ConfigurePin(GPIO_LED1_PORT,GPIO_LED1_PIN,OUTPUT,PID_GPIO,false);
}


int app_second_timer_handler(ke_msg_id_t const msgid,
                                   void const *param,
                                   ke_task_id_t const dest_id,
                                   ke_task_id_t const src_id){
	static bool  flag = 0 ;
	if(flag == 0)
	{
	 flag = 1 ;
   GPIO_SetActive  (GPIO_LED1_PORT,GPIO_LED1_PIN);
	}
	else
	{
	 flag = 0 ;
   GPIO_SetInactive(GPIO_LED1_PORT,GPIO_LED1_PIN);
	}
	// while(1);
	app_timer_set(APP_TIMER_API_MES1,TASK_APP,100);	
}	

#include"custom_task.h"内容如下

#ifndef __led__h
#define __led__h



#include "app_easy_timer.h"


void  Led_timer_init(void);
void  Led_init(void);

int app_second_timer_handler(ke_msg_id_t const msgid,
                                   void const *param,
                                   ke_task_id_t const dest_id,
                                   ke_task_id_t const src_id);







#endif

3.在usar_periph_setup.c里面

#include "rwip_config.h"             // SW configuration
#include "user_periph_setup.h"            // periphera configuration
#include "global_io.h"
#include "gpio.h"
#include "uart.h"                    // UART initialization

#include "user_proxr.h"

#include "custom_task.h" //加入头文件
在外设初始化函数中

void GPIO_reservations(void)
{

/*
* Application specific GPIOs reservation
*/    
#if BLE_PROX_REPORTER
    #if USE_PUSH_BUTTON
    RESERVE_GPIO( PUSH_BUTTON, GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, PID_GPIO);   
    #endif // USE_PUSH_BUTTON
    RESERVE_GPIO( GREEN_LED, GPIO_ALERT_LED_PORT, GPIO_ALERT_LED_PIN, PID_GPIO);
#endif
#if BLE_BAS_SERVER && USE_BAT_LEVEL_ALERT
	//Setup LED GPIO for battery alert
    RESERVE_GPIO( RED_LED, GPIO_BAT_LED_PORT, GPIO_BAT_LED_PIN, PID_GPIO);
#endif    
#if (BLE_SPOTA_RECEIVER)

    #if !defined(__DA14583__)
    RESERVE_GPIO(SPI_EN,  SPI_EN_GPIO_PORT,  SPI_EN_GPIO_PIN,  PID_SPI_EN);
    RESERVE_GPIO(SPI_CLK, SPI_CLK_GPIO_PORT, SPI_CLK_GPIO_PIN, PID_SPI_CLK);
    RESERVE_GPIO(SPI_DO,  SPI_DO_GPIO_PORT,  SPI_DO_GPIO_PIN,  PID_SPI_DO);
    RESERVE_GPIO(SPI_DI,  SPI_DI_GPIO_PORT,  SPI_DI_GPIO_PIN,  PID_SPI_DI);
    #else
        // The DA14583 GPIOs that are dedicated to its internal SPI flash
        // are automaticaly reserved by the GPIO driver.
    #endif   
    // Example GPIO reservations for an I2C EEPROM.
    //RESERVE_GPIO( I2C_SCL, GPIO_PORT_0, GPIO_PIN_2, PID_I2C_SCL);
    //RESERVE_GPIO( I2C_SDA, GPIO_PORT_0, GPIO_PIN_3, PID_I2C_SDA);
#endif
<strong>    Led_init();   //添加led灯初始化函数</strong>
}
#endif

4.在#include "app_default_handlers.h"中找到广播开始函数 开启定时的led的事件

/**
 ****************************************************************************************
 * @brief The advertise operation used by the rest of default handlers.
 * @return None.
 ****************************************************************************************
 */
void default_advertise_operation(void)
{
        if (user_default_hnd_conf.adv_scenario==DEF_ADV_FOREVER)
            app_easy_gap_undirected_advertise_start();
        else if (user_default_hnd_conf.adv_scenario==DEF_ADV_WITH_TIMEOUT)
            app_easy_gap_undirected_advertise_with_timeout_start(user_default_hnd_conf.advertise_period,NULL);
				<strong>app_timer_set(APP_TIMER_API_MES1,TASK_APP,100); //开启led时间函数</strong>
}

这样 过来100*10ms就会跳到app_second_timer_handler函数了。

函数里面开始了led等闪烁。







  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DA1458x软件平台开发手册 DA1458x software platform Reference 3.2如何使用此文档 本文档的重点是作为参考,即开发人员不需要通读整个文档;读者的关键是熟悉本文中描述的概念,以便在开发过程中能够使用软件开发人员的指南,以获得所需的结果。 嵌入式,是新的和/或芯片对话框的da1458x系统软件开发平台(SOC)建议审查的内容,然后通过阅读从3.1节到4.8节,然后11节熟悉开发环境的支持。然后建议阅读和使用文档[ 15 ]。如果有人需要更好的理解,并且想深入研究某个特定的主题,他/她可以回到这个文档中,在这个引用中涉及这个主题的特定章节。为了更深入的分析,这个参考文件指向附录或其他文档中更深入的技术说明。 更详细地叙述具体的主题。 这个参考文档不打算提供对蓝牙低能耗的透彻理解,它既不包括内部数据的组织方式,也不涉及蓝牙设备如何相互通信以及设计支持的设计和应用时可能需要的关键设计决策和权衡。 它打算但是提供给软件开发商足够的理解对话的da1458x平台高级API的方法为BLE及其外围设备以及信心如何使发展更快、更好的应用程序时,使用da1458x SoC。蓝牙低能耗技术(2010)是蓝牙专用兴趣小组(SIG)发布的蓝牙4版核心规范的一部分。从4版本开始,蓝牙标准支持两种不同的无线技术系统:蓝牙低能量和基本利率(BR),通常被称为基本速率/增强数据率(BR / EDR)。 在蓝牙低功耗设计的早期阶段,SIG致力于以最小的功耗开发低复杂度的无线标准,并提供低带宽。 优化,从而使低成本应用。在这种情况下,蓝牙低能量被设计用来每次传输非常小的数据包,而消耗的功率明显少于 类似的BR / EDR设备。此外,它的设计还支持高效率的实现,具有严格的能源和硅预算,促进应用程序使用一个单一的硬币电池延长了一段时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值