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.
我们作为服务器端 在Send an ATT Notification/Indication前调用申请内存接口 void *GATT_bm_alloc(uint16 connHandle, uint8 opcode, uint16 size, uint16 *pSizeAlloc)时
1).当申请的 size 设成GATT_MAX_MTU(0xFFFF)时,申请到的内存都是20字节? 不管我们syscfg中设置的MAX_PDU_SIZE是多少,且客户端发起MTU请求也是超过23字节,但最终申请到的内存都是20字节。
2).此接口分配到的内存不受MAX_PDU_SIZE限制吗? 当size设成100/200/500时,syscfg中设置的MAX_PDU_SIZE 设成69,最终可以申请到对应的内存100/200/500。
1- 对GATT_bm_alloc进行配置,为分配由参数大小指定的字节数,加上一个标头(其实际大小取决于操作码)。通过传递一个不连贯的值(0xFFFF 字节对应于 63 kBytes!),计算会溢出并且您会得到一个错误的值。
需要明确的是,即使没有这个计算溢出,系统也无法从堆中分配 63 kB,并且总是会返回错误。
分配的大小应根据需要选择,而不是默认为最大值。
2- PDU 大小和 ATT 数据包大小无关。实际上,有一些机制可以拆分和重组不适合 MTU 的 ATT 数据包。
希望对您有所帮助。