Error de compilación AVR - señal envenenada

0

Tengo este código de 2002. Tuve que actualizar las macros pero todavía recibo mensajes de error "envenenados" del compilador (AVR Cross Compile, MAC OS X) en Eclipse:

Description Resource    Path    Location    Type
attempt to use poisoned "SIG_2WIRE_SERIAL"  test        line 533, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_ADC"   test        line 470, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_COMPARATOR"    test        line 480, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_EEPROM_READY"  test        line 475, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_INPUT_CAPTURE1"    test        line 417, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_INTERRUPT0"    test        line 367, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_INTERRUPT1"    test        line 372, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_INTERRUPT2"    test        line 377, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_OUTPUT_COMPARE0"   test        line 437, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_OUTPUT_COMPARE1A"  test        line 422, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_OUTPUT_COMPARE1B"  test        line 427, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h C/C++ Problem
attempt to use poisoned "SIG_OUTPUT_COMPARE2"   test        line 407, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h 
attempt to use poisoned "SIG_OVERFLOW0" test        line 442, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h 
attempt to use poisoned "SIG_OVERFLOW1" test        line 432, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h 
attempt to use poisoned "SIG_OVERFLOW2" test        line 412, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h 
attempt to use poisoned "SIG_SPI"   test        line 447, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h 
attempt to use poisoned "SIG_SPM_READY" test        line 539, external location: /usr/local/CrossPack-AVR-20131216/avr/include/avr/iom128.h 

Aquí está el código completo (Atmel128):

enlace

Por lo que sé, el prefijo SIG_ significa que estos son vectores de interrupción. Si bien no hay interrupciones en el código, todavía se queja. ¿Alguna idea de qué estoy haciendo mal?

    
pregunta alkopop79

2 respuestas

1

No estoy seguro de qué comando está utilizando para compilar, pero no puedo replicar los errores de señal envenenados.

Sin embargo, para que se compile con avr-gcc, se deben realizar los siguientes cambios:

  1. Reemplace las 8 apariciones de __elpm_inline con pgm_read_byte_far . Alternativamente, puedes agregar #define __elpm_inline(x) pgm_read_byte_far(x) a la parte superior del código, aunque eso es feo.

  2. Reemplaza tu extraño uso de las macros de direcciones como funciones. Por ejemplo haces DDRA(0<<DDA3) . Eso debería ser DDRA &= ~(1<<DDA3) y así sucesivamente.

  3. Elimine la instrucción #include <avr/iom128.h> . Aunque eso no impide que se compile, no debería estar allí.

Después de eso, se compila bien usando avr-gcc con marcas de -mmcu=atmega128 y -DF_CPU=... .

    
respondido por el Tom Carpenter
1

He conseguido eso antes con el código antiguo. Está utilizando un nombre antiguo en desuso para la señal de interrupción, por ejemplo, el del ADC ha cambiado a ADC_vect. Mire dónde se definen los antiguos nombres de SIG_ y encontrará los nombres actualizados para los nombres de vectores de interrupción en ese archivo .h

    
respondido por el Kvegaoro

Lea otras preguntas en las etiquetas