DA14580发送数据的隐患

在gattc_write_cmd_ind_handler这个函数中调用发送函数

void custs_send_data(uint8_t data)
{
  uint8_t *value = &data;
  attmdb_att_set_value((custs2_env.shdl+CUST2_IDX_INDICATEABLE_VAL), 1, (uint8_t*)value);
  prf_server_send_event((prf_env_struct *)&(custs2_env.con_info), false, (custs2_env.shdl+CUST2_IDX_INDICATEABLE_VAL));
}

以前一直都是发送一条信息,后面需要发送一大堆信息,分批发送,我便想到了用for循环的方式进行发送

for(count=0;count<24;count++)

{

...

custs_send_data(...);

...

}

后来发现问题,数据发送出去之后,全部都是一样的24个数据,经过测验,发现问题在发送函数

attmdb_att_set_value((custs2_env.shdl+CUST2_IDX_INDICATEABLE_VAL), 1, (uint8_t*)value);

↑这个函数是在调用的时候就将值设置好了

 prf_server_send_event((prf_env_struct *)&(custs2_env.con_info), false, (custs2_env.shdl+CUST2_IDX_INDICATEABLE_VAL));

然后调用这个函数发送出去,但是这个函数是类似一个任务的东西,当MCU没空的时候是不会调用的,所以累积了24个任务在等待,等MCU一有空,就立马发送出去,但是数据已经被填充了,然后这24个数据就拿着同样的数据进行发送

解决办法:

static void timingData_sendData(void)
{
  app_easy_timer(1,timingData_sendDataCall);
}

定义了一个10ms发送一次的定时器,将24个数据定时发送,解决了这个问题。

posted @ 2018-01-30 10:10  只因在风中  阅读(1150)  评论(0编辑  收藏  举报