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
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.
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
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 ?
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.
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.
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
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.
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
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
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.
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.
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
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
>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.
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.
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.
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
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"
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
.globalmain
15
.typemain,@function
16
main:
17
.LFB2:
18
.LM1:
19
/* prologue: function */
20
/* frame size = 0 */
21
.LM2:
22
sbi36-32,1
23
.LM3:
24
ldir24,lo8(64)
25
sts128,r24
26
.LM4:
27
ldir24,lo8(9)
28
sts129,r24
29
.LM5:
30
ldir24,lo8(1600)
31
ldir25,hi8(1600)
32
sts(136)+1,r25
33
sts136,r24
34
.L2:
35
rjmp.L2
36
.LFE2:
37
.sizemain,.-main
38
.section.debug_frame,"",@progbits
39
.Lframe0:
40
.long.LECIE0-.LSCIE0
41
.LSCIE0:
42
.long0xffffffff
43
.byte0x1
44
.string""
45
.uleb1280x1
46
.sleb128-1
47
.byte0x24
48
.byte0xc
49
.uleb1280x20
50
.uleb1280x0
51
.p2align2
52
.LECIE0:
Da jetzt was zu aendern wuerde ich mit nicht freiwilig antun wollen.
>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.
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 ?
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.
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.
>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.
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
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. :-)