为Arduino创建库时我应该知道什么?


8

我想到,除了当前的问题之外,我还应该问:“为Arduino创建库时我应该知道什么?”

首先,我在做什么:

我使用Eclipse作为编辑器,并用C ++编写代码。我编写了一个简单的Arduino应用程序,其中包括我的头文件,并且正在通过错误进行工作。

第一个问题:我该如何“清洁”?我看到了一些我认为已解决的错误,几乎就像头文件已被缓存一样。(是的,很可能我做一些愚蠢的事[ 编辑:我是],但我还是想知道如何清理库,不知道那里的对象文件)。

其次:我应该注意哪些约定?我没有像我想的那样使用Arduino,并且用C ++编程感觉很好,但是我知道这些库的目的是让用户保持美观和简单。函数名称是否有约定?创建常量(看起来全局命名空间被#defines污染了)?等等。

最后,还有什么我应该知道的吗?

我应该提一下,我已经看过Arduino Library Tutorial了,虽然很好,但是走得并不远。我还偷看了系统上安装的某些库。


1
您是否尝试过Arduino IDE并放弃了它?我知道,鉴于Eclipse-as-IDE具有通用的程序员生产力功能集,Arduino-IDE的确可以解决。但是,在这种情况下,如果您还没有尝试过Arduino-IDE,那么您可能想要这样做。虽然我确实发现它很慢,但是显式的重新编译可以正常工作。
icarus74

Answers:


3

我会刺。我没有为Arduino编写代码,但是我已经做了很多C和C ++编程。但是,即使我确实看到了您的错误,也会有所帮助。

将C ++与C代码一起使用时,您需要记住的主要事情是,如果您希望C代码能够链接到C ++代码,则您的C ++代码需要使用用“ extern“ C”“声明的函数。“外部“ C””告诉C ++编译器我正在为C文件创建可链接代码,或者正在使用C文件中的代码。因此,库API标头中的所有函数都应与源文件中定义的函数相关,例如“ extern“ C” void dosomething()“。如果您尝试使用C ++中的类,请记住C代码无法调用它,则需要创建函数(外部“ C”)来访问该对象。现在,如果您的C代码是使用C ++编译器编译的,那么不必担心“ extern“ C”“。

如果要在C ++代码中调用C代码,则需要使用以下结构包装C标头:

#ifdef ___cplusplus
extern "C" {
#endif

///all my C function declarations... yada yada

#ifdef __cplusplus
}  //end extern "C"
#endif

如果您使用的是C ++,请不要使用太多的#define,除非您要创建“ DEBUG”或“ VERSION2”之类的编译时标记来创建特殊的代码集。否则,请将“ const int / char / float”用于定义安全类型检查的数字。编译器通常足够聪明,可以对其进行优化,因此它们会进入ROM /代码空间(具体取决于情况)。另外,不要创建MACROS,使用内联函数。另外,如果编程很愚蠢,例如在C ++中使用很多宏和数字定义,也不要总是遵循惯例。同样的情况适用于C99版本的C,它添加了诸如内联函数和C ++中的const之类的内容。业界意识到过度使用预处理器语言会导致多少错误代码和难以维护的代码。

Eclipse通常将obj文件存储在项目下的目录中。如果要执行“调试”构建,则它位于项目文件夹下的“调试”文件夹下。如果您正在执行“发布”构建,请查看“发布”下的内容,等等。通常,一个干净的构建对我来说在Eclipse中起作用,因此我不知道您的设置有什么问题。我想确保您没有创建预编译的头文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.