Guten Tag,
ich suche einen Assembler + Linker für die Mikrocontroller der Atmel-Familie (AT89C51, AT89S51/52). OS = WINDOWS 10/11.
Ich möchte zwei Assembler-Dateien zusammenfügen (main.asm + function.asm).
Ich habe dafür Keil-C verwendet, leider habe ich aber nur die Eval-Funktion mit der Einschränkung für den verwendet Code.
Sind in der function.asm wirklich Export-Direktiven? Sonst probiere doch
mal, die Datei zu inkludieren oder einfach zusammenzukopieren.
Hallo,
main.asm ist das Hauptprogramm und die Datei "function.asm" enthält die benötigten Funktionen (z.B. Wartezeit, Rechenprogramme usw.) für das Hauptprogramm und wird mit "$INCLUDE (function.asm) hinzugefügt.
Das Problem mit Keil-C ist die Eval-Version, d.h mein Programm-Code ist zu groß für den Assembler (A51).
Hallo,
vielen Dank für den Hinweis auf "SDCC".
Ich kenne zwar "SDCC" habe aber nur an C-Compiler gedacht.
Werde nun den Assembler ausprobieren.
Könnte so mein "Makefile" aussehen: ?
1
REM Makefile fuer: main.hex
2
sdas8051 -o main.obj main.asm
3
sdas8051 -o function.obj function.asm
4
sdld -i main.obj function.obj
Leider nicht, bei "sdas8051 -o function.obj function.asm"
wird nur ein Null-File "function.obj ohne Fehlermeldung erzeugt.
Leider nicht, bei "sdas8051 -o function.obj function.asm"
wird nur ein Null-File "function.obj ohne Fehlermeldung erzeugt.
nun ja wenn das file bisher mit include eingebunden war ist der ASM code sicher nicht getrennt übersetzbar. Zusätzlich unterscheiden sich die Pseudo Befehle.
Guten Tag,
ich suche einen Assembler + Linker für die Mikrocontroller der
Atmel-Familie (AT89C51, AT89S51/52). OS = WINDOWS 10/11.
Ich möchte zwei Assembler-Dateien zusammenfügen (main.asm +
function.asm).
Ich habe dafür Keil-C verwendet, leider habe ich aber nur die
Eval-Funktion mit der Einschränkung für den verwendet Code.
Kann mir jemand dazu einen Assembler nennen ?
Juergen B.
Die beiden *.asm dateien sind also 'C Code' übersetzt nach asm mittels Keil und nun möchtest du beides linken? das einfachste wird sein die beiden C dateien mittels SDCC zu übersetzen bzw. irgendein anderer freier C Compiler. In der Tat gibt es den Keil auch kostenlos bei Verwendung von Silabs derivaten. Ein leichtes damit auch einen Atmel zu übersetzen.
Die beiden *.asm dateien sind also 'C Code' übersetzt nach asm mittels
Keil und nun möchtest du beides linken? das einfachste wird sein die
beiden C dateien mittels SDCC zu übersetzen bzw. irgendein anderer
freier C Compiler
Und dazu das ganze C-Programm von der Nomenklatur von Keil umzuschreiben ?
You must be kidding. Typischer Fall von Gequassel ohne Kenntnisse.
Die beiden *.asm dateien sind also 'C Code' übersetzt nach asm mittels
Keil und nun möchtest du beides linken? das einfachste wird sein die
beiden C dateien mittels SDCC zu übersetzen bzw. irgendein anderer
freier C Compiler
Und dazu das ganze C-Programm von der Nomenklatur von Keil umzuschreiben
?
You must be kidding. Typischer Fall von Gequassel ohne Kenntnisse.
Du machst deinem Namen alle Ehre. Für mich easy da ich mich in beiden Welten sehr gut auskenne. Nicht mehr als eine kleine Fingerübung.
Und dazu das ganze C-Programm von der Nomenklatur von Keil umzuschreiben
?
Es dürfte erheblich weniger Aufwand sein, ein C-Programm von einem auf einen anderen C-Compiler zu übertragen (sofern da /überhaupt/ irgendwelche Änderungen nötig sind) als einen Assemblerquelltext von einem auf einen anderen Assembler anzupassen, selbst wenn das für exakt die gleiche Zielhardware ist.
probiere mal meinen Assembler.
Die main.asm umbenennen in main.mac, assemblieren und dann sollte eine main.bin rauskommen.
Oder magst du die Dateinen einstellen oder versenden?
Die beiden *.asm dateien sind also 'C Code' übersetzt nach asm mittels
Keil und nun möchtest du beides linken? ...
Sehr unwahrscheinlich.
Ein C-Compiler haette wohl kaum ein Include eingefuegt, sondern
ganz einfach aus 2 Quellfiles genau 2 Objektfiles erzeugt, und die
dann gelinkt. Mit der Logik habt ihr es wohl alle nicht so.
Ansonsten gibt es ja noch Intels Makroassembler MCS51.
Ich möchte zwei Assembler-Dateien zusammenfügen (main.asm +
function.asm).
Ich habe dafür Keil-C verwendet, leider habe ich aber nur die
Eval-Funktion mit der Einschränkung für den verwendet Code.
Kann mir jemand dazu einen Assembler nennen ?
Juergen B.
@ von Motopick
Die Frage war eben so gestellt, siehe Oben, also nimmt man den Faden irgendwo auf. Hier im Forum scheint das den 'Aufreger der Woche' zu geben.
Die Aufgabe ist einfach. Der Quellcode soll auf beiden Compilern funktionieren und fertig. Das ist eine kleine Übung, nicht mehr und nicht weniger.
Die wesentlichen Unterschiede zwischen Keil und SDCC sind die Bezeichner für GPIOs sowie Interrupt handling.
Sofern der Quellcode nicht geheim ist kann ich das gerne Vorturnen.
Beispiel Pseudocode:
1
#define KeilisInUse false
2
3
// 7Segment Segmente
4
#if (KeilisInUse)
5
sbitDIGIT_1=P1^1;
6
sbitDIGIT_2=P1^5;
7
sbitDIGIT_3=P1^4;
8
sbitDIGIT_4=P1^3;
9
sbitTrigger=P0^2;
10
#else
11
#define DIGIT_1 P1_1
12
#define DIGIT_2 P1_5
13
#define DIGIT_3 P1_4
14
#define DIGIT_4 P1_3
15
#define Trigger P0_2
16
#endif
17
18
#if (KeilisInUse)
19
voidTimer2_ISR(void)interrupt5
20
#else
21
voidTimer2_ISR(void)__interrupt(5)
22
#endif
23
{
24
IsrCounter++;
25
....
Sollte sich der Code hier einfinden dann mache ich das gerne für den TO.
Bernd ich gebe dir im wesentlichen recht. Keil C51 code kann man mit wenig Aufwand so schreiben dass er auch mit SDCC übersetzt werden kann. Ich habe für mich Makros geschrieben die die meisten Unterschiede auflösen.
Die andere Richtung SDCC code nach Keil ist aufwendiger. da SDCC auch lokal definierte Variablen zuläßt. Keil erlaubt nur Variablen am Funktionsanfang.
Das ist aber hier gar nicht der Punkt. Der TO hat in Assembler programmiert und nur die uVision IDE dazu benutzt. Kein C nach ASM das erlaubt die Trial gar nicht. Deswegen auch die include function.asm.
Edit:
Das Problem würde sich gar nicht stellen wenn der TO ein älteres uVision verwenden würde. In uV3 können absolute ASM Programme beliebig groß sein, da der linker dann nicht aufgerufen wird. BL51 macht die Begrenzung auf 2k.
Hallo,
ersteinmal vielen Dank für Eure Hinweise.
Das war natürlich nicht meine Absicht für den Aufreger der Woche zu sorgen.
Die genannten Assembler werde ich mir noch anschauen.
Ich verwende auch C-Programme, z.B. die "main.asm" gibt es auch als "main.c"
Der Original-Assembler war "ASM51" von ca. 1990.
Original MC war: "80535/537" + 8032 von Siemens.
Für Bernd N. füge ich die beiden Assembler-Dateien bei (wenn nicht zu aufwendig).
Hallo,
ersteinmal vielen Dank für Eure Hinweise.
Das war natürlich nicht meine Absicht für den Aufreger der Woche zu
sorgen.
Die genannten Assembler werde ich mir noch anschauen.
Ich verwende auch C-Programme, z.B. die "main.asm" gibt es auch als
"main.c"
Der Original-Assembler war "ASM51" von ca. 1990.
Original MC war: "80535/537" + 8032 von Siemens.
Für Bernd N. füge ich die beiden Assembler-Dateien bei (wenn nicht zu
aufwendig).
Juergen
Die C Dateien hatte ich eigentlich erwartet so du denn mein Angebot gelesen hast!?
Wie dem auch sei, Thomas Z. hat dir bereits geantwortet. Ich habe das mal für dich getan, die Dateien im Anhang. Es compiliert ohne Probleme mit dem von mir bereits verlinketen Assembler.
mit der Keil Version uVision V5.38.0.0 erhalte ich die Meldung:
naja so wie du das machst geht es natürlich nicht.
Ich hab dein projekt mal abgeändert
Vielen Dank für Deine Hilfe und den entscheidenen Hinweis.
Gut das ich entsprechend gefragt habe.
Wenn man weiß wie es geht ist alles einfacher.
Ohne Hilfe wäre ich da nicht drauf gekommen.
Die Lösung ist:
1
Die Funktions-Datei ($INCLUDE (funktion.a51)) muss unterhalb der Main-Datei eingefügt werden und nicht wie bei mir beide Dateien in "Source Group 1"
Hättest du dir meine Antwort angesehen dann hättest du es gesehen. Siehe
.lst File. So hast du jetzt mehrere Lösungen.
Hallo,
Deine und alle Antworten habe ich just in Time gelsen, natürlich konnte ich nicht alle Hinweise "just in Time" ausführen.
Ich habe nun meine beiden Dateien mit dem Assembler ASEM-51 (asemx.exe) über die IDE's MIDE-51 bzw. MC-51 compilieren können (datei.hex).
Vielen Dank für Deine Hilfe.
Mehrere Lösungen zu haben ist meiner Ansicht OK, mal passt die eine, mal die andere Lösung.