源代码在 https://github.com/grblHal 目前日期2024/07/09
或许几年以后代码会做变更. 仅供参考.
grbl是个很好的库. grblHAL是在grbl的基础上改进来的.
grbl的板子通过串口或者SD卡或网络与上位机进行通信, 上位机负责查看和人机交互.
上位机把CAM软件生成的代码读入以后,转换成grbl的通信代码.
grblHAL目前支持的G代码如下
上位机与下位机板子之间的通信格式如下:
https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface
如何衔接grbl核心层和具体设备驱动层
对于驱动开发人员来讲, 最重要的莫过于理解grblHAL的内部代码结构.
grblHAL把核心的代码解析和运动规划等抽象成了HAL层. 代码在项目
core中. 编译的时候需要把core代码复制到你的项目中.
core代码和驱动之间的连接使用的是全局变量. hal
hal的定义在hal.h中.
下面的电机和外部设备的驱动实现设备代码, 通过全局变量hal 来调用和获取其它信息.
对设备的特性配置
编译开关应在具体实现的代码 my_machine.h 中定义.
例如:
C语言中的函数指针
在这个例子中,我们定义了一个函数指针spindle_update_pwm_ptr,它接受一个无符号整数(uint_fast16_t)参数pwm,并将其传递给一个名为update_pwm的函数。这个函数的指针类型是void (*)(uint_fast16_t pwm)。
要使用这个函数指针,首先需要定义一个函数,该函数具有与函数指针类型匹配的参数列表和返回类型。例如,我们可以定义一个名为update_pwm的函数:
然后,您可以将update_pwm函数的地址分配给spindle_update_pwm_ptr类型的变量。例如:
现在,您可以像使用普通函数一样使用spindle_update_pwm变量。当您调用spindle_update_pwm时,它会自动调用update_pwm函数。例如:
请注意,函数指针可以指向任何类型的函数,包括函数声明。因此,您可以根据需要使用不同的函数类