在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个数据定时发送,解决了这个问题。