完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试在 ESP8266 中使用 C++ 进行编译。经过大量搜索,我已经设法从 jcmvbkbc 安装了 xtensa c++ 编译器(当然是很棒的工作),其中包括:
所以,完成这些事情后,我可以毫无错误地编译我的 C++ 代码,但是,当我将它上传到我的 NodeMCU 时,它会抛出一个致命异常 29。经过一些代码更改和许多实验后,我发现 创建对象导致异常。为了获得更多信息,我使用了 Espressif Github 的 GDB Stub。然后,我尝试在 gdbstub_init() 之后创建一个对象,我使用 GDB 中的 step 函数检查了每一行代码,我得到了这个输出: 代码:全选0x4010730b in gdbstub_do_break_breakpoint_addr () (gdb) step Single stepping until exit from function gdbstub_do_break_breakpoint_addr, which has no line number information. sgdbstub_init () at gdb/gdbstub.c:785 785 } (gdb) step user_init () at user_main.cpp:156 156 initProc(); (gdb) step Warning: Cannot insert breakpoint 0. Error accessing memory address 0x4023e0b3: Error de entrada/salida. initProc () at user_main.cpp:22 22 void ICACHE_FLASH_ATTR initProc(){ (gdb) step 23 proc = new MQTTProcessor(); (gdb) step 22 void ICACHE_FLASH_ATTR initProc(){ (gdb) step 23 proc = new MQTTProcessor(); (gdb) step Warning: Cannot insert breakpoint 0. Error accessing memory address 0x4023e282: Error de entrada/salida. operator new (size=32) at cplusplus.cpp:13 13 return os_malloc(size); (gdb) step 12 size = ((size + 3) & ~((size_t)0x3)); (gdb) step 13 return os_malloc(size); (gdb) step 11 void* ICACHE_FLASH_ATTR operator new(size_t size) { (gdb) step 13 return os_malloc(size); (gdb) step 11 void* ICACHE_FLASH_ATTR operator new(size_t size) { (gdb) step 13 return os_malloc(size); (gdb) step Warning: Cannot insert breakpoint 0. Error accessing memory address 0x4023e298: Error de entrada/salida. 0x40100cd4 in pvPortMalloc () (gdb) step Single stepping until exit from function pvPortMalloc, which has no line number information. Program received signal SIGILL, Illegal instruction. 0x40100ced in pvPortMalloc () (gdb) step Single stepping until exit from function pvPortMalloc, which has no line number information. Can't send signals to this remote system. SIGILL not sent. 0x4010728d in gdbstub_icount_ena_single_step () (gdb) step Single stepping until exit from function gdbstub_icount_ena_single_step, which has no line number information. gdbHandleCommand (cmd=0x3ffee9e1 "m3ffee9e9,8", len=) at gdb/gdbstub.c:395 395 return ST_CONT; (gdb) step gdbReadCommand () at gdb/gdbstub.c:516 516 } (gdb) step gdb_exception_handler (frame=0x3ffff970) at gdb/gdbstub.c:630 630 ets_wdt_enable(); (gdb) step Program received signal SIGINT, Interrupt. 0x4000df68 in ?? () (gdb) step Cannot find bounds of current function (gdb) 所以,似乎是 pvPortMalloc 导致了异常。 有任何想法吗? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
343 浏览 0 评论
1192 浏览 1 评论
587浏览 6评论
484浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
443浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 13:58 , Processed in 0.775227 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号