浅谈Marlin2.0

简介

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推荐的工程结构)

浅谈Marlin2.0_第1张图片
src文件夹内便是固件的主体内容:
浅谈Marlin2.0_第2张图片
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).

你可能感兴趣的:(3D打印)