3D打印Marlin2.0固件源代码分析之参数存储方式实现
扫描二维码
随时随地手机看文章
干货福利,第一时间送达!
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
中,最终会调用到具体的存储硬件的读写函数。往期精彩
开源Marlin2.x源代码架构学习笔记步进电机驱动在3D打印应用的学习笔记(一)光固化3D打印悬空和支撑讲解3D打印过程与最近的学习成果
两个最常用的3D打印机切片软件
3D打印机marlin固件框架与GCode命令总结
3D打印机Marlin固件串口功能解析和程序移植
让野火F103开发板支持Marlin2.0固件是什么体验?3D打印主控板成员 1
C语言映射表在嵌入式串口解析、UI设计中的应用(值得收藏并实践的精华帖)
觉得本次分享的文章对您有帮助,随手点
[在看]
并转发分享,也是对我的支持。