Zu den Fehlermeldungen kann ich nichts sagen.

Zu den defines aber schon.
Die defines dienen nur das du den Code besser lesen kannst. Es wird kein Speicher irgendwie bzw irgendwo reserviert.

Beim Übersetzen werden alle "define-Namen" durch den Wert ersetzt.
Als Beispiel, so schreibst du es:
Code:
 #define speed 100
main
{
OCR0A = speed;
}
So wird es nach dem übersetzen:
Code:
main
{
OCR0A = 100;
}
Du siehst es aber nicht, dass es ersetzt wird. Wenn du das define 20x verwendest, wird es 20x ersetzt. Das ist auch der Grund, warum du im Programm nicht auf ein define schreiben kannst. Wenn du z.B. in meinem Beispiel "speed = 150;" schreibst, kommt ein Fehler und du kannst das Programm nicht übersetzen.

MfG Hannes