我必须存储指令,我将通过串口接收命令.命令长度为8位.
我需要保持命令名称及其值之间的透明度.这样可以避免将串行接收的8位数转换为任何类型.
我想在我的代码中使用Enumerations来处理它们.只有枚举对应于此平台上的16位整数.
该平台是AVR ATmega169V微控制器,位于Butterfly演示板上.它是一个8位系统,对16位操作提供一些有限的支持.它不是一个快速的系统,有大约1KB的RAM.它没有像文件I/O或操作系统那样的任何奢侈品.
那么关于我应该用什么类型来存储8位命令的任何建议呢?
必须有比#defines的大量标题更好的东西.
我目前正在尝试使用为Arduino USB主机屏蔽编写的代码库,并将其与Arduino核心库分离,以便我可以在非Arduino微控制器项目中使用该代码.
从查看代码来看,Arduino代码库上没有很多硬依赖,但我遇到了一些奇怪的错误,可能是由于Arduino构建系统和LUFA构建系统之间的差异.具体来说,我在大约75%的头文件中收到以下错误,每个错误十几次:
error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
Run Code Online (Sandbox Code Playgroud)
有时,错误表示错误中的标记不同,但它仍然是相同的错误.我在各种论坛和Stack Overflow上发现了很多类似的问题,但解决方案往往每次都有所不同.
为了清楚起见,这段代码在Arduino构建系统中编译100%,但是当我尝试使用LUFA模板makefile直接使用WinAVR构建时会出现这些错误.从查看代码,我已经确定我需要#define一些值,例如-DARDUINO=102(或者至少某些值> = 100,但我使用的Arduino IDE的版本是1.0.2,所以我认为那是一个很好的价值使用).
所以我想我正在寻找熟悉Arduino构建系统的人来帮助我弄清楚我缺少的东西.可以在这里找到完整的代码库,但是为了提供一个简单的示例来演示问题而不包括整个代码库,这里是printhex.h:
#if !defined(__PRINTHEX_H__)
#define __PRINTHEX_H__
#if defined(ARDUINO) && ARDUINO >=100
#include "Arduino.h"
#else
#include <WProgram.h>
#endif
template <class T>
void PrintHex(T val)
{
T mask = (((T)1) << (((sizeof(T) << 1) - 1) << 2));
while (mask > 1)
{
if (val < mask)
Serial.print("0");
mask >>= 4; …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2013为AVR编写代码.我一直在关注这个教程.
在编写代码的同时,我注意到Visual Studio继续强调像DDRB或者这样的东西,PORTB并且我继续得到错误Error: identifier "PORTB" is undefined,但是,程序正确编译.
有趣的是,在按下alt- F12视觉发现它们被定义了许多文件.
我现在正在教我的朋友如何编程AVR微控制器.我们编写了这个小程序,它发送简单的莫尔斯式代码.
问题是,在用AVR-GCC和WinAVR对其进行加工后,a.out文件几乎为30KB,十六进制文件为11KB,因此它不适合attiny2313闪存.
WinAVR CMD: avr-gcc -mmcu=attiny2313 -Os -g main.c
AVR-objcopy命令: avr-objcopy -O ihex a.out a.hex
这是代码:
#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
void light_led(int ms)
{
PORTD |= (1 << 4);
_delay_ms(ms);
PORTD &= ~(1 << 4);
_delay_ms(1000);
}
void send_char(int c)
{
int i;
for(i = 1; i < 8+1; i++)
{
if(c & i) light_led(1000);
else light_led(500);
}
}
int main(void)
{
DDRD |= (1 << 4);
//char text[] = {'t', 'e', 's', 't'};
int i;
for(i …Run Code Online (Sandbox Code Playgroud) 我正在尝试将C中的字符数组逐字节地发送到微控制器的输出.我正在使用以下代码:
int main() {
...
LogOutput("Hello World!");
}
void LogOutput(char *msg) {
int i;
for (i = 0; i < sizeof(msg); i++) {
USART0_TX(msg[i]); // transmit byte
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这只发送前两个字母"他"---有人知道我做错了什么吗?