用户工具

站点工具


knowledge:3d_print:2023052301

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
knowledge:3d_print:2023052301 [2023/05/24 03:35] – [命名以及符号] murong_squareknowledge:3d_print:2023052301 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 93: 行 93:
 ===== 文件名 ===== ===== 文件名 =====
  
-Marlin 源代码的文件名最好使用 ''带_下划线_的小写.扩展名'' 这种格式。在别的地方贡献的代码应该遵守他们组织的规定。+Marlin 源代码的文件名最好使用 ''lowercase_with_underscores.ext''带_下划线_的小写.扩展名这种格式。在别的地方贡献的代码应该遵守他们组织的规定。
  
   * C++ 源文件使用 ''.cpp'' 后缀   * C++ 源文件使用 ''.cpp'' 后缀
行 117: 行 117:
 ===== 库 ===== ===== 库 =====
  
 +尽量使用 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.1684899347.txt · 最后更改: 2023/06/07 04:09 (外部编辑)

Valid HTML5 Valid CSS Driven by DokuWiki