Salida de la herramienta de compilación personalizada de Atmel Studio 7

1

Recientemente, cambié a Atmel Studio 7 (AS7) para uno de mis proyectos AVR y, después de un poco de complicidad, descubrí cómo obtener la "Herramienta de programación personalizada" para cargar correctamente el firmware compilado en un dispositivo de destino. usando el comando:

"$(SolutionDir)\avrdude\avrdude.exe" -C"$(SolutionDir)avrdude\avrdude.conf" -patmega2560 -cwiring -b115200 -D -v -Uflash:w:"$(OutputDirectory)\$(OutputFileName).hex":i -P\.\COM5

Si bien esto funciona correctamente, AS7 parece pensar que falla todo el tiempo porque genera información detallada. Si miro la ventana de resultados de la herramienta de programación personalizada, obtengo el resultado detallado de avrdude como se esperaba, pero AS7 lo considera todo como mensajes de error:

ERROR:avrdude.exe: writing flash (12578 bytes):
ERROR:Writing | ################################################## | 100% 2.05s
ERROR:avrdude.exe: 12578 bytes of flash written
ERROR:avrdude.exe: verifying flash memory against ATMega2560\AstroEQ6Mega2560.hex:
ERROR:avrdude.exe: load data flash data from input file ATMega2560\AstroEQ6Mega2560.hex:
ERROR:avrdude.exe: input file ATMega2560\AstroEQ6Mega2560.hex contains 12578 bytes
ERROR:avrdude.exe: reading on-chip flash data:
ERROR:Reading | ################################################## | 100% 1.47s
ERROR:avrdude.exe: verifying ...
ERROR:avrdude.exe: 12578 bytes of flash verified
ERROR:avrdude.exe: safemode: lfuse reads as FF
ERROR:avrdude.exe: safemode: hfuse reads as D8
ERROR:avrdude.exe: safemode: efuse reads as FF
ERROR:avrdude.exe: safemode: Fuses OK (H:FF, E:D8, L:FF)
ERROR:avrdude.exe done.  Thank you.
Process exited with code 0

Es evidente que avrdude se completa con éxito, y el programa se descarga y se ejecuta. Sin embargo, todos esos prefijos "ERROR:" son realmente molestos, especialmente porque al final del proceso aparece una ventana de error que insiste en que la herramienta de programación personalizada falló.

¿Alguien tiene experiencia con la configuración de la herramienta de programación personalizada y podría decirme cómo debo ajustar el comando de la herramienta de programación para que su salida no se muestre como errores?

    
pregunta Tom Carpenter

1 respuesta

1

Bueno, después de mucho rascarse la cabeza, finalmente he rastreado dónde está el problema. Básicamente es porque avrdude usa STDERR para todos sus resultados detallados en lugar de STDOUT. Visual Studio en la ventana de resultados es, como resultado, el tratamiento de cada línea que genera como un error.

Para resolver el problema, se requiere que la salida de avrdude se redirija de STDERR a STDOUT para que se muestre en la ventana de salida sin causar un error. El enfoque típico de esto es simplemente agregar 2>&1 al final del comando, sin embargo, Visual Studio está tratando esto como un argumento para que no funcione.

La solución parece ser básicamente envolver avrdude en un archivo por lotes para hacer la redirección. He construido el siguiente archivo por lotes:

@echo off

set solndir=%~1
set device=%~2
set hexfile=%~3
set port=%~4

if /I "%device%" == "ATMega2560" (
    set prog=wiring
    set baud=115200
) else (
    set prog=arduino
    set baud=57600
)

echo Running AVRDude With Command:
echo "%solndir%avrdude\avrdude.exe" -C"%solndir%avrdude\avrdude.conf" -p%device% -c%prog% -b%baud% -D -v -Uflash:w:"%hexfile%":i -P%port% 2>&1

"%solndir%avrdude\avrdude.exe" -C"%solndir%avrdude\avrdude.conf" -p%device% -c%prog% -b%baud% -D -v -Uflash:w:"%hexfile%":i -P%port% 2>&1

Luego puedo configurar el comando de la herramienta de programación personalizada para:

$(SolutionDir)avrdude\avrdudeStdout.bat $(SolutionDir) $(avrdevice) "$(OutputDirectory)\$(OutputFileName).hex" "\.\COM4"

El resultado es que avrdude ahora se ejecuta correctamente y la salida ahora está en STDOUT, por lo que ya no está causando mensajes de error en Atmel Studio. En el caso de que avrdude falle, un archivo de lote aún devuelve un código de salida distinto de cero y eso emite un error correctamente.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas