乐鑫技术交流
直播中

赵敏

7年用户 988经验值
私信 关注
[问答]

在Arduino开发环境,使用2.0以后版本开发板库以后,效率极其低下是什么原因?

本次遇见的问题就非常奇怪:首先,我用的是Arduino IDF,当前产品中,使用的MCU为 ESP32-PICO-D4,开发板还有ESP32-WROOM-32等参与测试。之前使用的开发库是1.0.6版本,没有发现有大问题,但我的应用中需要用到“MCPWM”功能,需要用到其中 mcpwm_group_set_resolution()等功能设置,在1.0.6版本中,我没有找到相关的设置,于是就用虚拟机安装了 2.0.4版本。此2.0.4版本使用过程中,出现了一些问题:
起初,我发现同一段程序,使用2.0.4版本的执行效率要比1.0.6版本低很多,不明就里我就写了一段程序,看看同一颗MCU在不同库文件版本中的差异:                                                                                                                                             
                                                                                       
使用1.0.6(2.0之前的版本基本都是)每秒可以达到 6615903的loop计数频率。
而使用 2.0.4(2.0以后的版本,试了2.0.0,2.0.4,2.0.5) 每秒只能达到 不到 140000 的loop计数频率。

这个性能差异巨大,还请有这方面经验的朋友帮忙看看,是哪里出来什么问题吗?

在此先谢谢诸位了。

回帖(1)

贾大林

2024-6-13 16:34:59
在Arduino开发环境中,从1.0.6版本升级到2.0.4版本后,可能会遇到效率低下的问题,这可能是由以下几个原因导致的:

1. **API变更**:2.0版本相较于1.0.6版本,可能对一些API进行了重构或修改,这可能导致原有代码的效率受到影响。如果2.0版本引入了新的抽象层或更复杂的实现方式,这可能会增加执行时间。

2. **库的优化程度**:2.0.4版本可能在某些方面进行了优化,但在其他方面可能还不够成熟或优化。如果1.0.6版本在某些特定任务上进行了特别优化,而2.0.4版本在这方面的优化不足,就可能导致效率降低。

3. **编译器和工具链**:不同版本的Arduino IDE可能使用了不同的编译器或工具链,这也可能影响程序的执行效率。如果2.0.4版本的工具链在某些方面不如1.0.6版本,那么即使代码相同,执行效率也可能不同。

4. **硬件支持和驱动**:2.0.4版本可能引入了对新硬件的支持,但这些新支持可能还没有完全优化,或者与现有硬件的驱动存在兼容性问题,这也可能影响程序的执行效率。

5. **内存管理**:新的版本可能采用了不同的内存管理策略,如果这些策略在某些情况下不够高效,也可能导致整体效率下降。

6. **多任务和中断处理**:如果2.0.4版本在多任务处理或中断响应方面有所改变,这可能会影响到程序的实时性能和响应速度。

7. **测试和基准**:确保你的测试是公平和准确的。有时候,效率的差异可能来自于测试方法的不同,或者测试环境的差异。

解决这些问题的方法可能包括:

- **检查文档**:查看2.0.4版本的文档,了解新版本的特性和可能的变更。
- **优化代码**:根据新版本的API和特性,重新优化你的代码。
- **更新IDE和库**:确保你使用的是最新版本的Arduino IDE和库,以获得最佳的性能和兼容性。
- **社区支持**:寻求Arduino社区的帮助,看看是否有其他人遇到了类似的问题,并找到解决方案。
- **性能分析**:使用性能分析工具来确定程序的瓶颈所在,然后针对性地进行优化。

最后,如果你发现2.0.4版本确实存在性能问题,可以考虑向Arduino社区或ESP-IDF团队报告这个问题,以便他们可以调查并可能在后续版本中解决这些问题。
举报

更多回帖

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