乐鑫技术交流
直播中

世态薄凉

8年用户 1170经验值
私信 关注
[问答]

电源管理锁在ESP32中不生效是什么原因造成的?

我做了大量的测试,发现电源管理锁在ESP32中不生效,但是在ESP32S3中可以正常工作,我测试了IDF最新的代码(release/v5.1, release/v4.4)都是这样的情况。

我希望这不是IDF的Bug,但是我实在无法解决,请大佬们帮我看下,下面是我的代码:

// 启动时
```cpp
void app_main() {
  esp_err_t ret = nvs_flash_init();
  if (ret == ESP_ERR_NVS_NO_FREE_PAGES ||
      ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
    ESP_ERROR_CHECK(nvs_flash_erase());
    ret = nvs_flash_init();
  }
  ESP_ERROR_CHECK(ret);

#if CONFIG_PM_ENABLE
#  if CONFIG_IDF_TARGET_ESP32
  esp_pm_config_esp32_t pm_config = {
#  elif CONFIG_IDF_TARGET_ESP32S2
  esp_pm_config_esp32s2_t pm_config = {
#  elif CONFIG_IDF_TARGET_ESP32C3
  esp_pm_config_esp32c3_t pm_config = {
#  elif CONFIG_IDF_TARGET_ESP32S3
  esp_pm_config_esp32s3_t pm_config = {
#  endif
    .max_freq_mhz = CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ,
    .min_freq_mhz = 80,
#  if CONFIG_FREERTOS_USE_tiCKLESS_IDLE
    .light_sleep_enable = false
#  endif
  };
  ESP_ERROR_CHECK(esp_pm_configure(&pm_config));
#endif
}
```

业务中加锁:
```
void somewhere(void) {
  static esp_pm_lock_handle_t rmt_send_task_pm_lock;
  ESP_ERROR_CHECK(esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "rmt_send_task",
                                     &rmt_send_task_pm_lock));
  ESP_ERROR_CHECK(esp_pm_lock_acquire(rmt_send_task_pm_lock));
  
  // ... 业务代码

  ESP_ERROR_CHECK(esp_pm_lock_release(rmt_send_task_pm_lock));
}
```
            

回帖(1)

手托初梦

2024-6-7 17:47:53
根据您提供的信息,您在ESP32上使用电源管理锁时遇到了问题,但在ESP32S3上可以正常工作。在分析问题之前,我们需要了解ESP32和ESP32S3之间的一些差异。ESP32S3是ESP32的升级版,具有更高的性能和更多的功能。因此,在某些情况下,ESP32S3可能具有更好的电源管理功能。

以下是一些可能导致电源管理锁在ESP32上不生效的原因:

1. **硬件差异**:ESP32和ESP32S3在硬件上可能存在差异,这可能导致电源管理锁在ESP32上不生效。例如,ESP32S3可能具有更好的电源管理硬件支持。

2. **软件版本**:您提到已经测试了IDF的release/v5.1和release/v4.4版本。尽管这些版本在ESP32S3上可以正常工作,但可能在ESP32上存在一些兼容性问题。建议您尝试使用其他版本的IDF,或者查看是否有针对ESP32的特定补丁或修复。

3. **电源管理锁的实现**:ESP32和ESP32S3可能使用不同的电源管理锁实现。这可能导致在ESP32上使用电源管理锁时出现问题。您可以查看ESP32和ESP32S3的电源管理锁实现,以确定是否存在差异。

4. **代码问题**:您提供的代码片段不完整,因此无法确定是否存在代码问题。请确保您的代码正确实现了电源管理锁的功能,并且没有遗漏任何关键步骤。

5. **其他因素**:可能还有其他因素导致电源管理锁在ESP32上不生效,例如电源供应不稳定、外部干扰等。

为了解决这个问题,您可以尝试以下方法:

1. **检查硬件**:确保您的ESP32硬件没有损坏或存在问题。

2. **更新软件**:尝试使用不同版本的IDF,或者查找是否有针对ESP32的特定补丁或修复。

3. **查看文档**:查阅ESP32和ESP32S3的官方文档,了解它们在电源管理方面的具体差异。

4. **寻求社区帮助**:在ESP32和ESP-IDF的社区论坛上寻求帮助,看看是否有其他开发者遇到了类似的问题,并了解他们是如何解决的。

5. **联系技术支持**:如果问题仍然无法解决,您可以联系ESP32的技术支持,向他们报告这个问题并寻求帮助。

希望这些建议能帮助您找到问题的原因并解决它。
举报

更多回帖

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