Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [AVR-GCC]Argomenti di compilazione
Forum - C/C++ - [AVR-GCC]Argomenti di compilazione

Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:36
Sabato, 12/12/2015
Buonasera, per necessità di compilazione su diversi progetti che si devo articolare in modo particolare ho dovuto abbandonare il make standard di AtmelStudio e scrivere da me un makefile adatto, qualche problema iniziale ma ora funziona tutto alla perfezione. Ora però mi sorgono dei dubbi sugli argomenti da passare ad avr-gcc, sotto linux me la cavavo con il semplici parametri -c e -o, ma sembra che AtmelSudio ragioni in maniera leggermente piu complessa, ecco due linee di compilazioni generiche di avr-gcc generate da Atmel Studio:
Non ottimizzato
Codice sorgente - presumibilmente Plain Text

  1. "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.91\include"  -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.91\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "SPI.d" -MT"SPI.d" -MT"SPI.o"   -o "SPI.o" ".././SPI.c"


Ottimizzato
Codice sorgente - presumibilmente Plain Text

  1. "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DNDEBUG  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.91\include"  -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.91\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "SPI.d" -MT"SPI.d" -MT"SPI.o"   -o "SPI.o" ".././SPI.c"


Ignorando il significato di molti argomenti del compilatore ho generato un makefile d'esempio minimale
Codice sorgente - presumibilmente Plain Text

  1. ATMEGA_INCLUDE="C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.91\include"
  2. MCU_INCLUDE="C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.91\gcc\dev\atmega328p"
  3. MCU=atmega328p
  4.  
  5. STANDARD_OPTIONS=-x c -std=gnu99 -I ${ATMEGA_INCLUDE} -mmcu=${MCU} -B ${MCU_INCLUDE}
  6. ADDITIONAL_OPTIONS=
  7. DEBUG=-DDEBUG -O1
  8. RELEASE=-DNDEBUG -Os
  9. OPTIONS=${STANDARD_OPTIONS} ${ADDITIONAL_OPTIONS}
  10.  
  11. .PHONY: all debug release clean
  12.  
  13. all: debug release
  14.  
  15. debug: Debug\libMFRC522SPI.a
  16.  
  17. release: Release\libMFRC522SPI.a
  18.  
  19. Debug\libMFRC522SPI.a: SPI\MFRC522SPI.h SPI\MFRC522SPI.c
  20.         -mkdir Debug
  21.         avr-gcc.exe -c ${OPTIONS} ${DEBUG} -o "Debug\MFRC522SPI.o" "SPI\MFRC522SPI.c"
  22.         avr-ar.exe -r -o Debug\libMFRC522SPI.a Debug\MFRC522SPI.o
  23.  
  24. Release\libMFRC522SPI.a: SPI\MFRC522SPI.h SPI\MFRC522SPI.c
  25.         -mkdir Release
  26.         avr-gcc.exe -c ${OPTIONS} ${RELEASE} -o "Release\MFRC522SPI.o" "SPI\MFRC522SPI.c"
  27.         avr-ar.exe -r -o Release\libMFRC522SPI.a Release\MFRC522SPI.o
  28.  
  29. clean:
  30.         -rm -f Debug/*.o
  31.         -rm -f Release/*.o


La compilazione non crea problemi.

Ho eliminato a priori -funsigned-char -funsigned-bitfields.
Vi sono però elementi che non ho mai visto e non riesco a capire se effettivamente svolgano un compito importante o meno. Per esempio
Codice sorgente - presumibilmente Plain Text

  1. -ffunction-sections -fdata-sections -fpack-struct -fshort-enums


Non capisco proprio a che servano, altri
Codice sorgente - presumibilmente Plain Text

  1. -fpack-struct -fshort-enums


non capisco se siano effettivamente utili al fine dell'ottimizzazione.
E poi vi sono la serie di M comandi
Codice sorgente - presumibilmente Plain Text

  1. -MD -MP -MF "SPI.d" -MT"SPI.d" -MT"SPI.o"


che non ho mai avuto modo di utilizzare.

In poche parole vorrei chiedere a voi un parere su cosa sia veramente utile e cosa si potrebbe eliminare.
Vi ringrazio.

Ultima modifica effettuata da Roby94 il 12/12/2015 alle 19:06


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote