Pages: [1] 2   Go Down
Author Topic: Inline Assembler  (Read 1858 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich wollte fragen ob es Inline-Assembler für den Arduino gibt
und wo es ein passendes Tutorial dazu gibt.

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20273
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://arduino.cc/forum/index.php/topic,128809.msg969155.html#msg969155
Grüße Uwe
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Und gibt es auch ein passendes Tutorial?

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20273
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ein Tutorial zum programieren von AVR in Assembler?

http://www.avr-asm-tutorial.net/avr_de/index.html
http://www.avr-asm-download.de/beginner_de.pdf

oder einfach nach "atmel assembler tutorial" in einer Suchmaschiene suchen.

Auf alle Fälle ist das ein lern- und arbeitsintensives Vorhaben den Controller in Assembler zu programmieren.
 
Grüße Uwe
« Last Edit: December 25, 2012, 02:31:44 pm by uwefed » Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich versuche nun folgenden Code auszuführen, erhalte dann aber einen Fehler:
Code:
void setup() {
  asm("out DDRB,R16");
}
void loop() {}
Und folgenden Fehler:
Code:
C:\Users\Addi\AppData\Local\Temp/ccxlcYaN.s: Assembler messages:
C:\Users\Addi\AppData\Local\Temp/ccxlcYaN.s:29: Error: constant value required

Addi
« Last Edit: January 16, 2013, 12:50:58 pm by Addi » Logged

  / \    _|  _| o
 /--\ (_| (_| |

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Weiß jemand wo das Problem liegt?

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4743
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Der Assembler-Befehl macht so auch keinen Sinn. Du schreibst ein Register auf einen Port, hast aber keine Ahnung, was im Register drin steht. Zudem ist die Register-Verwendung innerhalb von C-Code nicht so einfach, da der C-Code ja auch von diesen Registern Gebrauch macht und sich bei Überschneidungen unvorhersehbare Zustände ergeben können. Worauf willst Du denn raus? Was ist der Zweck der Assembler-Anweisungen?
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist ein Teil von diesem Code.
Ich wollte nur mit einem Befehl testen ob die IDE den Code compilieren kann.

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Der Assembler "constant value required".

DDRB ist keine Konstante. Ansonsten würde der C Compiler bei Zuweisungen DDRB = ... meckern.
« Last Edit: January 16, 2013, 01:37:07 pm by Udo Klein » Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann ich dann DDRB zu einem konstanten Wert ändern?

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Neuss
Offline Offline
Full Member
***
Karma: 0
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Schau mal hier:

http://www.stanford.edu/class/ee281/projects/aut2002/yingzong-mouse/media/GCCAVRInlAsmCB.pdf

unter Punkt 8.1 "Using Constants".

Die Syntax der asm-Anweisung mit Parametern ist schon etwas gewöhnungsbedürftig.

Wenn du es trotzdem versuchen willst, hilft dir Google bei der Suchge nach Tutorials: http://lmgtfy.com/?q=avr gcc inline asm.

Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kann man das vermeiden, wenn man die Datei m328Pdef.inc includiert? Wenn ich das
versuche erhalte ich den Fehler dass die Datei nicht gefunden wurde. Egal ob sie im tmp-Verzeichniss
oder im Projektverzeichniss liegt.
Code:
void setup() {
  asm(".INCLUDE \"m238Pdef.inc\"");
  asm("out DDRB,R16");
}
void loop() {}
Addi
« Last Edit: January 16, 2013, 03:06:31 pm by Addi » Logged

  / \    _|  _| o
 /--\ (_| (_| |

Germany
Online Online
Faraday Member
**
Karma: 49
Posts: 2750
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du weisst, dass du keinen Assembler brauchst, um z.B. die atmega328 ports ( DDRB in deinem Beispiel ) direkt in c anzusprechen?
Was der avr-gcc daraus macht, ist nicht wirklich schlechter als eigene asm Kunststückchen.
 
c             -->      asm
DDRB = 0xFF;  --> ldi   R16,0b11111111
                  out   DDRB,R16
PORTB = 0;        ldi   R16,0
                  out   PORTB,R16



« Last Edit: January 17, 2013, 04:56:21 pm by michael_x » Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich möchte dies zum lernen von Avr-Assembler machen. Hätte ich einen Programmer würde
ich Atmel Studio verwenden, da ich keinen habe, will ich dies mit der Arduino IDE machen.

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2450
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich möchte dies zum lernen von Avr-Assembler machen.

Dafür ist das Einbinden von "Inline-Assembler" in eine fremde Entwicklungssoftware nicht geeignet.

Per "Inline-Assembler" bindet man in sein Programm allenfalls anderweitig entwickelte, debuggte und getestete Software ein.

Besorge Dir am besten Atmel Studio und einen Programmer, wenn Du selbst in Assembler was für den Arduino programmieren möchtest, dann hast Du was zum Entwickeln, Debuggen und Testen und nicht nur zum Einbinden.

Code per Inline-Assembler einbinden um etwas über Assembler-Programmierung zu lernen ist so wie eine Fertigpizza in den Backofen zu schieben um was über Pizzamachen zu lernen.
Logged

Pages: [1] 2   Go Up
Jump to: