C Programm in asm umwandeln

Gast #3434508
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
Gast #3434534
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 ?
Gast #3434541
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.
Gast #3434544
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
Gast #3434548
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
Gast #3434557
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.
Gast #3434571
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.
Gast #3434574
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.
Gast #3434580
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
Gast #3434585
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"
#3434593
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.
Gast #3434598
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.
Gast #3434605
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.
Gast #3434609
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren