我正在使用 platform.io 作为编程AVR MCU的IDE。我正在开始AVR编程(我有一个C / C ++的背景和OS上的编程,而不是嵌入式,虽然我过去做了一些Arduino的东西)并且使用PlatformIO给我代码完成寄存器/引脚,这就是为什么我用它。
似乎我无法在没有丢失代码的情况下将框架从Arduino切换到PlatformIO中的avr-gcc。
我想知道将Arduino保留为是否存在任何缺陷 框架?
我知道Arduino在后面使用avr-gcc,但我读到它仍然会在用户不知情的情况下进行一些设置(例如Timer0设置延迟,我需要它因为我将它用作时钟我在ATTiny85上的USI来源。
否则,在PlatformIO中仍然存在代码完成和 使用avr-gcc而不是Arduino?
谢谢!
编辑:我在OSX或Linux(ubuntu)上。答案 0 :(得分:5)
正如PlatformIO社区平台上的ivankravets所指出的那样(请参阅:https://community.platformio.org/t/avr-programming-without-arduino-framework/525/4),就像从var svgid = document.getElementById('svg_main');
var str_lne = 60;
var pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
pathEl.setAttribute('id', 'lineAB');
pathEl.setAttribute('d', 'M 50 ' + str_lne + ' L 1050 ' + str_lne);
pathEl.setAttribute('transform', 'translate(0.5,0.5)');
pathEl.style.stroke = '#707073';
pathEl.style.strokeWidth = '1px';
svgid.appendChild(pathEl);
文件中删除行framework = arduino
一样简单摆脱Arduino框架并在裸露的C中为avr-gcc工作。
答案 1 :(得分:1)
我从未使用过PlatformIO
,而我的答案仅基于我对AVR开发的知识(扩展)以及Arduino混乱...错误......框架。
Arduino框架 使用AVR-libc(标准的低级框架,为您提供在AVR上编程所需的所有工具),并添加了一层抽象,因此您不是直接处理寄存器,但使用更容易理解的界面。
因此,当你在一个引脚上写字时,不是查看AVR的IC支路编号,而是查找匹配的PORT
地址来配置它并对其进行修改,那么你正在<{1}}上使用<{1}} em> board 的密码。因此,无论IC是什么,引脚都将保持不变,具有一致的功能。
引脚定义是使用根据IDE中的目标设置提供给编译器的头文件完成的(因此无论您使用Arduino Mega还是Leonardo,AVR端口/引脚和板引脚排列之间的匹配都会发生根本变化)
鉴于您对digitalWrite()
的描述,它正在使用该信息根据电路板配置为您提供适当的引脚排列。它当然也利用了Arduino框架的面向对象方法,因此您在使用单例时可以轻松完成方法(例如,当您使用PlatformIO
时)。
另一方面,使用原始AVR-libc很难获得任何有意义的完成,因为大多数操作都是在通过预处理器别名声明的寄存器上完成的,整个代码都是纯C,所以代码完成并不是很有用(你不能列出适用于给定对象的所有方法......就像使用Serial示例一样)。
然后,Arduino提供了一种很好的高级方法来对嵌入式代码进行原型设计,然后您可以在需要优化时间和/或空间时进行策划。一些项目(如用于重新编写的Marlin固件)使用某种混合方法,以更优化的方式重新实现Arduino接口的许多部分(如Serial
或digitalWrite
对象)。
最后,我给你的建议是放弃Serial
或platform.io
IDE,如果你真的进入IDE GUI,或者更好,请使用首选的强大编辑器切换到eclipse (像vim / nvim,emacs,atom,sublime ......)让它像任何其他C代码一样处理AVR代码。
答案 2 :(得分:1)
如果您使用VisualMicro插件和VisualStudio(社区编辑)处理包含avr-gcc内部的Arduino项目,则所有代码完成/语法突出显示/ goto声明等都适用于项目和所有库中的任何内容。
这是你正在寻找的吗?
当然,如果您使用它们,VisualMicro会很烦人#34;免费&#34;