3D打印Marlin2.0固件源代码分析之参数存储方式实现

简介: 3D打印Marlin2.0固件源代码分析之参数存储方式实现

640.png

1、Marlin2.0 参数存储M命令

Marlin2.0 的存储功能主要依靠 EEPROM 来进行,Marlin也提供了相应的M代码来协助 3D 打印爱好者 进行调试,这些参数配置完毕以后可以存储在单片机的 EEPROM 中,关于 EEPROM 的操作,主要有如下 指令:

640.png

比如我们可以通过串口来更改 PID 值、步进电机运行的加速度和最大速度的设置,设置完毕以后输入以 上对应的存储指令 M500 即可完成参数的保存,如下所示:

640.png

以上这些参数都可以通过串口进行修改,有一些支持LCD的机器,也可以通过LCD进行修改,修改参数 后可以调用 M503 获取设置的结果:

640.png

但是这个结果是当前生效,当设备断电重启后,设置的参数也就消失了,如果想要断电保存,则需要设 置完参数以后调用 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设计中的应用(值得收藏并实践的精华帖)

目录
相关文章
|
自然语言处理 数据可视化 数据挖掘
【数据分析与可视化】Scipy中的图像处理信号处理讲解与实战(附源码 超详细)
【数据分析与可视化】Scipy中的图像处理信号处理讲解与实战(附源码 超详细)
326 0
|
存储 编解码 监控
G-Code 详解
玩过一段时间3D打印机的朋友,都会接触到G-code文件。所谓G-code文件, 指的是3D模型在进入3D打印机实际打印之前,必须要经过切片器处理而成的一种中间格式文件。
5943 0
|
6月前
|
机器学习/深度学习 传感器 监控
基于多模态感知的工业安全行为识别技术突破
本项目通过分层特征增强架构,突破工业安全监控中微小目标检测难、行为理解缺失和响应延迟高等技术瓶颈。采用动态ROI聚焦、时空域建模与联邦学习等创新技术,实现厘米级行为捕捉,准确率提升300%,隐患识别响应速度提高112倍,并已在危化、电力、医疗等行业落地应用,具备广阔推广前景。
389 0
|
4月前
|
机器学习/深度学习 数据采集 编解码
Stable Video Diffusion:将潜在视频扩散模型扩展到大规模数据集——论文阅读
Stable Video Diffusion(SVD)是Stability AI提出的高分辨率视频生成模型,基于潜在扩散框架,通过三阶段训练与严格数据筛选,在文本到视频和图像到视频任务中实现高质量生成。论文系统研究了数据质量对模型性能的影响,提出级联切分检测、运动评分过滤、合成字幕优化等策略,并引入线性递增引导等创新技术,显著提升生成稳定性与视觉保真度。
1060 4
|
移动开发 数据安全/隐私保护 SEO
(H5自适应)响应式相册图片网站模板 图片壁纸类网站源码下载
1:网站的代码都是纯手工DIV+CSS、代码精简有利于SEO优化。 2:自适应和代码适配两种模式,新版的HTML5技术,给您高端视觉体验。 3:全站每一个细节都做了SEO框架布局,栏目及文章页均可独立设置标题/关键词/描述。 4:附带测试数据、不需安装、上传即用、轻松简单。 5:后台直接修改LOGO、轮播、联系方式、传真、邮箱、地址等,修改更加方便。
482 11
|
传感器 算法 安全
开源Marlin2.x源代码架构学习笔记
开源Marlin2.x源代码架构学习笔记
1550 0
|
IDE 开发工具 Python
8-15| _ctypes.COMError: (-2147352567, '发生意外。', ('无法获取 Document 对象', 'AutoCAD', 'D:\\Program Files\\A
8-15| _ctypes.COMError: (-2147352567, '发生意外。', ('无法获取 Document 对象', 'AutoCAD', 'D:\\Program Files\\A
|
数据可视化 算法 机器人
实例10:四足机器人运动学逆解可视化与实践
本文是关于四足机器人逆运动学(IK)的实例教程,介绍了逆运动学的概念、求解方法、多解情况和工作空间,并通过Python编程实现了简化的mini pupper平面二连杆模型的逆运动学可视化,包括单腿舵机的校准和动态可视化运动学计算结果。
1306 0
|
前端开发 JavaScript API
说一说你对混合开发(Hybrid Development)的了解。
混合开发(Hybrid App)融合Web与原生技术,实现跨平台开发,降低多平台工作量。使用JavaScript等Web技术提升开发效率,通过React Native、Flutter等框架结合原生API。虽性能略逊于原生,但体验接近,且更新便捷、成本效益高。丰富的社区支持和成功案例(如网易云音乐、闲鱼)证明其可行性。随着技术进步,混合开发的潜力和应用将不断扩大。
793 1