Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:avr-gcc

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:avr-gcc [2013/08/18 00:01] – [Unbenutzte Funktionen entfernen] ollisoftware:avr-gcc [2018/02/24 07:18] (aktuell) – [Links] olli
Zeile 64: Zeile 64:
 kann man dann den Linker anweisen, unbenutzte Sections zu entfernen, so dass das entstehende Binary kleiner wird. kann man dann den Linker anweisen, unbenutzte Sections zu entfernen, so dass das entstehende Binary kleiner wird.
  
-**Achtung** Damit Interrupthandler nicht entfernt werden, müssen sie mit+<WRAP important round> 
 +//**Achtung**// 
 +Damit Interrupthandler nicht entfernt werden, müssen sie mit
 <code c> <code c>
 __attribute__ ((used)) __attribute__ ((used))
 </code> </code>
 gekennzeichnet werden. gekennzeichnet werden.
 +</WRAP>
 +
 +====== PIN, PORT und DDR mit einem define anpassen ======
 +Um einen Pin am AVR zu konfigurieren und zu benutzen, benötigt man die drei Variablen PINX, PORTX, DDRX.
 +Um dies konfigurierbar zu machen, kann man drei defines verwenden:
 +<code c>
 +#define SENSOR_DDR DDRA
 +#define SENSOR_PORT PORTA
 +#define SENSOR_PIN PINA
 +</code>
 +Möchte man den Port z.B. von A auf B ändern, muss man drei defines anpassen. Mit einem Makrotrick kann man das vermeiden. PINX, PORTX, und DDRX werden so definiert:
 +
 +<code c>
 +#define SENSOR_DDR __CONCAT(DDR, SENSOR_PORT_LETTER)
 +#define SENSOR_PORT __CONCAT(PORT, SENSOR_PORT_LETTER)
 +#define SENSOR_PIN __CONCAT(PIN, SENSOR_PORT_LETTER)
 +</code>
 +
 +Mit 
 +<code c>
 +#define SENSOR_PORT_LETTER A
 +</code>
 +lässt sich dann der Buchstabe für alle drei Variablen anpassen. Das Makro %%__CONCAT%% ist dabei wie folgt definiert:
 +<code c>
 +#define __CONCATenate(left, right)   left ## right
 +#define __CONCAT(left, right)   __CONCATenate(left, right)
 +</code>
 +Man kann diese Makros selbst definieren oder die Definition aus dem Header stdint.h benutzen, da man diesen sowieso fast immer inkludiert. 
 ===== Links ===== ===== Links =====
-  * [[http://www.github.com/abcminiuser/avr-tutorials/blob/master/ManagingLargeProjects/Output/ManagingLargeProjects.pdf?raw=true|C Code modularisieren]]+  * [[http://www.swwiki.e-dschungel.de/C|Hinweise zu C allgemein]] 
 +  * [[https://godbolt.org/|Compiler-Explorer]] 
 + 
  
software/avr-gcc.1376776895.txt.gz · Zuletzt geändert: 2013/08/18 00:01 von olli