浅谈Marlin2.0

2023-05-16

简介

marlin固件发展至今已经形成了三个比较重大的版本:1.0版,1.1版,2.0版。
我接触marlin固件已经有一段时间了,原来一直对于marlin固件的结构和应用平台一直不是很理解:为什么marlin固件要做的这么臃肿(包含许多单片机平台并包含许多机器结构),而且要用在arduino的8位单片机平台?

  • 对于第一个问题我从marlin源代码页面下的说明中找到了答案:保持兼容性和单一代码库对我们很重要,因为我们要确保功能和补丁得到尽可能多的测试和关注,并且所有平台都始终受益于最新改进。如果要建立多套代码维护便会变得异常不方便。(对于这个问题的产生的缘由可能是我一直想深入学习marlin固件的内部代码机制,又苦于看不懂源码产生的吧!)。

  • 对于第二个问题我想一直在使用arduino的人一定会深有感触:Arduino建立的一个很完善的生态非常便利于开发。

最初marlin1.0,1.1固件主要应用在基于arduino的单片机上,主要工作在于修复bug添加新功能,工程结构不是很清晰。marlin1.0,1.1版本虽然已经成为了历史,但还是很有学习的价值的。如果想深入研究marlin工作机制又没有很深的C++基础,marlin1.0版本的固件便是一个很不错的选择,虽然部分代码也是用C++写的,但大多数代码都符合C语言写代码的思维习惯。
marlin2.0版本固件经历了bug修复,已经有正式版发布了。官方对2.0版本的固件的介绍很到位:Marlin 2.0通过增加对更快的32位和基于ARM的板的支持,同时改善了对8位AVR板的支持,将这种流行的RepRap固件提升到了一个新的水平。

从代码学习者的思维来看marlin2.0固件(for me):真的看不懂!我想看某一块代码的实现,各种跳转理不清这块代码的思路。
从使用者的角度:太方便了,只需要简单的配置便可以切换不同的开发板。
总而言之,marlin2.0固件代码更抽象了结构更清晰了。大一统的固件虽会牺牲一些单片机的性能但既方便了开发者开发维护又方便了用户配置使用,这点牺牲还是很值得的。

marlin2.0 工程结构

marlin2.0版本通过platformIO IDE更方便使用,我们首先要了解platformIO IDE 这款新的开发环境:https://docs.platformio.org/en/latest/what-is-platformio.html
(将这篇文档过一遍可以对platformIO有整体的认识了解,在后面配置开发板编译下载等方面会有很大的帮助)

marlin2.0版本固件工程结构:(platformIO推荐的工程结构)

在这里插入图片描述
src文件夹内便是固件的主体内容:
在这里插入图片描述
Marlin 2.0引入了一个抽象层(HAL),以便可以在32位平台上构建所有现有的高级代码,同时仍保留完整的8位AVR兼容性。它屏蔽的底层硬件的差异使得marlin固件可以在不用修改底层配置的情况下支持各种类型的开发板,例如只需在Configuration.h文件中修改主板配置即可完成不同开发板之间的切换。(当然底层还需要有其他库支持,不过不用担心这些都已经有现成库。)
pins文件夹存放了不同开发板的引脚配置。
core文件夹下的boards.h文件中存放了可选择的开发板的类型。
后面如果想自己制作3D打印机开发板,针对你的硬件对于固件本身只需修改上述这3个位置即可(工程配置也需要适当的修改)
其他文件夹就类似于操作系统上的应用层,主要实现的便是具体的针对不同类型打印机的3D打印功能。

安装简介

这里简要介绍marlin的安装,在后续的文章中会有详细的配置、编译、下载教程。要构建Marlin 2.0,您需要Arduino IDE 1.8.8或更高版本或PlatformIO。 详细的建立安装说明:

  • Installing Marlin (Arduino)
  • Installing Marlin (VSCode).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈Marlin2.0 的相关文章

随机推荐

  • vue、springboot集成websocket跨域问题解决

    由于浏览器连接的是服务器上的websocket xff0c 导致出现了如下跨域错误 xff1a The value of the 39 Access Control Allow Origin 39 header in the respons
  • 动态库学习

    总结一 xff1a 动态库 前言 我们知道程序编译链接经常使用动态 xff0c 同时我们可能还知道 xff0c 动态库时程序运行时加载的 但是动态库到底有什么作用 xff0c 如何生成 如何加载等 xff0c 我们却很少关注 接下来 xff
  • Python学习第一次问题笔记:vscode 运行python代码没有输出(Code runner)

    目录 问题 xff1a 解决方案 xff1a 原因一 xff1a 原因二 xff1a 问题 xff1a 新安装Visual Studio Code后 xff0c 在其上进行第一次代码运行时 xff0c 会出现只在终端中显示代码结果 xff0
  • 标准差分进化算法matlab程序实现

    终于开始了研究生阶段的学习生活 xff0c 繁琐的入学相关事宜也处理得差不多了 在9月5号 xff0c 我们实验室召开了第一次小组会议 xff0c 导师也相继给我们指定了各自的研究方向 xff0c 不出意外 xff0c 我接下来将围绕智能优
  • 《图解深度学习》学习笔记(一)

    第一章 绪论 监督学习 xff1a 需要基于输入数据及其期望输出 xff0c 通过训练从数据中提取通用信息或特征信息 特征值 xff0c 以此得到预测模型 这里的特征值是指根据颜色和边缘等认为定义的提取方法从训练样本中提取的信息 xff08
  • 3D点云基础知识(一)-初始入门-知乎整理(一)

    本文基于如下知乎文章 xff0c 调整部分内容整理输出 xff0c 一为梳理基础知识 xff0c 二为致敬原作 作者 xff1a Mr 苍雪 链接 xff1a https zhuanlan zhihu com p 344635951 来源
  • Open3D处理点云数据(一)点云文件读取、写入、显示

    import open3d as o3d import numpy as np pcd 61 o3d geometry PointCloud pcd类型的数据 np points 61 np random rand 100 3 随机生成点云
  • Ubuntu非管理员root安装ninja:解决RuntimeError: Ninja is required to load C++ extensions错误

    服务器是共用的 xff0c 所以无法使用sudo apt get 命令快速安装 只能自己下载git上的源代码然后编译 xff0c 装在自己的私人目录下 否则 sudo apt get 安装很容易 xff0c 55555555 Ninja是一
  • Elasticsearch相似度算分TF-IDF BM25(标贝科技)

    欢迎体验标贝语音开放平台 地址 xff1a https ai data baker com source 61 qaz123 xff08 注 xff1a 填写邀请码hi25d7 xff0c 每日免费调用量还可以翻倍 xff09 控制相关度
  • 【K210】K210学习笔记五——串口通信

    K210 K210学习笔记五 串口通信 前言K210如何进行串口通信K210串口配置K210串口发送相关定义K210串口接收相关定义K210串口发送接收测试 完整源码 前言 本人大四学生 xff0c 电赛生涯已经走到尽头 xff0c 一路上
  • C++类与对象笔记十二:运算符重载三:递增运算符重载

    先看看系统自带的递增运算符 43 43 递增运算符重载 43 43 xff1b a 43 43 43 43 a int a 61 10 cout lt lt 43 43 a lt lt endl 11 先加 xff0c 后输出 cout l
  • C++类与对象笔记十四:多态六:虚析构和纯虚析构

    多态使用时 xff0c 如果子类中有属性开辟到堆区 xff0c 那么父类指针在释放时无法调用子类的析构代码 即 xff1a 父类指针无法调用子类实例对象内的析构函数 造成堆区内存泄漏 解决方案 将父类中的析构函数改为虚析构或者纯虚析构 虚析
  • PCL笔记九:采样一致性

    模型拟合 xff1f 采样一致性的目的 xff1a 用于排除错误的样本 基于采样一致性算法的应用主要是对点云进行分割 xff0c 根据不同设定的几何模型 xff0c 估计对应的几何模型的参数 xff0c 在一定允许误差范围内分割出在模型上的
  • ubuntu下安装gfortran

    找官网 xff1a GFortranBinaries GCC Wiki 找到GNU Linux 找到Download xff0c 点击蓝色链接下载 此外有installtion instructions安装步骤 Gfortran Binar
  • 面试可能会问六:智能指针

    先看一下百度百科的解释 xff1a 指针指针 当类中有指针成员时 xff0c 一般有两种方式来管理指针成员 xff1a 一是采用值型的方式管理 xff0c 每个类对象都保留一份指针指向的对象的拷贝 xff1b 另一种更优雅的方式是使用智能指
  • C++笔记:指针转向(重新赋值)时的问题;重复释放;原地址遗漏释放;赋值运算符重载operator=;

    一个类默认会创建4个函数 xff1a 默认构造 拷贝构造 析构 和operator 61 函数 最后一个就是赋值运算符重载 xff0c 可以进行简单的值传递 注意 xff1a 这个是值传递 问题就在这 xff1b 还有一种传递叫 xff1a
  • C++笔记:虚继承

    虚继承解决的是菱形继承 Animal下派生出Sheep和Tuo类 动物基类下 xff0c 有两个派生类 xff0c 一个是羊类 xff0c 一个是驼类 这两个类都继承了Animal的一个属性 xff0c 比如m age 这样就导致资源的浪费
  • Ubuntu 搭建文件服务器(Nginx)

    1 xff0c 下载Nginx 2 xff0c 安装Nginx 3 xff0c Nginx指令及脚本使用 4 xff0c 配置Nginx 1 xff0c 下载Nginx 去官网下载对应的Nginx版本 nginx download 直接在u
  • WS2812灯珠(四)---实现全彩呼吸灯效果

    WS2812灯珠实现呼吸灯效果主要涉及到呼吸函数及颜色模型两部分的内容 清楚了这两点结合之前的灯珠驱动程序 xff0c 便可以实现任意颜色的呼吸变换效果了 呼吸函数 具体的呼吸函数细节这里就不介绍了 xff0c 感兴趣的可以自行搜索 这里下
  • 浅谈Marlin2.0

    简介 marlin固件发展至今已经形成了三个比较重大的版本 xff1a 1 0版 xff0c 1 1版 xff0c 2 0版 我接触marlin固件已经有一段时间了 xff0c 原来一直对于marlin固件的结构和应用平台一直不是很理解 x