打印虎logo3D打印模型大全 免费下载
欢迎来到打印虎问答 ,这里是专业的3D打印问答社区,有问必答!

3D打印机的固件代码有个地方看不懂,求解惑?

+1 投票
固件代码中,在设置XYZ轴的输出引脚时,有行代码看不懂

#define  _SET_OUTPUT(IO)   do {DIO ##  IO ## _DDR |=  MASK(DIO ## IO ## _PIN); } while (0)

其中#define MASK(PIN) (1 << PIN),就是将DIO##IO##_DDR的某一位置1,但其中的DIO和_DDR是指什么?代码中也没说明是什么。
最新提问 1月 21 用户: SRL (190 分)

1个回答

+3 投票
这是一个marlin固件的问题。

这里首先要理解##操作符的意义。这是一个C++预处理操作符,指的是在预处理阶段,把两侧的标号直接连接成一个标号。例如,当IO为3的时候,_SET_OUTPUT(3)就会宏展开为

do{DIO3_DDR |= MASK(DIO3_PIN);} while(0)

可以看出,其中的DIO以及_DDR,都不是一个独立的标号,而DIO3_DDR和DIO3_PIN才是独立的标号。可以在fastio.h中,找到这些标号的定义。
最新回答 1月 21 用户: 打印虎 (7,180 分)
...