Grbl源码解析与移植-架构设计

注释详尽,设计严谨,有专业、优雅、神作之称。模块交互,相得益彰。其中串口通信、中断定时,如外星之技。废寝忘食,仍怡然自乐。 

前面我们分享了Grbl的真正入口和Grbl为什么没有使用Arduino框架,接着我们看下Grbl在没有使用Arduino框架的情况下是如何自成一体设计自己的整体架构的。

GRBL的核心是带有梯形加减速过程的直线插补算法的实现。通过调用链分析,得到Grbl的架构和模块调用关系如下:


grbl架构图

串口通信:

serial.c:低阶串口通信并为异步控制检出运行时的实时命令。

report.c:通知状态映射和消息组装

print.c:打印不同格式字符串的函数(用在串口)

主循环:

protocol.c: 从串口接受命令行并把他们传递到“gcode”执行。提供每个命令的状态响应。还管理串口中断的运行时命令集。

gcode.c:从“protocol”接收g代码,按照解析器的当前状态解析它并且通过“xxx_control”模块发出命令

运动规划模块:

motion_control.c: 从“gcode”接收移动命令并且传递他们到规划器。这个模块为规划器模块或步进电机模块提供公共接口。

planner.c: 从“motion_control”接收线性移动命令并且把他们添加到准备移动的计划中。它维护持被添加的移动续优化加速度路径。

动作模块:

stepper.c:按计划用步进电机按步执行移动

spindle.c: 控制主轴的命令

coolant_control.c:控制主轴冷却的命令

输入控制模块:

limits.c:配置限位开关,用来告诉机器源点位置,阻止超出行程范围

probe.c:对刀,告知Z轴0点位置

jog.c:手动控制机器移动

system.c:解析并执行系统命令($开头),外部控制按钮响应

参数设置模块:

settings.c:在eeroom中维护运行时配置项并且让它对所有模块可用

config.h:编译时的用户配置

eeprom.c:一个Atmel的库,提供方法读或写eerom,添加了一点东西可以在读写二进制流的时候检查配置项的校验和。

引脚映射模块:

cpu_map.h:定义MCU的引脚对应关系

辅助模块:

nuts_bolts.c:一些全局变量定义,到处被用到的有用的常量、宏。

你可能感兴趣的:(Grbl源码解析与移植-架构设计)