乐鑫技术交流
直播中

欲望都市

9年用户 881经验值
擅长:可编程逻辑
私信 关注
[问答]

使用char指针参数的os_printf会导致异常怎么解决?

我正在尝试调试一些代码,需要显示字符指针的内容。但每次它都会给出一个例外。

static void ICACHE_FLASH_ATTR someCb(const char *data){
   os_printf( "LED = %s", *data);
}


致命异常 28 (LoadProhibitedCause):
epc1=0x40245abe、epc2=0x00000000、epc3=0x40246461、excvaddr=0x00000023、depc=0x00000000
ÿ
ets 2013-01-8,第一个原因:2,开机模式:(1,6)

有没有办法访问这个指针的内容?

顺便问一下,有没有可下载的xtensa-lx106-elf-gdb调试器?
               

回帖(1)

李芳

2024-7-11 11:59:20
看起来您在使用os_printf函数时遇到了一个异常。这可能是由于多种原因引起的,例如指针错误、内存访问违规等。让我们逐步解决这个问题。

1. 首先,检查您的指针是否正确。在您的代码中,您使用了`*data`,这可能会导致问题,因为`data`已经是一个指向字符的指针。您应该直接使用`data`而不是`*data`。将代码更改为:

```c
static void ICACHE_FLASH_ATTR someCb(const char *data) {
    os_printf("LED = %s", data);
}
```

2. 确保`data`指针指向有效的内存区域。如果`data`是一个空指针或指向非法内存区域,这可能会导致异常。在调用`someCb`函数之前,检查`data`指针是否有效。

3. 关于xtensa-lx106-elf-gdb调试器,您可以在Espressif的Git仓库中找到适用于ESP8266和ESP32的OpenOCD版本,其中包括xtensa-lx106-elf-gdb调试器。请访问以下链接以获取更多信息和下载链接:

[Espressif OpenOCD](https://github.com/espressif/openocd-esp32)

4. 如果问题仍然存在,请使用调试器逐步执行代码,检查变量和内存访问。这将帮助您找到导致异常的确切位置。

5. 确保您的系统和工具链是最新的,以避免任何已知的问题或错误。

通过遵循这些步骤,您应该能够解决在使用os_printf函数时遇到的异常问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分