Marlin::run() 是什么意思
时间: 2024-04-14 22:28:52 浏览: 14
`Marlin::run()`是Marlin类的一个成员函数,用于执行固件的主循环逻辑。在Marlin固件中,主循环函数`loop()`会调用`Marlin::run()`来执行一系列的操作,包括读取输入、处理逻辑、控制输出等。
`Marlin::run()`函数通常包含以下操作:
1. 读取输入:从各种输入源(例如串口、SD卡等)读取数据,如G代码、温度传感器读数等。
2. 解析和处理:对读取到的数据进行解析和处理,例如解析G代码指令、计算运动参数、控制温度等。
3. 控制输出:根据解析和处理的结果,控制各种输出设备,例如驱动步进电机、控制加热器等。
4. 循环延时:为了控制循环的执行速率,通常会在每次循环结束后加入适当的延时。
整个`Marlin::run()`函数的逻辑会在每次主循环中重复执行,以实现固件的正常运行和处理各种任务。
请注意,这只是一个概述,实际的`Marlin::run()`函数的具体实现会更加复杂,涉及到各种功能模块(如运动控制、温度控制等)的调用和协调。具体的细节和逻辑会根据Marlin的版本和配置而有所不同。
相关问题
marlin2.0的运行时序是什么
Marlin是一个广泛使用的开源3D打印机固件,针对不同型号的3D打印机进行控制。以下是Marlin 2.0的基本运行时序:
1. 初始化:系统启动时,Marlin会进行初始化操作。这包括配置加载、硬件初始化、电机驱动器初始化等。
2. 主循环(Main Loop):Marlin进入主循环后,会不断执行以下步骤:
a. 解析命令:Marlin会从串口接收G代码命令或其他指令,并进行解析。
b. 运动规划:根据解析得到的命令,Marlin会进行路径规划和速度规划,生成每个轴的运动指令。
c. 步进控制:Marlin将生成的运动指令发送给相关的步进电机,控制打印头、床面、挤出器等部件的运动。
d. 传感器读取:Marlin会读取相关传感器(如温度传感器、限位开关等)的数据,用于监测打印过程中的状态。
e. 反馈控制:根据传感器数据和设定的参数,Marlin会进行反馈控制,如温度控制、层高控制等。
f. 打印过程管理:Marlin会根据指令控制打印过程中的暂停、继续、停止等操作。
3. 定时中断处理:Marlin会根据设定的定时器中断周期,定期执行一些特定的任务,如温度检查、电机驱动等。
4. 状态监测:Marlin会不断监测打印状态,如打印进度、温度状态等,并将相关信息反馈给用户。
请注意,这只是Marlin 2.0的基本运行时序概述,具体实现可能因设备配置和个性化设置而有所不同。如果您需要更详细的信息,建议参考Marlin的官方文档或与Marlin社区进行交流。
marlin类是怎么封装的源码是什么
Marlin类的源码是Marlin.ino文件,它是Marlin固件的主入口点。以下是Marlin 2.0版本的Marlin类的源码示例:
```cpp
#include "Marlin.h"
Marlin::Marlin() {
// 构造函数
}
void Marlin::init() {
// 初始化设置和配置
// ...
}
void Marlin::run() {
// 主循环代码
// ...
}
void Marlin::emergencyStop() {
// 紧急停止逻辑
// ...
}
void Marlin::parseGcode(String gcode) {
// G代码解析逻辑
// ...
}
// 其他成员函数的定义和实现
Marlin myMarlin; // 创建Marlin类的实例
void setup() {
myMarlin.init(); // 调用实例的初始化函数
}
void loop() {
myMarlin.run(); // 调用实例的主循环函数
}
```
在这个示例中,Marlin类被定义为一个单独的类,并在Marlin.ino文件中实现了其构造函数、初始化函数、主循环函数等。通过创建Marlin类的实例`myMarlin`,可以调用其成员函数来执行相应的操作,例如初始化设置和配置、运行主循环、紧急停止等。在setup()和loop()函数中,通过调用实例的函数来执行相应的操作。
请注意,这只是一个简化的示例,Marlin类的源码实际上包含了更多的成员函数和逻辑,用于实现Marlin固件的各个功能模块,例如运动控制、温度控制、G代码解析等。源码的具体实现会因Marlin的版本和配置而有所不同。