Forum: Mikrocontroller und Digitale Elektronik C Programm in asm umwandeln


von Christian (Gast)


Lesenswert?

Hallo,
Ich habe von Pollin.de ein IR empfänger gekauft der mit einem 
ATTINY2313-20 PU bestückt ist.
Die software für den Käfer kann man auf der Seite herunterladen, 
allerdings nur in C ?! glaube ich. Jedenfalls müsste ich daran etwas 
ändern und arbeite nur mit dem AVR studio in assembler. Ich habe mich 
ein bisschen durchs internet gesucht und herausgefunden das man die C 
Dateien in asm Daten umwandeln kann. Wie das ganze funktioniert verstehe 
ich jedoch nicht.

Ich habe hier von pollin.de nun mehrere daten;
main.c
uart.c
uart.h
ir60.c
ir60.h

bekomme ich das nun irgendwie in asm umgewandelt ?
Welche Software?
Vorgehensweise ?
Klapt das am Ende auch wenn ich es übertragen, übersetzen und Flashen 
würde ?

Mfg christian

von Timmo H. (masterfx)


Lesenswert?

Du brauchst den AVR GCC. Gibt es bei Atmel auf der Seite auch als 
separaten Download (AVR GCC Toolchain)

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> bekomme ich das nun irgendwie in asm umgewandelt ?

nein (nicht sinnvoll, so das du etwas darin ändern könntest)

> Vorgehensweise ?
WinAVR installieren, C -> HEX -> µC

wenn du etwas ändern willst, dann mache das im C.

von Christian (Gast)


Lesenswert?

Peter II schrieb:
> wenn du etwas ändern willst, dann mache das im C.

Ich kann kein C, absolut nicht ich hab nichtmal irgendwas davon 
installiert :(

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> Ich kann kein C, absolut nicht ich hab nichtmal irgendwas davon
> installiert :(

dann kannst du es halt nicht machen.

von Frank W. (wesoft) Benutzerseite


Lesenswert?

Christian schrieb:
> Peter II schrieb:
>> wenn du etwas ändern willst, dann mache das im C.
>
> Ich kann kein C, absolut nicht ich hab nichtmal irgendwas davon
> installiert :(

Dann erklär uns doch mal Deine Änderungswünsche. Wenns nur ne 
Kleinigkeit ist, kriegen wir das hier vielleicht gemeinsam hin.

Frank

von Christian (Gast)


Lesenswert?

Timmo H. schrieb:
> Du brauchst den AVR GCC. Gibt es bei Atmel auf der Seite auch als
> separaten Download (AVR GCC Toolchain)

und dann bekomm ich es in asm ? in AVR studio steht was von GCC
Ich hab einfach mal jetzt die main.c aufgemacht und den inhalt in avr 
studio gepackt. jetzt soll ich winAVR herunerladen. wird mir das was 
bringen ?

von Harald (Gast)


Lesenswert?

Mein Gott, warum so stur? Einfach WinAVR installieren und Dateien 
compilieren und ggf. ändern. Kann man notfalls einem 6-jährigem Kind 
beibringen...

von K. J. (Gast)


Lesenswert?

Peter II schrieb:
> Christian schrieb:
soll, so das du etwas darin ändern könntest)
>
>> Vorgehensweise ?
> WinAVR installieren, C -> HEX -> µC
>
> wenn du etwas ändern willst, dann mache das im C.

Richtig ist es C -> ASM -> HEX -> µC, die frage ist ob der gcc das 
intern macht oder auch auswirft, die Lesbarkeit dürfte aber recht 
schlecht sein.

von Christian (Gast)


Lesenswert?

Frank Werner schrieb:
> Dann erklär uns doch mal Deine Änderungswünsche. Wenns nur ne
> Kleinigkeit ist, kriegen wir das hier vielleicht gemeinsam hin.

Das Programm leitet grundsätzlich alle empfangenen Telegramme per UART 
weiter, und reagiert auf ein paar bestimmten insofern, das es ausgänge 
vom AVR Toogelt, also jedes mal wenn eine bestimmte taste gedrückt wird 
schaltet ein ausgang um.

Ich möchte nun das er nicht nur UART sendet, sondern UART Telegramme 
auch empfangen kann und dementsprechent die Ausgänge umschaltet.

von Peter II (Gast)


Lesenswert?

K. J. schrieb:
> Richtig ist es C -> ASM -> HEX -> µC, die frage ist ob der gcc das
> intern macht oder auch auswirft, die Lesbarkeit dürfte aber recht
> schlecht sein.

klar kann man ASM sich ausgeben lassen, nur ändern ist fast unmöglich. 
Weil mal alle Adressen selber neu ausrechnen müsste. Es gibt keine 
Labels mehr

von Christian (Gast)


Lesenswert?

K. J. schrieb:
> die Lesbarkeit dürfte aber recht
> schlecht sein.

notfalls muss ich halt nacharbeiten, damit es lesbar und verständlich 
wird.
ich lade jetzt WinAVR herunter.

von Christian (Gast)


Lesenswert?

Peter II schrieb:
> Weil mal alle Adressen selber neu ausrechnen müsste.

Womit das Thema mit der Nacharbeit dann wohl gelaufen wäre -.-

von spess53 (Gast)


Lesenswert?

Hi

>klar kann man ASM sich ausgeben lassen, nur ändern ist fast unmöglich.
>Weil mal alle Adressen selber neu ausrechnen müsste. Es gibt keine
>Labels mehr

Es gibt durchaus Disassembler die aus dem Hex-File ASM-Code mit Labels 
generieren.

MfG Spass

von Christian (Gast)


Lesenswert?

spess53 schrieb:
> Es gibt durchaus Disassembler die aus dem Hex-File ASM-Code mit Labels
> generieren.

damit habe ich es auch probiert an IDA Pro bin ich verzweifelt. wen sich 
damit einer auskennt dann würde das natürlich super sein

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> damit habe ich es auch probiert an IDA Pro bin ich verzweifelt. wen sich
> damit einer auskennt dann würde das natürlich super sein

vergiss es, in einem aus C generierten ASM code etwas größere zu ändern 
ist schwerer als C zu lernen.

von ConvertsQuestíonsToAnswers (Gast)


Lesenswert?

Ein kleiner Tip: Schalte alle Optimierungen aus. Wie das geht steht in 
der Dokumentation und hier gibt es auch einige Einträge.

Das hat den Vorteil, dass Du, einige Ausdrücke in C durchaus durch 
Analogiebildung aus der Mathematik wiedererkennen kannst und die 
Entsprechung in Assembler schnell findest.

Dennoch wird Dir Einiges ungewohnt oder sogar merkwürdig vorkommen. Z.B. 
der Zugriff auf Funktionsargumente. Wenn Du gut Assembler kannst, wirst 
Du Dich aber schnell reinfinden.

von Christian (Gast)


Lesenswert?

Peter II schrieb:
> vergiss es, in einem aus C generierten ASM code etwas größere zu ändern
> ist schwerer als C zu lernen.

Ich würde es zumindest gern einmal versuchen

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> Ich würde es zumindest gern einmal versuchen

die Frage, wenn du so gut ASM kannst, warum du es nicht gleich neu 
schreibst?

von Christian (Gast)


Lesenswert?

ConvertsQuestíonsToAnswers schrieb:
> Wenn Du gut Assembler kannst, wirst
> Du Dich aber schnell reinfinden.

Ich komme generell irgendwie mit sowas nicht zurecht. an Java bin ich 
auch gescheitert. wenn ich schon VOID lese dreh ich durch :D

von Peter II (Gast)


Lesenswert?

Nachtrag:

du musst dafür z.b. noch Lernen welche Register du nicht verwenden 
darfst, weil C sie für etwas besonders vorgehen hat.

von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

>Ich würde es zumindest gern einmal versuchen

Dazu kann ich Dich nur ermutigen. Schau Dir das Assembleristing an. Dort 
sind die C-Zeilen und der daraus erzeugt Assemblercode 
gegenübergestellt. Einem einigermaßen intelligenten Menschen sollte es 
nicht schwerfallen, zumindest zu erkennen was das abläuft.
Konstanten und globale Variablenadressen zu ändern sollte auch nicht 
schwer sein. Etwas komplizierter werden Änderungen am Kontrollfluss.

Aber es würde mich nicht wundern, wenn Du aus dem was Du da siehst genug 
C lernst um wenigstens einfache Änderungen sogar im C-Programmtext 
durchführen zu können.

von Helmut L. (helmi1)


Lesenswert?

Christian schrieb:
> notfalls muss ich halt nacharbeiten, damit es lesbar und verständlich
> wird.

Besser ist es du lernst entweder 'C' oder du entwickelst das Programm 
neu.
In einer generierten Assembler ist es nur mit grosser Muehe etwas zu 
aendern.
Beim anschliessenden Linken brauchst du auch noch die Libs dazu.

von Peter II (Gast)


Lesenswert?

ConvertsQuestionsToAnswers schrieb:
> Schau Dir das Assembleristing an. Dort
> sind die C-Zeilen und der daraus erzeugt Assemblercode
> gegenübergestellt. Einem einigermaßen intelligenten Menschen sollte es
> nicht schwerfallen, zumindest zu erkennen was das abläuft.
> Konstanten und globale Variablenadressen zu ändern sollte auch nicht
> schwer sein. Etwas komplizierter werden Änderungen am Kontrollfluss.

er will aber etwas kompliziertes ändern. Und sich nicht nur den ASM-Code 
anschauen.

von spess53 (Gast)


Lesenswert?

Hi

Welcher IR Empänger ist es denn?

MfG Spess

von Tom (Gast)


Lesenswert?

Du kannst zum compilieren des C-Programms, in den Optionen des 
Compilers, das Erzeugen einer List-Datei aktivieren. In dieser 
List-Datei ist der Assemblercode enthalten. Der Dateiname ist der des 
C_Programms, aber der Extend ist ".LSS". Ist aber pfrimelig den 
zusätzlichen Kram aus der Textdatei zu entfernen. Einige Compiler 
können, einstellbar in den Optionen, direkt Assemblerdateien aus dem 
C-Code erzeugen. Ich weiß nicht, ob der GCC das auch kann, wäre aber 
einen Blick in sein Handbuch wert.

Gruß. Tom

von Christian (Gast)


Lesenswert?

ConvertsQuestionsToAnswers schrieb:
> Dazu kann ich Dich nur ermutigen

Wie kann ich mir das ansehen?

ich hab nun folgendes gemacht:
winavr installiert, avr studio neu getartet, neues projekt in GCC 
angelegt
simulator ausgewählt, AVR ausgewählt.

Die main.c datei mit texteditor geöffnet und alles in das neue projekt 
von avrstudio gepackt.

die anderen daten (uart.c, uart.h, ir60.c, ir60.h )
mit in das Projektverzeichnis gepackt.


wieso bekomme ich Fehler wenn ich auf Build klicke ?

unten stehen folgende meldungen;

C:\Users\Christian\Desktop\IR\TRYYYY\default/../TRYYYY.c:156: undefined 
reference to `uart_putc'

die anderen sehen fast genau so aus, also auch "undefined reference"

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> die anderen sehen fast genau so aus, also auch "undefined reference"

du musst die uart.c und ir60.c zum projekt hinzufügen.

von Christian (Gast)


Lesenswert?


von Helmut L. (helmi1)


Lesenswert?

Tom schrieb:
> Ich weiß nicht, ob der GCC das auch kann, wäre aber
> einen Blick in sein Handbuch wert.

Doch kann er. Option -s

Das ganze sieht dann so aus:
1
__SP_H__ = 0x3e
2
__SP_L__ = 0x3d
3
__CCP__  = 0x34
4
__tmp_reg__ = 0
5
__zero_reg__ = 1
6
  .section  .debug_abbrev,"",@progbits
7
.Ldebug_abbrev0:
8
  .section  .debug_info,"",@progbits
9
.Ldebug_info0:
10
  .section  .debug_line,"",@progbits
11
.Ldebug_line0:
12
  .text
13
.Ltext0:
14
.global  main
15
  .type  main, @function
16
main:
17
.LFB2:
18
.LM1:
19
/* prologue: function */
20
/* frame size = 0 */
21
.LM2:
22
  sbi 36-32,1
23
.LM3:
24
  ldi r24,lo8(64)
25
  sts 128,r24
26
.LM4:
27
  ldi r24,lo8(9)
28
  sts 129,r24
29
.LM5:
30
  ldi r24,lo8(1600)
31
  ldi r25,hi8(1600)
32
  sts (136)+1,r25
33
  sts 136,r24
34
.L2:
35
  rjmp .L2
36
.LFE2:
37
  .size  main, .-main
38
  .section  .debug_frame,"",@progbits
39
.Lframe0:
40
  .long  .LECIE0-.LSCIE0
41
.LSCIE0:
42
  .long  0xffffffff
43
  .byte  0x1
44
  .string  ""
45
  .uleb128 0x1
46
  .sleb128 -1
47
  .byte  0x24
48
  .byte  0xc
49
  .uleb128 0x20
50
  .uleb128 0x0
51
  .p2align  2
52
.LECIE0:

Da jetzt was zu aendern wuerde ich mit nicht freiwilig antun wollen.

: Bearbeitet durch User
von Tom (Gast)


Lesenswert?

Ohje, übersichtlich ist etwas anderes. Bevor man sich da durchgewühlt 
hat, hat man sich auch ein wenig in C eingearbeitet. :(

von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

>die anderen daten (uart.c, uart.h, ir60.c, ir60.h )
mit in das Projektverzeichnis gepackt.

Du musst diese C-Dateien auch noch dem Projekt "hinzufügen". D.h. dem 
AVRStudio bekannt machen, das diese Dateien mit compiliert werden 
sollen.

Ich weiss nicht, welche AVRStudio-Version Du hast. Mit Version 4 geht es 
so, das Du die Dateien, über das Kontextmenue des "Projektfensters" 
hinzufügen kannst. Also oben rechts-klich auf das Projekt. Da erscheint 
dann ein Punkt "Add". Ich glaube es geht bei der Version 6 ähnlich. Aber 
ich kenne sie nicht.

von Christian (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> Da jetzt was zu aendern wuerde ich mit nicht freiwilig antun wollen.

Jap.

Peter II schrieb:
> du musst die uart.c und ir60.c zum projekt hinzufügen.

Hab ich jetzt kommen neue Fehler;

../uart.c:21: error: 'F_CPU' undeclared (first use in this function)

Ich nehme an er möchte das ich in der hauptdaei vom Projekt F_CPU 
Deklariere.  wie mache ich das ?

von Christian (Gast)


Lesenswert?

ConvertsQuestionsToAnswers schrieb:
> Ich weiss nicht, welche AVRStudio-Version Du hast. Mit Version 4 geht es
> so, das Du die Dateien, über das Kontextmenue des "Projektfensters"
> hinzufügen kannst. Also oben rechts-klich auf das Projekt. Da erscheint
> dann ein Punkt "Add". Ich glaube es geht bei der Version 6 ähnlich. Aber
> ich kenne sie nicht.

Klappt genauso bei 4 hab ich nun aich gemacht.

von Peter II (Gast)


Lesenswert?

Christian schrieb:
> Ich nehme an er möchte das ich in der hauptdaei vom Projekt F_CPU
> Deklariere.  wie mache ich das ?

nein, das machst man in den Projekt Einstellungen. Irgendwo kann man 
dort defines setzen - dort muss man es eintragen.

von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

>Klappt genauso bei 4 hab ich nun aich gemacht.

Das es bei Version 4 so geht ist klar. Was ich nicht weiss, ist, ob es 
bei 6 auch so geht.

Gut. Ich schliesse das Du Version 4 hast. (Gute Wahl :-) )

Es fehlt also noch F_CPU.

Click auf "Project" (links) und dann auf "Configuration Options". In das 
Feld "Frequency" trägst Du die Frequenz in Hertz ein. Nimm was 
vernünftiges wie 16MHz.

von spess53 (Gast)


Lesenswert?

Hi

>8 Kanal IR empfänger:

>http://www.pollin.de/shop/dt/NTc5OTgxOTk-/Bausaetz...

Da ist aber keine Software. Aber von Hannes Lux gibt es alternative 
Software in Assembler:

http://www.hanneslux.de/avr/pollin_ir8/index.html

MfG Spess

von Troll (Gast)


Angehängte Dateien:

Lesenswert?

Bitte einen längeren Text eingeben.
Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.

von ConvertsQuestionsToAnswers (Gast)


Lesenswert?

>Nimm was vernünftiges...

"Take something reasonably reasonable" Hihi.

von Christian (Gast)


Lesenswert?

spess53 schrieb:
> Da ist aber keine Software. Aber von Hannes Lux gibt es alternative
> Software in Assembler:

Die muss man bei Kontakt --> downloads --> produkt auswählen 
herunterladen

von Mark B. (markbrandis)


Lesenswert?

Tom schrieb:
> Einige Compiler
> können, einstellbar in den Optionen, direkt Assemblerdateien aus dem
> C-Code erzeugen. Ich weiß nicht, ob der GCC das auch kann, wäre aber
> einen Blick in sein Handbuch wert.

Selbstverständlich kann er das. Ein Compiler, der kein Assembler-Listing 
ausgeben kann, wäre ja auch sein Geld nicht wert. :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.