This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2642R: 蓝牙申请ATT内存API GATT_bm_alloc

Part Number: CC2642R

我们作为服务器端 在Send an ATT Notification/Indication前调用申请内存接口 void *GATT_bm_alloc(uint16 connHandle, uint8 opcode, uint16 size, uint16 *pSizeAlloc)时

1).
当申请的 size 设成GATT_MAX_MTU0xFFFF)时,申请到的内存都是20字节? 不管我们syscfg中设置的MAX_PDU_SIZE是多少,且客户端发起MTU请求也是超过23字节,但最终申请到的内存都是20字节。
2).
此接口分配到的内存不受MAX_PDU_SIZE限制吗? 当size设成100/200/500时,syscfg中设置的MAX_PDU_SIZE 设成69,最终可以申请到对应的内存100/200/500

  • 感谢您对TI产品的关注!已为您咨询TI资深工程师,一旦得到回复会立即回复给您。

  • 1- 对GATT_bm_alloc进行配置,为分配由参数大小指定的字节数,加上一个标头(其实际大小取决于操作码)。通过传递一个不连贯的值(0xFFFF 字节对应于 63 kBytes!),计算会溢出并且您会得到一个错误的值。
    需要明确的是,即使没有这个计算溢出,系统也无法从堆中分配 63 kB,并且总是会返回错误。
    分配的大小应根据需要选择,而不是默认为最大值。

    2- PDU 大小和 ATT 数据包大小无关。实际上,有一些机制可以拆分和重组不适合 MTU 的 ATT 数据包。

    希望对您有所帮助。