完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先从机和主机的gattprofile.h文件中的SIMPLEPROFILE_CHAR1_LEN均变为5,但接受时只有第一个数据正确,谢谢发送大佬指教!
函数: uint8 BLE_Send_Txt[5]={10,15 ,32,86,65}; static uint16 connect0_ProcessEvent( uint8 task_id, uint16 events ) { if ( events & START_READ_OR_WRITE_EVT ) { if( centralConnList[CONNECT0_ITEM].procedureInProgress == FALSE ) { if( centralDoWrite ) { // 写 attPrepareWriteReq_t req; req.handle = centralConnList[CONNECT0_ITEM].charHdl; req.len = SIMPLEPROFILE_CHAR1_LEN; req.pValue = GATT_bm_alloc(centralConnList[CONNECT0_ITEM].connHandle,ATT_WRITE_REQ,req.len,NULL,0); if ( req.pValue != NULL ) { *req.pValue = BLE_Send_Txt[0]; if(GATT_WriteLongCharValue(centralConnList[CONNECT0_ITEM].connHandle,&req,centralTaskId) == SUCCESS) { centralConnList[CONNECT0_ITEM].procedureInProgress = TRUE; centralDoWrite = !centralDoWrite; tmos_start_task(centralConnList[CONNECT0_ITEM].taskID, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY); } else { GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ); } } } 接收方是这样的 uint8 txt[SIMPLEPROFILE_CHAR1_LEN]; 静态无效simpleProfileChangeCB(uint8 paramID,uint8 *pValue,uint16 len) { switch(paramID) { case SIMPLEPROFILE_CHAR1: { tmos_memcpy(txt,pValue,len); PRINT("profile ChangeCB CHAR1.. "); 休息; } case SIMPLEPROFILE_CHAR3: { tmos_memcpy( txt, pValue, len ); PRINT("profile ChangeCB CHAR3.. "); 休息; } 默认值: // 不应该到达这里! 休息; } } 但调试结果是这样的: |
|
相关推荐
1个回答
|
|
wch的ble 协议栈里面,大量的使用了动态内存, 其中数据的传输就需要用到.
在发送前,需要调用GATT_bm_alloc 函数,然后传入相关参数申请内存,如果内存申请成功,再把要传输的数据拷贝进去,然后再调用gatt的相关传输函数传输数据. 在你的代码里面,你申请内存成功后(req.pValue != NULL), 对内存赋值用的是: *req.pValue = BLE_Send_Txt[0]; 学过c语言的我们都知道, 这是一句的结果等价于: req.pValue[0] = BLE_Send_Txt[0]; 仅此而已, 所以,你说的5个byte就第一个byte正常,是合理的. 上面的代码,如果需要5个byte都正常,下面的代码可以任选一种: 1, 当数组操作,循环赋值: for(uint32_t i=0;i<5;i++) { req.pValue = BLE_Send_Txt; } 2,调用标准库内存copy: memcpy(req.pValue,BLE_Send_Txt,5); 3,使用协议栈提供的内存copy函数: tmos_memcpy(req.pValue,BLE_Send_Txt,5); |
|
|
|
只有小组成员才能发言,加入小组>>
467 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2871 浏览 2 评论
2359 浏览 1 评论
810浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
637浏览 1评论
495浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
360浏览 1评论
636浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 11:31 , Processed in 1.009121 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号