跳到主要内容

app_easy_timer不适用于user_app_on_init

DA14530和DA14531.

3个月前

app_easy_timer不适用于user_app_on_init

张贴了gustavo.laureano.65分 5回复
0旋转

你好,

我跟着本指南:

http://lpccs-docs.dialog-semiconductor.com/Tutorial_SDK6/adv_data.html

要使广告数据动态,但由于某种原因,在从user_app_on_init调用时无法启动计时器,但在从另一个地方调用时工作(如on_disconnect)

在被称为内app_on_init功能(与断点检查),并没有落入“返回EASY_TIMER_INVALID_TIMER”(也检查与断点)

任何想法为什么要从init开始的计时器?

谢谢

此致
古斯塔沃

接受答案!

3个月前

PM_DIALOG.

嗨gustavo,

谢谢你的问题。我建议在user_app_on_init()之后设置计时器。请尝试以下更改:

在user_config.h:

#定义USER_ADVERTISE_DATA “\ X12 \ X21 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X11 \ X00”

在user_callback_config.h:

.default_operation_adv = user_app_adv_start,.app_on_init = user_app_on_init,

在user_empty_peripherala_template.h:

void user_app_adv_start(void);void user_app_on_init(void);

在user_empty_peripheral_template.c:

uint8_t my_counter __section_zero(“保留_mem_area0”);// @RETENTION MEMORY timer_hnd app_adv_data_update_timer_used __SECTION_ZERO( “retention_mem_area0”);void update_add_data(){my_counter ++;//复制计数器的值在广告数据(忽略扫描响应数据)uint8_t adv_data [USER_ADVERTISE_DATA_LEN];memcpy(&adv_data,user_advertise_data,user_advertise_data_len);//加载计数器值到广告数据adv_data的最后八位字节[USER_ADVERTISE_DATA_LEN -1] = my_counter;//更新广告数据app_easy_gap_update_adv_data(adv_data,USER_ADVERTISE_DATA_LEN,NULL,NULL);//重新启动定时器app_adv_data_update_timer_used = app_easy_timer(100,update_adv_data);//一个第二单触发定时器}空隙user_app_adv_start(无效){app_adv_data_update_timer_used = app_easy_timer(100,update_adv_data);//一秒钟单拍计时器app_easy_gap_undircted_advertise_start(); } void user_app_on_init() { my_counter = 0; // After we have initialized our variable, we call the default handler default_app_on_init(); }

谢谢,PM_DIALOG.

3个月前

gustavo.laureano. 65分

嗨PM_DIALOG.

谢谢,它有效,当我从adv_start用户回调开始时,我所做的唯一更改就是始终取消任何以前的计时器,否则它正在生成并行运行的多个计时器实例:

空隙user_app_adv_start(无效){app_easy_timer_cancel(app_adv_data_update_timer_used);app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO,adv_data_update_timer_cb);//一秒钟单拍计时器app_easy_gap_undircted_advertise_start();}

但是你有什么想法为什么无法从App_init回调开始定时器?
我搜索了文档,没有明确的原因,为什么它不起作用。

另一个(无关)问题:
我不得不使用UART RX当使用UART ROM代码的DA14531(与和#undef CFG_UART1_SDK),它永远不会调用注册的回调,当我设置为使用SDK UART实现(#定义CFG_UART1_SDK)只能中断问题,但我找不到任何信息,说明为什么ROM代码无法正常工作,这是ROM代码上的错误吗?或者我需要在处理中断时始终使用编译的驱动程序?

谢谢!
古斯塔沃

3个月前

PM_DIALOG.

嗨gustavo.laureano,

您能否分享user_app_on_init()和您在侧面使用的UART函数?

谢谢,PM_DIALOG.

3个月前

gustavo.laureano. 65分

以下是相关零件:

user_periph_setup.c上的外设初始化

静态常量uart_cfg_t uart_cfg = {.baud_rate = UART_BAUDRATE_115200,.data_bits = UART_DATABITS_8,.parity = UART_PARITY_NONE,.stop_bits = UART_STOPBITS_1,.auto_flow_control = UART_AFCE_DIS,.use_fifo = UART_FIFO_DIS,.tx_fifo_tr_lvl = UART_TX_FIFO_LEVEL_0,.rx_fifo_tr_lvl = UART_RX_FIFO_LEVEL_0,.intr_priority = 2,};void periph_init(void){//在Boost模式下,使DCDC转换器能够为已使用的GPIOS Syscntl_dcdc_turn_oN_in_in_In_Boost提供vbat_high供应Vbat_high(syscntl_dcdc_level_3v0);// rom修补程序patch_func();//初始化外设UART_INITIALIZE(UART1,&UART_CFG);gpio_configurepin(uartx_tx_gpio_port,uartx_tx_gpio_pin,输出,pid_uart1_tx,false);GPIO_CONFIGUREPIN(UARTX_RX_GPIO_PORT,UARTX_RX_GPIO_PIN,INPUT,PID_UART1_RX,FALSE);//启用pads gpio_set_pad_latch_en(true);}

我的user.c上的代码:

静态无效uart_read_cb(uint16_t长度){//按下接收字节到环形缓冲ringbuffer_add(&ringbuffer_inst_rx,&rxbuf_cb);//启动下一个异步读取1个字符。UART_RECEIVE(UART1,&RXBUF_CB,1,UART_OP_INTR);}空隙user_app_on_init(无效){ringbuffer_init(&ringbuffer_inst_rx,ringbufer_buffer_rx,的sizeof(uint8_t),64);UART_REGISTER_RX_CB(UART1,UART_READ_CB);UART_RECEIVE(UART1,&RXBUF_CB,1,UART_OP_INTR);/ *启动UART接收* / default_app_on_init();}

(阻塞模式与uart_send)总是与工作中断,只有当我#定义CFG_UART1_SDK作品发送数据,而接收数据,否则uart_read_cb不会被调用

2个月前

PM_DIALOG.

嗨gustavo.laureano,

谢谢你的评论。要使用UART_REGISTER_RX_CB(),应定义CFG_UART1_SDK宏。ROM驱动程序与您看到此行为的原因不同。

谢谢,PM_DIALOG.