开源改变世界

使用自定义代码将固件安装到新的 ESP32 时出现问题 #863

推推 grbl 3年前 (2023-01-30) 169次浏览
关闭
BarbourSmith 打开了这个问题 2021 年 4 月 15 日 · 5 条评论
关闭

使用自定义代码将固件安装到新的 ESP32 时出现问题#863

BarbourSmith 打开了这个问题 2021 年 4 月 15 日 · 5 条评论

注释

使用自定义代码将固件安装到新的 ESP32 时出现问题 #863

首先,我关注这个项目已经一年多了,我是它的超级粉丝。您回复并解决的人们发布的问题数量惊人。这个项目摇滚。

其次,这是我的自定义机器代码中的错误,而不是对我来说坚如磐石的 GRBL ESP32 项目。我完全不知道我是如何以如此奇怪的方式打破它的,我希望能引导我朝着正确的方向前进,因为我出错了。

这是问题#330的跟进

您使用的是什么版本的固件?

Grbl_ESP32 版本 1.3a 日期 20210401

问题是否可重复?

是的

什么情况下会出现bug?

我正在研究基于 GRBL ESP32 的闭环控制器。基本上每个轴上都有带编码器的直流电机,而不是步进电机。这需要自定义代码文件和对protocol_execute_realtime().

它工作得很好,GRBL ESP32 摇滚…除了我的固件无法刷新到新的 ESP32。如果我先上传主分支固件,然后再上传我的固件,一切都很好。如果我尝试将我的固件上传到新的 ESP32,它会不断出现核心恐慌并显示错误消息。


[MSG:Grbl_ESP32 Ver 1.3a Date 20210401]
[MSG:Compiled with ESP32 SDK:v3.2.3-14-gd3e562907]
[MSG:Using machine:MASLOW 4]
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400df6cd  PS      : 0x00060930  A0      : 0x800d8a3c  A1      : 0x3ffd37d0
A2      : 0x3ffd3818  A3      : 0x3ffd380c  A4      : 0x00000000  A5      : 0x3ffd3824
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x00000000
A10     : 0x00000000  A11     : 0x00000000  A12     : 0x00000000  A13     : 0x00000001
A14     : 0x00060920  A15     : 0x00000000  SAR     : 0x0000001f  EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000

Backtrace: 0x400df6cd:0x3ffd37d0 0x400d8a39:0x3ffd37f0 0x400d8fd9:0x3ffd3880 0x400dbc07:0x3ffd38a0 0x400dbe1b:0x3ffd38c0 0x400dbe32:0x3ffd3900 0x400d7d5b:0x3ffd3950 0x400d4e77:0x3ffd3970 0x400d2dcf:0x3ffd3990 0x400fbcd3:0x3ffd39b0 0x400903c5:0x3ffd39d0
  #0  0x400df6cd:0x3ffd37d0 in FakeSetting<int>::get() at Grbl_Esp32/src/System.cpp:149
      (inlined by) system_convert_array_steps_to_mpos(float*, int*) at Grbl_Esp32/src/System.cpp:181
  #1  0x400d8a39:0x3ffd37f0 in protocol_execute_realtime() at Grbl_Esp32/src/Protocol.cpp:247
  #2  0x400d8fd9:0x3ffd3880 in protocol_buffer_synchronize() at Grbl_Esp32/src/Protocol.cpp:211
  #3  0x400dbc07:0x3ffd38a0 in Coordinates::set(float*) at Grbl_Esp32/src/Settings.cpp:752
  #4  0x400dbe1b:0x3ffd38c0 in Coordinates::setDefault() at Grbl_Esp32/src/Settings.h:244
      (inlined by) make_coordinate(CoordIndex, char const*) at Grbl_Esp32/src/SettingsDefinitions.cpp:238
  #5  0x400dbe32:0x3ffd3900 in make_settings() at Grbl_Esp32/src/SettingsDefinitions.cpp:246
  #6  0x400d7d5b:0x3ffd3950 in settings_init() at Grbl_Esp32/src/ProcessSettings.

问题是我的改变

void protocol_execute_realtime() {
    
    int32_t current_position[N_AXIS]; // Copy current state of the system position variable
    memcpy(current_position, sys_position, sizeof(sys_position));
    float print_position[N_AXIS];
    system_convert_array_steps_to_mpos(print_position, current_position);
    
    recomputePID();
    setTargets(print_position[0], print_position[1], print_position[2]);
    
    protocol_exec_rt_system();
    if (sys.suspend.value) {
        protocol_exec_rt_suspend();
    }
}

基本上我正在重新计算轴位置的 PID 控制器并更新它们的目标位置。进行此更改Protocol.cpp是阻止我上传到新的 ESP32 的原因。

有谁知道为什么我以如此奇怪的方式破坏东西或对如何修复它们有任何建议?我在使用 Platform.IO 或 Arduino IDE 进行编译时看到了问题。

谢谢!

使用自定义代码将固件安装到新的 ESP32 时出现问题 #863 BarbourSmith 添加了 漏洞 有些东西不工作标签 2021 年 4 月 15 日
使用自定义代码将固件安装到新的 ESP32 时出现问题 #863

尝试在 Config.h 中取消定义 FORCE_BUFFER_SYNC_DURING_NVS_WRITE

使用自定义代码将固件安装到新的 ESP32 时出现问题 #863

天才!

这完全修复了它。

关于您如何知道这是正确的事情或发生了什么的任何指示?