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