自云先世受内存限,只2KB如此绝境,入不敷出焉,遂与闭门造车。
上回我们说到,Grbl并没有使用Arduino框架,这是为什么呢?
原来Grbl并没有使用Arduino框架,而是所有操作都是自己做的底层封装!
为什么不用Arduino,非要自己重新发明轮子呢?答案是性能。第一:Atmega328p的硬件资源及其有限:
闪存容量:32KB
EEPROM存储器容量:1KB
时钟频率:20MHz
存储器容量, RAM:2KB
速度:20MHz
程序存储器容量:32KB (32K x 8)
第二:Arduino框架的各个组件之间存在相互依赖,这意味着只用一部分功能,也得把大部分Arduino文件引入,比如analogWrite()这个生成PWM的函数,它就使用了定时器,并且频率是固定的,但是Grbl需要控制加减速,就需要可变频率,这是有冲突的,尤其是部分地方用到多个定时器交互使用的场景,但是atmega只有3个定时器啊,类似的情况还有很多,如果把Arduino框架包含进来,再去实现CNC的功能,固件大小会超出Atmega328p的32KB限制,内存也会超出Atmega328p的2KB限制,并且性能上也无法得到保证。
基于以上原因,Grbl的代码都是直接封装,通过操作寄存器来实现的,这样代码更灵活,性能好,编译出来的固件占用空间也会小一些。