Offline
Full Member
Karma: 3
Posts: 186
|
 |
« on: December 25, 2012, 12:57:58 pm » |
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
Brattain Member
Karma: 172
Posts: 16131
+39 349 2158303
|
 |
« Reply #1 on: December 25, 2012, 01:45:17 pm » |
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #2 on: December 25, 2012, 01:53:32 pm » |
Und gibt es auch ein passendes Tutorial?
Addi
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16131
+39 349 2158303
|
 |
« Reply #3 on: December 25, 2012, 02:29:32 pm » |
Ein Tutorial zum programieren von AVR in Assembler? http://www.avr-asm-tutorial.net/avr_de/index.htmlhttp://www.avr-asm-download.de/beginner_de.pdfoder 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
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #4 on: December 27, 2012, 06:33:31 pm » |
Ich versuche nun folgenden Code auszuführen, erhalte dann aber einen Fehler: void setup() { asm("out DDRB,R16"); } void loop() {}
Und folgenden Fehler: 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
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #5 on: January 16, 2013, 12:52:35 pm » |
Weiß jemand wo das Problem liegt?
Addi
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
Switzerland
Offline
Faraday Member
Karma: 71
Posts: 3475
|
 |
« Reply #6 on: January 16, 2013, 01:20:27 pm » |
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
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #7 on: January 16, 2013, 01:26:23 pm » |
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
Faraday Member
Karma: 16
Posts: 3220
20 LEDs are enough
|
 |
« Reply #8 on: January 16, 2013, 01:34:54 pm » |
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
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #9 on: January 16, 2013, 01:39:44 pm » |
Wie kann ich dann DDRB zu einem konstanten Wert ändern?
Addi
|
|
|
|
|
Logged
|
/ \ _| _| o /--\ (_| (_| |
|
|
|
|
|
|
Offline
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #11 on: January 16, 2013, 01:50:29 pm » |
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. 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
Offline
Edison Member
Karma: 28
Posts: 1583
|
 |
« Reply #12 on: January 16, 2013, 03:46:57 pm » |
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
Full Member
Karma: 3
Posts: 186
|
 |
« Reply #13 on: January 17, 2013, 08:56:36 am » |
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
God Member
Karma: 35
Posts: 949
|
 |
« Reply #14 on: January 17, 2013, 09:19:06 am » |
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
|
|
|
|
|
|