完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用AT组件怎么收透传过来的数据呢,没有头没有尾,不能用URC; rt_size_t at_client_recv(char *buf, rt_size_t size,rt_int32_t timeout); 这个函数也只能再URC的回调里使用。该怎么解决这个问题 |
|
相关推荐
2个回答
|
|
|
|
|
|
深受启发,我的方法是这样的,修改struct at_client 这个结构体,增加几个参数,
struct at_client { rt_device_t device; at_status_t status; char end_sign; rt_uint8_t at_mode; //0表示AT指令,1表示透传 rt_sem_t recvd_data; //透传模式下收到数据,通知用户解析 void (*user_data); //配置设备参数,用户添加 /* the current received one line data buffer */ char *recv_line_buf; /* The length of the currently received one line data */ rt_size_t recv_line_len; /* The maximum supported receive data length */ rt_size_t recv_bufsz; rt_sem_t rx_notice; rt_mutex_t lock; at_response_t resp; rt_sem_t resp_notice; at_resp_status_t resp_status; struct at_urc_table *urc_table; rt_size_t urc_table_size; rt_thread_t parser; }; 用新增加的信号量recvd_data通知用户进程处理; 在串口接收回调函数增加判断,是否为透传模式,给出不同的信号量; static rt_err_t at_client_rx_ind(rt_device_t dev, rt_size_t size) { int idx = 0; for (idx = 0; idx < AT_CLIENT_NUM_MAX; idx++) { if (at_client_table[idx].device == dev && size > 0) { //此处修改,增加判断是否为透传模式 if(at_client_table[idx].at_mode<1) rt_sem_release(at_client_table[idx].rx_notice); else rt_sem_release(at_client_table[idx].recvd_data); } } return RT_EOK; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
1618 浏览 0 评论
1486 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
6723 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1867 浏览 0 评论
3638 浏览 0 评论
78370 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-25 07:56 , Processed in 0.535258 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号