关闭 cri-s 打开了这个问题 2015 年 11 月 27 日 · 1条评论 关闭 预处理器抽象实现更多轴而不用#ifdef#857 cri-s 打开了这个问题 2015 年 11 月 27 日 · 1条评论 注释 危机 评论了 2015 年 11 月 27 日 嗨,我使用了最新的 master 并做了一些预处理器抽象。 现在可以添加更多轴,只需 在 default.h 文件/文件夹中定义 #define DEFAULT_AXIS X,Y,Z,U,V,W 。 这是使用一些预处理完成的,下面有一些细节。 我需要添加检测并为代码计时,实际上它在硬件中未经测试。 它在 mega2560 上更有用,但至少 6 轴在 328p 上也是可能的。 正式收录这样的修改有意思吗? 我已经使用了 grep 了我使用此预处理更改的内容,结果在这里。 gcode.c: MAP(check_letter,DEFAULT_AXIS); nuts_bolts.h:enum { FOREACH(AXIS_ID, , AXIS) }; // 构建 X_AXIS 常量 report.c: const uint8_t axis[] = { FOREACH(AXIS_ID,AXIS_QUOTE ,) }; settings.c: FOREACH(DEFAULT,settings.steps_per_mm,STEPS_PER_MM+FLT_EPSILON); settings.c: FOREACH(DEFAULT,settings.max_rate,MAX_RATE); settings.c: FOREACH(DEFAULT,settings.acceleration,ACCELERATION); settings.c: FOREACH(DEFAULT,settings.max_travel,MAX_TRAVEL); settings.c: FOREACH(AXIS) settings.steps_to_mm[idx]=1.0/settings.steps_per_mm[idx]; settings.c: unsigned char axis[]={ FOREACH(AXIS_BIT, ,_STEP_BIT) }; settings.c: unsigned char axis[]={ FOREACH(AXIS_BIT, , DIRECTION_BIT) }; settings.c: unsigned char axis[]={ FOREACH(AXIS_BIT, , LIMIT_BIT) }; stepper.c: uint32_t FOREACH(AXIS_ID,计数器,); stepper.c: FOREACH(AXIS_IDs, st.counter , (=) ,) stepper.c: FOREACH(AXIS) stepper.c: MAP(calc_step,DEFAULT_AXIS); stepper.c: FOREACH(AXIS) { stepper.c: FOREACH(AXIS) stepper.c: FOREACH(AXIS) system.c: FOREACH(AXIS) 步进器.c: FOREACH(AXIS) 定义示例在这里: 定义 FOREACH_AXIS_IDs(pre,sep,post) CONCAT(MAP_,AXIS_N)(sep,map_PrePost,pre,post,DEFAULT_AXIS) 定义 FOREACH_AXIS_ID(pre,post) CONCAT(MAP_,AXIS_N)( (,) ,map_PrePost,pre,post,DEFAULT_AXIS) 定义 FOREACH_AXIS_BIT(pre,post) CONCAT(MAP_,AXIS_N)( (,) ,map_callBit,pre,post,DEFAULT_AXIS) 其中 MAP_ 基本上定义为 定义 MAP_(n,f,a,b,x…) f(NTH(n,x),a,b) 和 NTH: 定义 NTH_(n,x…) CONCAT(NTH,n)(x,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0) 定义 NTH(x…) NTH_(x) 定义 NTH0(DEFAULT_AXIS…) CAR(DEFAULT_AXIS) 定义 NTH1(DEFAULT_AXIS…) CAR(CDR(DEFAULT_AXIS)) 定义 NTH2(DEFAULT_AXIS…) CAR(CDR(CDR(DEFAULT_AXIS))) 定义 NTH3(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(DEFAULT_AXIS)))) 定义 NTH4(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(DEFAULT_AXIS))))) 定义 NTH5(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS)))))) 定义 NTH6(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS))))))) 定义 NTH7(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS)))))))) 定义 NTH8(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS))))))))) 定义 NTH9(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS)))))))))) 成员 香奈儿 评论了 2015 年 11 月 28 日 @cri-s:感谢抽象说明,但我个人并不觉得#ifdefs 很烦人。他们通常清楚地指出可以删除哪些代码或直接在代码中涉及特定的#define。我有一个一般规则,即宏应该尽可能简单。没有递归之类的。我并不是说现在有什么是最佳的,但它并不像您发布的这些 FOREACH 和 NTH 定义那样难以阅读和破译。 chamnit已完成 关闭 2015 年 11 月 28 日 喜欢 (0) mega 2560 防护罩,功能。 #856 Trinamic TMC26x 支持 #858 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭 无法在 gsender 1.2.0 中打开 .gcode 文件 #367 RaspberryPi 运行 gsender 时出现问题 #89 向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭无法在 gsender 1.2.0 中打开 .gcode 文件 #367RaspberryPi 运行 gsender 时出现问题 #89向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473功能请求:抑制发送到机器的 gcode 中的 gcode 注释。 #444 关闭通过网络连接进行连接 #171操纵杆运动的剩余问题 #204 关闭新版本认为我的机器一直处于锁定状态 #474 关闭
嗨,我使用了最新的 master 并做了一些预处理器抽象。
现在可以添加更多轴,只需 在 default.h 文件/文件夹中定义
#define DEFAULT_AXIS X,Y,Z,U,V,W 。 这是使用一些预处理完成的,下面有一些细节。 我需要添加检测并为代码计时,实际上它在硬件中未经测试。 它在 mega2560 上更有用,但至少 6 轴在 328p 上也是可能的。 正式收录这样的修改有意思吗?
我已经使用了 grep 了我使用此预处理更改的内容,结果在这里。
gcode.c: MAP(check_letter,DEFAULT_AXIS);
nuts_bolts.h:enum { FOREACH(AXIS_ID, , AXIS) }; // 构建 X_AXIS 常量
report.c: const uint8_t axis[] = { FOREACH(AXIS_ID,AXIS_QUOTE ,) };
settings.c: FOREACH(DEFAULT,settings.steps_per_mm,STEPS_PER_MM+FLT_EPSILON);
settings.c: FOREACH(DEFAULT,settings.max_rate,MAX_RATE);
settings.c: FOREACH(DEFAULT,settings.acceleration,ACCELERATION);
settings.c: FOREACH(DEFAULT,settings.max_travel,MAX_TRAVEL);
settings.c: FOREACH(AXIS) settings.steps_to_mm[idx]=1.0/settings.steps_per_mm[idx];
settings.c: unsigned char axis[]={ FOREACH(AXIS_BIT, ,_STEP_BIT) };
settings.c: unsigned char axis[]={ FOREACH(AXIS_BIT, , DIRECTION_BIT) };
settings.c: unsigned char axis[]={ FOREACH(AXIS_BIT, , LIMIT_BIT) };
stepper.c: uint32_t FOREACH(AXIS_ID,计数器,);
stepper.c: FOREACH(AXIS_IDs, st.counter , (=) ,)
stepper.c: FOREACH(AXIS)
stepper.c: MAP(calc_step,DEFAULT_AXIS);
stepper.c: FOREACH(AXIS) {
stepper.c: FOREACH(AXIS)
stepper.c: FOREACH(AXIS)
system.c: FOREACH(AXIS) 步进器.c: FOREACH(AXIS)
定义示例在这里:
定义 FOREACH_AXIS_IDs(pre,sep,post) CONCAT(MAP_,AXIS_N)(sep,map_PrePost,pre,post,DEFAULT_AXIS)
定义 FOREACH_AXIS_ID(pre,post) CONCAT(MAP_,AXIS_N)( (,) ,map_PrePost,pre,post,DEFAULT_AXIS)
定义 FOREACH_AXIS_BIT(pre,post) CONCAT(MAP_,AXIS_N)( (,) ,map_callBit,pre,post,DEFAULT_AXIS)
其中 MAP_ 基本上定义为
定义 MAP_(n,f,a,b,x…) f(NTH(n,x),a,b)
和 NTH:
定义 NTH_(n,x…) CONCAT(NTH,n)(x,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0)
定义 NTH(x…) NTH_(x)
定义 NTH0(DEFAULT_AXIS…) CAR(DEFAULT_AXIS)
定义 NTH1(DEFAULT_AXIS…) CAR(CDR(DEFAULT_AXIS))
定义 NTH2(DEFAULT_AXIS…) CAR(CDR(CDR(DEFAULT_AXIS)))
定义 NTH3(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(DEFAULT_AXIS))))
定义 NTH4(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(DEFAULT_AXIS)))))
定义 NTH5(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS))))))
定义 NTH6(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS)))))))
定义 NTH7(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS))))))))
定义 NTH8(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS)))))))))
定义 NTH9(DEFAULT_AXIS…) CAR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(CDR(DEFAULT_AXIS))))))))))