完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是 ESP32 的新手,偶然发现了一个让我整日/整夜都无法入睡的问题:我试图让 esp_tls 库正常工作并尝试按照示例进行操作,但发现内存中有些东西乱七八糟:
我想连接到 https 服务器并使用示例代码 like_tls = esp_tls_conn_http_new(WEB_URL, &cfg); 但在那之后,由于写/读回调的地址非法,代码崩溃了。这让我在 esp_tls.c 中添加了一些行,比如 代码:全选 /* Connect to host */ if (esp_tls_conn_new_sync(&url[u.field_data[UF_HOST].off], u.field_data[UF_HOST].len, get_port(url, &u), cfg, tls) == 1) { printf( "DEEP UNDER 3. tls = %p, read = %p, write = %pn", tls, tls->read, tls->write ); return tls; } return NULL; 函数调用后tls指针不变,但结构内容被完全覆盖: 代码:全选 DEEP UNDER 3. tls = 0x3ffba908, read = 0x400d29f8, write = 0x400d2998 并在调用 tls = esp_tls_conn_http_new(WEB_URL, &cfg); 返回时 代码:全选 A. tls struct. tls = 0x3ffba908, read = 0x0, write = 0x0 ESP32 到底是什么可以再次用 0 覆盖结构?这两个 printf 实际上被称为分开的 2 个语句! 我添加了对 heap_caps_check_integrity_all 的调用,但没有成功。我创建了具有大量内存的任务: xTaskCreate(&wpa2, "wpa2", 4096*4, NULL, 5, NULL); 然后我向 esp_tls.c/esp_tls.h 添加了一个函数,看看是否有助于澄清问题,但情况变得更糟: 添加到 esp_tls.c 代码:全选 struct esp_tls * t1( struct esp_tls *tls ) { printf( "t1 tls = %p, read = %pn", tls, tls->read ); tls->read = 0xababab; printf( "t1 tls = %p, read = %pn", tls, tls->read ); return tls; } 在我的调用函数中: 代码:全选 struct esp_tls t_, *t; memset( &t_, 0, sizeof(esp_tls_t)); t = &t_; heap_caps_check_integrity_all( true ); t = t1( t ); heap_caps_check_integrity_all( true ); printf( "After t1 tls = %pn", t ); printf( "After t1 tls = %p, read = %pn", t, t->read ); 终端显示令人费解的 代码:全选 t1 tls = 0x3ffc9c50, read = 0x0 t1 tls = 0x3ffc9c50, read = 0xababab After t1 tls = 0x3ffc9c50 After t1 tls = 0x3ffc9c50, read = 0x0 这里的“我的”记忆发生了什么?为什么在返回 main 时库中设置的值会被覆盖? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
313 浏览 0 评论
1170 浏览 1 评论
585浏览 6评论
483浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
442浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 06:25 , Processed in 0.795562 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号