本教程旨在为初学者提供一份关于GRBL数控系统的源代码主函数解析的入门指导,帮助读者快速理解GRBL的工作原理和核心功能。
`main()` 函数首先执行以下初始化函数:
- `serial_init();`:设置串行波特率及中断配置。
- `settings_init();`:从 EEPROM 中加载 Grbl 设置。
- `stepper_init();`:配置步进方向和中断定时器。
- `system_init();`:配置引脚分配别针和 pin-change 中断。
接下来,清除所有系统变量并设置中止标志:
```c
memset(&sys, 0, sizeof(system_t)); // 清除所有系统变量
sys.abort = true; // 设置中止以完成初始化
sei(); // 启用中断
#ifdef HOMING_INIT_LOCK
// 如果宏运算 (settings.flags & (1 << 4)) != 0 结果为真,则设置系统状态为报警状态。
if (bit_istrue(settings.flags, BITFLAG_HOMING_ENABLE)) {
sys.state = STATE_ALARM;
}
#endif
```
主要初始化循环如下:
```c
for(;;) {
serial_reset_read_buffer(); // 清除串行读取缓存
gc_init(); // 设置 G-code 解析器为默认状态
spindle_init(); // 主轴初始化
coolant_init(); // 冷却液初始化
limits_init(); // 极限开关初始化
probe_init(); // 探测初始化
plan_reset(); // 清除块缓冲区和规划变量
st_reset(); // 清除步进子系统变量。
plan_sync_position(); // 同步清除 G-code 和策划位置到当前系统位置。
gc_sync_position();
sys.abort = false; // 系统中止标志清零
sys_rt_exec_state = 0; // 系统执行状态位清零
sys_rt_exec_alarm = 0; // 系统执行警报标志变量清零
sys.suspend = false; // 取消系统暂停标志(安全门)
sys.soft_limit = false; // 复位系统限制标志状态机
protocol_main_loop(); // 主协议循环
}
```