Hallo,
ich habe ein Arduino Programm geschrieben, das aus Arduino C-code und 
Assembler code besteht.
Aus irgendeinem Grund erkennt der Compiler der Arduino IDE das keyword 
'PORTD' im Assembler Programm nicht. Im C-code wird 'PORTD' aber 
erkannt. Ich habe versucht verschiedenste #includes einzubinden, bisher 
ohne Erfolg. Der workaround mit der Registeradresse 0x0B(=PORTD) 
funktioniert zwar, aber vielleicht kann mir jemand helfen, die Ursache 
dieses Verhaltens zu klären. Hier ist ein Beispielprogramm
1  | /******************************************************
  | 
2  |  * PORTD wird im Assembler Programm nicht erkannt
  | 
3  | *********************************************************/
  | 
4  | 
  | 
5  | byte LED = 4;  //= PD4
  | 
6  | 
  | 
7  | void setup(){
 | 
8  |   Serial.begin(9600);
  | 
9  |   Serial.println();
  | 
10  |   Serial.println("*** Assembler Test");
 | 
11  |   Serial.println();
  | 
12  | 
  | 
13  |   pinMode(LED,OUTPUT);  
  | 
14  | }
  | 
15  | 
  | 
16  | void loop()  {
 | 
17  |   Serial.println("Assembler");
 | 
18  |   LEDon();
  | 
19  |   delay(1000);
  | 
20  |   LEDoff();
  | 
21  |   delay(1000);
  | 
22  |   
  | 
23  |   Serial.println("*** C Programm");
 | 
24  |   PORTD = 0x10;
  | 
25  |   delay(1000);
  | 
26  |   PORTD = 0x00;
  | 
27  |   delay(1000);
  | 
28  | }
  | 
29  | //*******************
  | 
30  | 
  | 
31  | void LEDon ()  {
 | 
32  |   asm volatile
  | 
33  |   (
  | 
34  |      "ldi r16,0x10\n"
  | 
35  |      //"out PORTD,r16\n" //<----- PORTD wird nicht erkannt
  | 
36  |      "out 0x0B,r16\n"    // <-- 0x0B = PORTD
  | 
37  |   );  
  | 
38  | }
  | 
39  | 
  | 
40  | void LEDoff ()  {
 | 
41  |   asm volatile
  | 
42  |   (
  | 
43  |      "ldi r16,0x00\n"
  | 
44  |      //"out PORTD,r16\n" //<----- PORTD wird nicht erkannt
  | 
45  |      "out 0x0B,r16\n"    // <-- 0x0B = PORTD
  | 
46  |   );  
  | 
47  | }
  | 
und hier die Fehlermeldung, wenn die Auskommentierung von 'PORTD' 
entfernt wird :
C:\Users\hansk\AppData\Local\Temp\ccV87F6x.ltrans0.ltrans.o: In function 
`LEDon':
D:\Arduino\Programme\Assembler\Neuer Ordner\AssPort/AssPort.ino:37: 
undefined reference to `PORTD'
collect2.exe: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board Arduino Uno.
Vielen Dank