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

  • 相关阅读:
    推荐2个Mac OS X上的JSON工具
    20个ios登陆界面
    IOS 真机调试和发布相关证书
    IOS学习路径
    Shell 语法和tips -- 持续更新
    Shell if 参数含义列表
    SimpleCursorAdapter 原理和实例
    Android Service VS AsyncTask VS Thread
    转:Intent 操作常用URI代码示例
    转:Android preference首选项框架
  • 原文地址:https://www.cnblogs.com/-yjx-/p/8383755.html
Copyright © 2020-2023  润新知