Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   824 / 824
(#) Sick-Bastard hozzászólása Júl 12, 2021 /
 
Üdv!

Elnézést ez nem igazán AVR kérdés lesz, de hirtelen nem tudok jobb topikot.

A WinAVRben található Make file-al kapcsolatban lenne egy kérdésem.
Azt szerettem volna elérni, hogy minden fordítás során frissüljön egy version.h file, ami a fordítás dátumát és idejét tartalmazza. Ez sikerült is a kódban szereplő linkek segítségével, ill. egy új date.exe megírásával.

  1. ## my new code starts here
  2. ##      code from:      https://www.avrfreaks.net/forum/convert-date-string-during-pre-processor-or-comile-time
  3. ##      https://www.avrfreaks.net/comment/759004#comment-759004
  4. version.h:
  5.        
  6.         echo '#ifndef           _VERSION_H_' > $@
  7.         echo '#define           _VERSION_' >> $@
  8.         echo '#include  <avr/pgmspace.h>' >> $@
  9.        
  10.         echo '//data from date_precompiled.exe' >> $@
  11.         DateTime_PreCompiled >> $@;
  12.        
  13.         echo '#endif' >> $@
  14.  
  15. # Always compile version.h to get correct compilation date and time
  16. .PHONY: version.h
  17.  
  18. ## my new code ends here


A kóddal nincs semmi baj, működik, egy apró kellemetlenség/szépséghibát leszámítva.

Ha WinAVR-ben ha a (fel)programozásra kattintok (Tools/Program), a Make file akkor is lefuttatja és egy új version.h filet generál.

A kérdés:
A Makefile melyik részébe/hogyan kellene a "parancsomat" beilleszteni, hogy csak build során fusson le? (már ha lehet ilyet csinálni)
(#) csatti2 válasza Sick-Bastard hozzászólására (») Júl 12, 2021 / 1
 
Nem ismerem a WinAVR-t, de nézd meg, hogy tudsz-e egyedi "target"-ek futtatni benne. Ha igen, hozz létre egyet, ami frissíti a version.h-t, míg a normál build békén hagyja.

Ha használsz valamilyen verziókövető rendszert, akkor viszont van egy sokkal jobb megoldás. Pl. git esetén simán ki lehet nyerni az utolsó commit adatait és abból generálni a version.h-t. Így teljesen mindegy milyen számítógépről, illetve mikor fordítod a programot, amíg nem tettél hozzá új commit-ot, addig ugyanazt a verzió kódot kapod.

pl.:
  1. ## Git
  2. VERSION_SHORT           =       $(shell git describe --tags --abbrev=0)
  3. VERSION                 =       $(shell git describe --tags --long)
  4. COMMITDATETIME          =       $(shell git log -1 --date=format:'%Y%m%d-%H%M' --format=%cd)
  5. BRANCH                  =       $(shell git rev-parse --abbrev-ref HEAD)
  6.  
  7. # Outputs
  8. VER = $(SRC)/version.h
  9.  
  10. # Generating version file
  11. $(VER):
  12.         @echo Generating $@
  13.         @echo /* THIS IS A GENERATED FILE, DO NOT EDIT IT! */  > $@
  14.         @echo #define VERSION_SHORT     "$(VERSION_SHORT)" >> $@
  15.         @echo #define VERSION           "$(VERSION)-$(BRANCH)-$(COMMITDATETIME)" >> $@
  16.  
  17. .PHONY: clean
  18. clean:
  19.         rm -rf $(OBJECTS) $(DEP_FILES) $(SU_FILES) $(ELF) $(HEX) $(BIN) $(EXE) $(MAP) $(VER) $(ISE)


Kimenet:
  1. /* THIS IS A GENERATED FILE, DO NOT EDIT IT! */  
  2. #define VERSION_SHORT   "v1.0.1"
  3. #define VERSION         "v1.0.1-3-g33ff228-master-20210417-1347"
A hozzászólás módosítva: Júl 12, 2021
(#) Sick-Bastard válasza csatti2 hozzászólására (») Júl 18, 2021 /
 
Köszönöm az iránymutatást!
A Make File-al kapcsolatban nincs sok rutinom, így eltartott egy ideig mire meglett.

  1. # Default target.
  2. all: begin version gccversion sizebefore build sizeafter end
  3. ...
  4. ## my new code starts here
  5. ##      code from:      https://www.avrfreaks.net/forum/convert-date-string-during-pre-processor-or-comile-time
  6. ##      https://www.avrfreaks.net/comment/759004#comment-759004
  7. # Version.h Filename.
  8. VERSION_FILE = version.h
  9.  
  10. version: $(VERSION_FILE)
  11.         @echo '#ifndef          _VERSION_H_' > $(VERSION_FILE)
  12.         @echo '#define          _VERSION_' >> $(VERSION_FILE)
  13.         @echo '#include <avr/pgmspace.h>' >> $(VERSION_FILE)
  14.         @echo '//data from date_precompiled.exe' >> $(VERSION_FILE)
  15.         @DateTime_PreCompiled >> $(VERSION_FILE)
  16.         @echo '#endif' >> $(VERSION_FILE)
  17.  
  18. # Always compile version.h to get correct compilation date and time
  19. ## my new code ends here


Most már teljes mértékben úgy működik ahogy elképzeltem.
(#) pipi válasza Sick-Bastard hozzászólására (») Júl 18, 2021 / 1
 
a 12-es sorban nem inkább _VERSION_H_ ?
(#) Sick-Bastard válasza pipi hozzászólására (») Júl 18, 2021 /
 
Dede, bocs elírás.
(#) dc001 válasza Sick-Bastard hozzászólására (») Aug 7, 2021 /
 
"Azt szerettem volna elérni, hogy minden fordítás során frissüljön egy version.h file, ami a fordítás dátumát és idejét tartalmazza."

Szerintem jobb megoldás, ha a fordítónak paraméterként adod át include file helyett, mert így elkerülöd a version.h generálása miatti újra fordítást, pl.:

CFLAGS+=" -DVERSION_SHORT=$(VERSION_SHORT)"

vagy

CFLAGS="$(CFLAGS) -DVERSION_SHORT=$(VERSION_SHORT)"

A "-D<kulcs>=<ertek>" ugyan az, mintha file-ban lenne a "#define <kulcs> <ertek>".
(#) Sick-Bastard válasza dc001 hozzászólására (») Aug 12, 2021 /
 
Üdv!

A CFLAGS-et lehet rosszul használom, mivel nekem nem csinál semmit. Legalábbis nem találok változást.

Lehet félreérthető voltam, de én csak a flash-elés/felprogramozás során akartam elkerülni, az újrafordítást. Ezt a lentebbi hozzászólásomban sikerült is megoldanom. Most már csak a make/build során generálódik újra (frissül) a version.h file.
Következő: »»   824 / 824
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem