用户工具

站点工具


knowledge:3d_print:2023052301

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
knowledge:3d_print:2023052301 [2023/05/23 12:03] – [空格] murong_squareknowledge:3d_print:2023052301 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 60: 行 60:
   * ''.'' 和 ''->'' 操作符左右不用加空格:''the_place = state->parks[echo];''   * ''.'' 和 ''->'' 操作符左右不用加空格:''the_place = state->parks[echo];''
   * 类型转换函数后不用加空格:''old_state = (int)state;''   * 类型转换函数后不用加空格:''old_state = (int)state;''
-  * 大多数二元及三元操作符要加空格:'myVar = aVar + bVar * cVar;'' ''myVal = (a * b + b * c);''+  * 大多数二元及三元操作符要加空格:''myVar = aVar + bVar * cVar;'' ''myVal = (a * b + b * c);''
  
 ===== 行末的空格 ===== ===== 行末的空格 =====
行 73: 行 73:
 一般情况下,注释所代表的是你的代码是干嘛的,而不是你的代码是如何工作的。在函数体中的注释应尽量的少。如果一个函数非常的复杂,你应该考虑分段地把注释写在函数中每个基本单元内。将细节代码写在函数头中,用于阐述它是干嘛以及为什么它要这么干。 一般情况下,注释所代表的是你的代码是干嘛的,而不是你的代码是如何工作的。在函数体中的注释应尽量的少。如果一个函数非常的复杂,你应该考虑分段地把注释写在函数中每个基本单元内。将细节代码写在函数头中,用于阐述它是干嘛以及为什么它要这么干。
  
-  * 函数、类以等使用“D 型氧气”风格注释在 ''.h'' 文件中。<code C>+  * 函数、类以等使用“D 型氧气”风格注释在 ''%%.h%%'' 文件中。<code C>
 /** /**
   * 这是 Marlin 中的一种比较好的多行注释。   * 这是 Marlin 中的一种比较好的多行注释。
行 84: 行 84:
 </code> </code>
  
-  * 当注释在 3 行以下时,使用 C++ 的 ''//'' 注释。<code C++>+  * 当注释在 3 行以下时,使用 C++ 的 ''%%//%%'' 注释。<code C>
 // 一行或两行时 // 一行或两行时
 // 应该使用这样的注释。 // 应该使用这样的注释。
行 90: 行 90:
  
 ====== 命名以及符号 ====== ====== 命名以及符号 ======
 +
 +===== 文件名 =====
 +
 +Marlin 源代码的文件名最好使用 ''lowercase_with_underscores.ext''(带_下划线_的小写.扩展名)这种格式。在别的地方贡献的代码应该遵守他们组织的规定。
 +
 +  * C++ 源文件使用 ''.cpp'' 后缀
 +  * C 源文件使用 ''.c'' 后缀
 +  * 头文件使用 ''.h'' 后缀
 +
 +===== 目录 =====
 +
 +  * 目录名使用小写
 +  * 在 Marlin 1.0.x 与 1.1.x 版本中使用 ''平面文件布局''
 +  * 在 Marlin 1.2.x 及以上版本中使用 ''分级文件布局''
 +
 +===== 大写 =====
 +
 +对于 Marlin 当中的变量、数据成员、函数以及方法使用 ''带_下划线_的小写''。对于已经使用 ''camelCase'' 驼峰命名法的就不要改动它了。Marlin 中的类使用 ''MyClassName'' 或 ''my_class_name''。核心的类使用驼峰法,普通的类使用下划线法。
 +
 +  * ''my_function_name(int in_integer, float in_float=0.0)''
 +  * ''MyClass'', ''classMethod'', ''classData''
 +  * ''local_variable'', ''global_variable'', ''const_value''
 +  * 由 ''#define'' 定义的任何 ''MACRO_NAME''
 +  * ''EnumeratedType''
 +
 +===== 库 =====
 +
 +尽量使用 avr-libc 或者 Arduino 中的已捆绑的库。Marlin 中所需要编译的库应该在 package 中被引用,从而保证版本的兼容性。
 +
 +====== 语言特性 ======
 +
 +Marlin 由 C/C++ 编写,并且由 ''Makefile'' 命令或最新版的 Arduino 编译。在 1.1 版本的 Marlin 中,编译可由 Arduino IDE,Teensyduino,PlatformIO,''make'' 以及 ''cmake'' 进行。
 +
 +在更新的版本中,Marlin 不再兼容先前版本(pre-2017)的工具链。能与 Marlin 1.1.x 兼容的最旧版本的 Arduino IDE 为 1.6.8。
 +
 +  * 不要使用以下的 C++ 扩展功能:
 +    * Exceptions (throw / catch)
 +    * Virtual function / classes
 +    * Standard Template Library (STL)
 +  * 请使用更加现代的 C++11:
 +    * ''constexpr'' 的值与函数
 +    * 用于检查 ''float'' 与 ''constexpr'' 合法性的 ''static_assert(test,"error")'' 函数
 +
 +===== 原生数据类型 =====
 +
 +  * 为了可移植性,建议使用 ''uint8_t'',''int32_t'',不建议使用 ''short'',''int'',''long''
 +  * AVR 视 ''double'' 为 ''float'' 类型,因此它们的大小都为 32 位。与 ''double'' 相比较,最好使用 ''float'' 类型,除非当前的 32 位架构对于数据精度拥有更高的需求。
 +
 +===== 内存使用 =====
 +
 +  * 使用像 ''malloc()'',''free()'',''new'',''delete'' 这种动态内存分配的函数时明令禁止的!它们对于一些 32 位的程序会产生歧义。
 +  * 使用未限制的递归会导致内存爆炸,因此避免使用。
 +  * 在许多主板中内存很宝贵,所以尽量别用全局以及静态变量。
 +  * 使用 ''PSTR'' 和 ''PROGMEM'' 宏来在内存中存放字符串。
 +
 +===== 减少重复 =====
 +
 +在使用宏、轻量函数等应该避免重复,例如:<code C>
 +#if ENABLED(FEATURE_ONE)
 +  const char blue = '1';
 +#else
 +  const char blue = '0';
 +#endif
 +</code>
 +不如:<code C>
 +const char blue = 
 +  #if ENABLED(FEATURE_ONE)
 +    '1'
 +  #else
 +    '0'
 +  #endif
 +;
 +</code>
 +更不如:<code C>
 +const char blue = TERN(FEATURE_ONE, '1', '0');
 +</code>
 +
 +===== 避占用更多资源地代码 =====
 +
 +  * ''millis()'' 由于比较占资源,倘若你想使用它多次,请将它放入 ''const millis_t var'' 中。
 +  * 提前计算数值,减少在程序运行中运算。
 +  * 能用乘法的别用除法。
 +  * 大多数冗余的代码并不会优化程序,所以用更少的代码。
 +
 +===== #include 的最佳使用 =====
 +
 +  * 引用当前程序中的声明的头文件,这会使程序的依赖性更加直观。
 +  * 不要引用不被使用的 ''Marlin.h'',当引用 ''MarlinConfig.h'' 或 ''MarlinConfigPre.h'' 程序能够正常使用时也不要引用 ''Marlin.h''
 +  * 头文件被引用的顺序:
 +    * 当配置需要被使用时,引用 ''MarlinConfig.h'' 或 ''MarlinConfigPre.h''
 +    * 在最外层 ''#if'' 后引用对应需要被使用的头文件。
 +    * 按照依赖顺序引用依赖。
 +    * 最后引用系统以及库的头文件,例如 ''%%<Arduio.h>%%'',''%%<inttypes.h>%%'' 和 ''%%<u8glib.h>%%''
 +
 +====== 由 Marlin 定义的转换 ======
 +
 +===== 预处理命令 =====
 +
 +  * 用 ''#define'' 代替 ''const''
 +  * 对于注释掉的未使用的、过时的代码,不要使用 ''#if'' / ''#endif''
 +  * 使用 ''#if ENABLED(FEATURE_NAME)'' / ''#endif'' 来启用对应的功能。它可以让对应功能以外部的方式被启用。
 +  * 同理,使用 ''if DISABLED(FEATURE_NAME)'' / ''#endif'' 来禁用对应的功能。
 +  * 考虑到更佳的可阅读及可移植性,使用 ''#define'' 来避免重复的模板代码。
 +  * 在超过 15 行代码的 ''#if'' 语句末的 ''#endif'' 后增加标签,例如:''%%#endif // SDSUPPORT || ULTRALCD%%''
 +
 +===== 宏 =====
 +
 +在 ''macros.h'' 中,存在很多便捷的宏。
 +
 +==== 配置测试 ====
 +
 +
 +==== 三元宏 ====
 +
 +
 +==== 检查定义的引脚 ====
 +
 +
 +==== 快速 I/O ====
 +
 +
 +==== 便捷循环 ====
 +
 +
 +==== 重复 ====
 +
 +
 +==== 映射 ====
 +
 +
 +==== 字符测试 ====
 +
 +
 +==== 列表与数组 ====
 +
 +
 +==== 时间比较 ====
 +
 +
 +==== 通讯 ====
 +
 +
 +==== 数学 ====
 +
 +
 +==== 其他 ====
 +
 +
 +===== 添加新功能 =====
 +
 +
 +==== 一些例子 ====
knowledge/3d_print/2023052301.1684843390.txt · 最后更改: 2023/06/07 04:09 (外部编辑)

Valid HTML5 Valid CSS Driven by DokuWiki