Hallo in die Runde,
ich habe mir mal diesen Thread wieder hervorgeholt und meinen Computer in Sachen C-Firmware Quellen, Compiler und Git auf den aktuellen Stand gebracht. Nach zwei Rechner-Umzügen in den letzten Jahren war ich mir nicht so ganz sicher ob, noch alles da ist und auch läuft. Aber im Prinzip habe ich weitgehend gute Nachrichten:
Die Quellen kompilieren auch mit den beiden aktuellen avr-gcc Compilern, die Microchip bereitstellt:
V3.7.0 und
V4.0.0. mit den folgenden Details:
a) Ich habe mir nur die von mir gepflegten Sourcen
ADA, DCG2, DDS, DIV, EDL2 und FPGA angesehen.
b) Zuletzt (2020) habe ich die Version 3.6.2 verwendet, alle Sourcen lassen sich auch mit der Version 3.7.0 compilieren.
c) Mit der Version 4.0.0 gibt es Probleme, die aber nicht im Compiler liegen, sondern in den Quellen. Der neue Compiler ist nur etwas pingeliger, und das zurecht, er hat auch zwei Fehler und eine uneindeutige Sitatution gefunden. Ich habe inzwischen alle problematischen Quellen (ADA, FPGA) wieder so auf Stand gebracht, dass sie auch compilieren.
Ich muss mir das aber nochmal in Ruhe ansehen; eigentlich möchte ich die Korrekturen, und die neuen Hexfiles vor dem Hochladen auch testen.
Damit zum zweiten Teil der Nachricht.
Die Frage von Martin hat mich dazu gebracht, ein Batchfile zum Compilieren für jedes Modul zusammenzustellen, das im Moment so aussieht:
Code: Alles auswählen
@echo off
rem ********************************************
rem Select avr-gcc version
rem ********************************************
rem set VERSION=3.6.2.1778
rem set VERSION=3.7.0.1796
set VERSION=4.0.0.52
rem ********************************************
rem Set the path to the avr-gcc toolchain
rem ********************************************
set AVRGCCPATH=c:\AVR8GCC\%VERSION%\avr8-gnu-toolchain
rem ********************************************
rem Set the project parameters
rem ********************************************
set TARGETNAME=DCG2
set MCU=atmega32
set F_CPU=16000000UL
set DEFINES=
rem set DEFINES=-DDUAL_DAC
set SOURCES=uart.c dcg.c dcg-hw.c dcg-panel.c dcg-parser.c encoder.c i2c.c i2creg.c lcd.c parser.c timer.c dcg-hw-asm.S
rem ********************************************
rem Let's compile and convert
rem ********************************************
echo on
"%AVRGCCPATH%\bin\avr-gcc.exe" -mmcu=%MCU% -I. -gdwarf-2 -DF_CPU=%F_CPU% -DUART_2X -DUART_BAUDRATE=38400 -I "%AVRGCCPATH%\avr\include" -Os -mcall-prologues -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -fno-inline-small-functions -fno-split-wide-types -fno-tree-scev-cprop -ffreestanding -Wall -Wextra -Werror -Wstrict-prototypes %OPTION% -std=gnu99 -Wl,--relax,--gc-sections,-Map=%TARGETNAME%_%MCU%%DEFINES%.map,--cref,-u,vfprintf -MD -MP %SOURCES% --output %TARGETNAME%_%MCU%%DEFINES%.elf -lprintf_flt -lm
"%AVRGCCPATH%\bin\avr-objcopy" -O ihex -R .eeprom %TARGETNAME%_%MCU%%DEFINES%.elf %TARGETNAME%_%MCU%%DEFINES%_Firmware.hex
@echo off
"%AVRGCCPATH%\bin\avr-size" -C --mcu=%MCU% %TARGETNAME%_%MCU%%DEFINES%.elf
rem "%AVRGCCPATH%\bin\avr-size" -G %TARGETNAME%_%MCU%%DEFINES%.elf
pause
Man kann den Pfad auf den bzw. die Compiler oben einstellen und dann bei den Parametern "DEFINES" wählen, ob man die einfache DAC-Variante oder den Dual-DAC hat. Die Quellen werden im gleichen Verzeichnis wie das Batchfile erwartet.
Das funktioniert auch schon sehr schön, nur hat sich leider jemand beim Tool "avr-size" gedacht, er müsse mal die Kommandozeilenparameter ändern. Damit geht der "avr-size" vom Compiler V4.0.0 nur mit "-G" und gibt leider nicht so schön die Summe des Flash und des RAM aus, wie der alte. Man kann den alten aber auch für das elf-File des neuesten Compilers verwenden.
Ich stelle mir vor, dass ich dann für jedes der genannten Module auch dieses Batchfile auf SourceForge mit zur Verfügung stelle, dann gibt es auch kein Raten zu den Compileroptionen.
Die Codegrößen unterscheiden sich zwischen den verschiedenen Versionen (ich habe derzeit fünf in der Liste) nicht wirklich. Da ist wohl die Luft schon weitestgehend raus. Aber wie man sieht gibt es durchaus Verbesserungen, die noch Fehler finden. Ich bin aber erstaunt, dass nur eine Handvoll Änderungen an den Quellen nötig war, nach mindestens 6 Jahren Pause.
Wer noch Ideen oder Wünsche hat, bitte melden!
Bis demnächst.
Paul