标签: winavr

8位枚举,在C中

我必须存储指令,我将通过串口接收命令.命令长度为8位.

我需要保持命令名称及其值之间的透明度.这样可以避免将串行接收的8位数转换为任何类型.

我想在我的代码中使用Enumerations来处理它们.只有枚举对应于此平台上的16位整数.

该平台是AVR ATmega169V微控制器,位于Butterfly演示板上.它是一个8位系统,对16位操作提供一些有限的支持.它不是一个快速的系统,有大约1KB的RAM.它没有像文件I/O或操作系统那样的任何奢侈品.

那么关于我应该用什么类型来存储8位命令的任何建议呢?
必须有比#defines的大量标题更好的东西.

c avr avr-studio4 winavr avr-gcc

24
推荐指数
2
解决办法
1万
查看次数

AVR-C错误:在'<'标记之前预期'=',',',';','asm'或'__attribute__'

我目前正在尝试使用为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)

c++ arduino winavr

4
推荐指数
1
解决办法
4401
查看次数

使用Visual Studio编写AVR代码

我正在使用Visual Studio 2013为AVR编写代码.我一直在关注这个教程.

在编写代码的同时,我注意到Visual Studio继续强调像DDRB或者这样的东西,PORTB并且我继续得到错误Error: identifier "PORTB" is undefined,但是,程序正确编译.

有趣的是,在按下alt- F12视觉发现它们被定义了许多文件.

intellisense avr winavr visual-studio-2013

2
推荐指数
1
解决办法
5961
查看次数

来自小型AVR程序的大十六进制文件

我现在正在教我的朋友如何编程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 microcontroller avr winavr avr-gcc

2
推荐指数
1
解决办法
1234
查看次数

嵌入式C传递字符串以起作用

我正在尝试将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)

但是,这只发送前两个字母"他"---有人知道我做错了什么吗?

c string winavr

1
推荐指数
1
解决办法
3708
查看次数