完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前在用AT组件包 实现WIFI、蓝牙功能的时候,联网需要先进行地址获取,因用的EC200模组和FC41的指令函数不同,所以我在设备初始化成功之后,新增任务去自动获取模组地址,通过AT+QGEtiP指令,出现如下问题: at反馈回来的地址显示为:包含两行,0D 0A为一行,很奇怪的回显方式 static void ec200x_get_netdev_info(struct rt_work *work, void *work_data) { #define AT_ADDR_LEN 32 #define EC200X_INFO_RESP_SIZE 128 at_response_t resp = RT_NULL; char ip[AT_ADDR_LEN] = {0}; char gateway[AT_ADDR_LEN] = {0}; char netmask[AT_ADDR_LEN] = {0}; char dns[AT_ADDR_LEN] = {0}; char mac[AT_ADDR_LEN] = {0}; ip_addr_t ip_addr; rt_uint32_t mac_addr[6] = {0}; rt_uint32_t num = 0; // rt_uint32_t dhcp_stat = 0; // char dns_server1[AT_ADDR_LEN] = {0}, dns_server2[AT_ADDR_LEN] = {0}; struct at_device *device = (struct at_device *)work_data; struct netdev *netdev = device->netdev; struct at_client *client = device->client; rt_err_t result = RT_EOK; int retry_num = 3; if (work != RT_NULL) { rt_free(work); } resp = at_create_resp(EC200X_INFO_RESP_SIZE, 2, rt_tick_from_millisecond(1000)); if (resp == RT_NULL) { LOG_E("no memory for resp create."); goto __exit; } while (retry_num--) { at_obj_exec_cmd(device->client, resp, "AT+QGETIP=station"); if (at_resp_parse_line_args_by_kw(resp, "+QGETIP:","+QGETIP:ip:%[^\"],gate:%[^\"],mask:%[^\"],dns:%[^\"],%*s", ip, gateway, netmask, dns) <= 0) { at_resp_parse_line_args_by_kw(resp,"+QGETIP:","+QGETIP:gate:%[^\"],%*s",gateway); at_resp_parse_line_args_by_kw(resp,"+QGETIP:","+QGETIP:ip:%[^\"],%*s",ip); continue; } else { break; } } if (retry_num < 0) { goto __exit; } LOG_D("%s device primary ip address: %s", device->name, ip); LOG_D("%s device primary gate address: %s", device->name, gateway); inet_aton(ip, &ip_addr); netdev_low_level_set_ipaddr(netdev, &ip_addr); at_netif_refresh(&ip_addr, RT_NULL, RT_NULL); // 网卡写入IP地址 /* set netdev info */ inet_aton(gateway, &ip_addr); netdev_low_level_set_gw(netdev, &ip_addr); at_netif_refresh(RT_NULL, RT_NULL, &ip_addr); // 网卡写入网关 inet_aton(netmask, &ip_addr); netdev_low_level_set_netmask(netdev, &ip_addr); at_netif_refresh(RT_NULL, &ip_addr, RT_NULL); // 网卡写入子网掩码 inet_aton(dns, &ip_addr); netdev_low_level_set_netmask(netdev, &ip_addr); at_netif_refresh(RT_NULL, &ip_addr, RT_NULL); // 网卡写入dns地址 netdev_low_level_set_dhcp_status(netdev, RT_TRUE); result = RT_EOK; // yuanyuan加入 __exit: if (resp) { at_delete_resp(resp); } } 获取地址语句为: if (at_resp_parse_line_args_by_kw(resp, "+QGETIP:","+QGETIP:ip:%[^\"],gate:%[^\"],mask:%[^\"],dns:%[^\"],%*s", ip, gateway, netmask, dns) <= 0) 但最终的结果为:用了%*s,但,后面的回显还是没有屏蔽掉,并且所有的地址全部赋值给了IP |
|
相关推荐
1个回答
|
|
没有引号,只有逗号,[^\"]改为[^,]即可
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
806 浏览 0 评论
5158 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2666 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
3008 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
32178 浏览 11 评论
73211 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 06:45 , Processed in 0.663960 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号