1、Marlin2.0 参数存储M命令
Marlin2.0 的存储功能主要依靠 EEPROM 来进行,Marlin也提供了相应的M代码来协助 3D 打印爱好者 进行调试,这些参数配置完毕以后可以存储在单片机的 EEPROM 中,关于 EEPROM 的操作,主要有如下 指令:
比如我们可以通过串口来更改 PID 值、步进电机运行的加速度和最大速度的设置,设置完毕以后输入以 上对应的存储指令 M500 即可完成参数的保存,如下所示:
以上这些参数都可以通过串口进行修改,有一些支持LCD的机器,也可以通过LCD进行修改,修改参数 后可以调用 M503 获取设置的结果:
但是这个结果是当前生效,当设备断电重启后,设置的参数也就消失了,如果想要断电保存,则需要设 置完参数以后调用 M500 命令进行保存,然后通过 M501 读取保存的结果,如果想恢复成原来的参数,也 可以通过 M502 命令将参数恢复到出厂前。
2、Marlin2.0 参数存储方式代码分析
当我们在串口输入M代码的时候,程序会执行到Gcode.cpp
中对应的 case 分支:
case 'M': switch (parser.codenum) { //.... case 500: M500(); break; // M500: 将设置好的参数保存到EEPROM中 case 501: M501(); break; // M501: 从EEPROM中读取设置参数 case 502: M502(); break; // M502: 恢复参数为出厂前的状态 #if DISABLED(DISABLE_M503) case 503: M503(); break; // M503: 打印当前设置的参数(不是从EEPROM中读取) #endif //... ... }
对应的M代码实现位于Marlin/src/gcode/eeprom/M500-M504.cpp
中:
//M500:将设置好的参数保存到EEPROM中 void GcodeSuite::M500() { (void)settings.save(); //MarlinSettings settings; } //M501:从EEPROM中读取设置参数 void GcodeSuite::M501() { (void)settings.load(); //MarlinSettings settings; } //M502:恢复参数为出厂前的状态 void GcodeSuite::M502() { (void)settings.reset(); //MarlinSettings settings; } #if DISABLED(DISABLE_M503) //M503:打印当前设置的参数(不是从EEPROM中读取) void GcodeSuite::M503() { (void)settings.report(!parser.boolval('S', true)); //MarlinSettings settings; } #endif // !DISABLE_M503
Marlin的参数存储主要是依靠 MarlinSettings 类来实现,位于Marlin/src/module/Settings.h
以 及Marlin/src/module/Settings.cpp
中,最终会调用到具体的存储硬件的读写函数。
往期精彩
让野火F103开发板支持Marlin2.0固件是什么体验?3D打印主控板成员+1