我正在使用PlatformIO作为一个IDE来编程AVR。我开始进行AVR编程(我有C/C++的背景和操作系统上的编程,而不是嵌入式的,尽管我以前做过一些Arduino的事情),使用PlatformIO可以为寄存器/引脚完成代码,这就是我使用它的原因。
在PlatformIO中,我似乎无法将框架从Arduino切换到avr-gcc,而不丢失代码完成。
我想知道保持Arduino作为框架是否有什么缺点?
我知道Arduino在后面使用avr-gcc,但我读到它仍然在用户不知道的情况下做一些设置(比如Timer0设置延迟,因为我正在使用它作为USI在ATTiny85上的时钟源)。
否则,PlatformIO中是否有保留代码完成和使用avr而不是Arduino的方法?
谢谢!
编辑:我在OSX或linux (ubuntu)上。
发布于 2016-07-20 17:45:58
正如PlatformIO社区平台上的ivankravets所指出的(参见:https://community.platformio.org/t/avr-programming-without-arduino-framework/525/4),它就像从platformio.ini文件中删除行framework = arduino一样简单,以摆脱Arduino框架,并在bare C中为avr工作。
发布于 2016-07-20 14:20:49
我从来没有使用过PlatformIO,我的回答只是基于我对AVR开发的(扩展)知识和Arduino mess…。err…框架。
Arduino框架使用的是AVR(为您提供在AVR上编程所需的所有工具的标准低级别框架),并添加了一层抽象层,这样您就不会直接处理寄存器,而是使用更容易理解的接口。
因此,当你写在一个引脚上,而不是看AVR的IC腿号码,寻找匹配的PORT地址来配置它和变异它,你使用的digitalWrite()板上的引脚号码。因此,无论IC是什么,引脚将保持不变,以一致的能力。
引脚定义是使用给编译器的头文件完成的,这取决于IDE中的目标设置(因此,无论您使用Arduino Mega还是Leonardo,AVR端口/引脚和板插脚之间的匹配将发生根本的变化)。
考虑到您对PlatformIO的描述,它将使用这些信息根据板的配置给出适当的突出完成。当然,它还利用了Arduino框架的面向对象方法,这样在使用单例时(就像使用Serial时)可以很容易地完成方法。
另一方面,使用原始的AVR-libc,很难获得任何有意义的完成,因为大多数操作都是在寄存器上完成的,这些寄存器是通过预处理程序别名声明的,而且整个代码都是纯C的,因此代码完成并不真正有用(不能列出应用于给定对象…的所有方法)。与Serial示例类似)。
然后,Arduino提供了一种不错的高级方法来构建嵌入式代码的原型,然后您可以在需要优化时间和/或空间时进行管理。还有一些项目(比如针对repraps的Marlin固件)使用某种混合方法,以更优化的方式重新实现Arduino接口的许多部分(比如digitalWrite或Serial对象)。
最后,我对您的建议是放弃platform.io或arduino IDE,如果您真的对IDE GUI感兴趣,或者更好地使用您喜欢的功能强大的编辑器(如vim/nvim、emacs、atom、崇高…),则切换到eclipse。让它像处理任何其他C代码一样处理AVR代码。
发布于 2016-07-20 14:24:42
如果您从事一个Arduino项目,包括使用VisualMicro插件和VisualStudio (Community )的avr内部组件,那么所有代码完成/语法突出显示/ goto声明等都适用于项目和所有库中的任何内容。
这就是你要找的吗?
当然,如果您“免费”使用VisualMicro,则它们是很烦人的。
https://stackoverflow.com/questions/38483311
复制相似问题