Preguntas con etiqueta 'avr-gcc'

1
respuesta

¿Por qué el compilador no usa directamente LSR?

Hola, he estado trabajando en un proyecto usando un Arduino Uno (por lo tanto, ATmega328p) donde el tiempo es bastante importante y quería ver en qué instrucciones estaba compilando el código el compilador. Y allí tengo un uint8_t que me...
4
respuestas

¿Por qué el compilador GCC omite algún código?

No puedo entender por qué el compilador de GCC recorta parte de mi código mientras conserva absolutamente el mismo en el vecindario. El código C: #define setb_SYNCO do{(PORTA|= (1<<0));} while(0); ISR(INT0_vect){ unsigned char i;...
1
respuesta

¿Cómo creo una biblioteca estática para el AVR Atmega328p?

Estoy intentando crear una biblioteca como Arduino en C. Lo he intentado en el pasado y, aunque perdí el código, recuerdo que simplemente recibí un montón de referencias indefinidas a funciones especificadas en los archivos de encabezado y en...
4
respuestas

___ tipo qstnhdr ___ 'bit' para la programación del microcontrolador AVR ______ qstntxt ___

He escrito un código para el microcontrolador 8051, donde utilicé el tipo de bit, algo como esto:

%pre%

Ahora estoy portando esto al controlador AVR ATmega16. Encontré que no hay soporte para
 tipo de bit en AVR.

El manual de usuario de

AVR-lib C dice:

  

Tipos de datos: char es de 8 bits, int es de 16 bits, largo es de 32 bits, largo   largo es de 64 bits, flotante y doble de 32 bits (este es el único   formato de punto flotante admitido), los punteros son 16 bits (función   los punteros son direcciones de palabras, para permitir direccionar hasta 128K programas   espacio de memoria). Hay una opción -mint8 (ver Opciones para la C   compilador avr-gcc) para hacer int 8 bits, pero eso no es compatible con   avr-libc y viola los estándares C (int debe ser de al menos 16 bits). Eso   puede ser eliminado en una versión futura.

Entonces, ¿qué debo hacer ahora?

    
______ answer80616 ___

Puedes usar una estructura como esta:

%pre%

Y para acceder a un bit a la vez solo tienes que

%pre%     
______ answer80632 ___

Como PeterJ ya mencionó en su comentario, sugeriría usar %code% .

Es necesario incluir la biblioteca stdbool.

%pre%

Como ya se señaló, en AVRGCC, %code% es de 8 bits y solo una abstracción de %code% . Si no puedes vivir con eso y necesitas guardar cada bit o tener toneladas de banderas globales de "sí / no" (lo que podría indicar una mala práctica de codificación), puedes considerar lo que Naeriel publicó en su respuesta.

Sin embargo, el uso de bool y la denominación de variable adecuada (usando el prefijo "es") produce un código mucho más limpio. Por ejemplo usar

%pre%

en lugar de "done_flag". De esa manera es más obvio para alguien que no conoce el código lo que exactamente indica el estado.

    
______ answer80615 ___

Utilice unsigned char en su lugar. Sin embargo, esto usará un byte completo en lugar de un poco.

    
______ answer151021 ___

Puedes usar algo como esto:

%code%

Ejemplo de uso:

%code%

establece PB4 como pin de salida.

Fuente: enlace

    
___

He escrito un código para el microcontrolador 8051, donde utilicé el tipo de bit, algo como esto: static bit done_flag = 0; /* bit variable */ bit testfunc ( /* bit function */ bit flag1, /* bit arguments */...
2
respuestas

Macros V / S funciones en línea durante la programación para avr-gcc

He estado haciendo mi primer trabajo serio de programación en estos días. He estado expuesto a un montón de código por diferentes desarrolladores. Una cosa que me parece confusa es cómo estos desarrolladores deciden cuándo usar una definición de...
1
respuesta

¿Programando un ATmega1284p con Arduino IDE y un oscilador RC interno?

Me gustaría programar un ATmega1284p con mi AVR Dragon y el IDE de Arduino. Hasta ahora he instalado mighty1284p ( enlace ), después de escribir mi (ejemplo ) bosquejo Lo compilo usando el IDE de Arduino y luego cd en el directorio (tempo...
3
respuestas

Técnicas de promedios móviles más rápidos con una huella mínima

He probado algunas técnicas de promedio en ejecución para suavizar el cambio en los datos de ADC en AtMega48 para controlar las luces (PWM) al girar un potenciómetro (ADC). Los filtros (pseudo códigos): Media móvil: adc_avg += new adc_ra...
1
respuesta

La interrupción por desbordamiento se dispara solo una vez

Me he topado con un problema donde, al parecer, mi interrupción solo se dispara una vez, luego simplemente se niega a disparar nuevamente en mi ATMega32U2. Tengo el siguiente código (simplificado): void init(void) { DDRB = 0xff; PORTB...
2
respuestas

ISR, volatile y ATOMIC_BLOCK

Desde mi experiencia hasta ahora, soy consciente de lo siguiente a lo que debo prestar atención cuando trabajo con ISR: Un ISR debería completarse rápidamente Las variables compartidas entre un ISR y la ruta de ejecución principal se deben...
1
respuesta

Cómo almacenar un conjunto de valores en la EEPROM de ATmega16 y luego leerlo en secuencia

Tengo este programa en el que puedo almacenar un solo valor en EEPROM. ¿Puedo almacenar una matriz de valores en EEPROM? ¿Cómo? #include <avr/io.h> #include <avr/eeprom.h> // macro for easier usage #define read_eep...