www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie/wo finde ich den Ass-code der stdio bei SDCCMIDE?


Autor: Andreas K. (oldcoolman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ihr lieben C-Profis,

ich hab mir mal die mide mit dem sdcc installiert.

Nach Anleitung mal ein "Hallo Welt" programmiert.

C ist für mich neu.

Ich habe versucht dem Assembler-code der Ausgaberoutinen zu finden,
aber da ist nichts. Ich denke schon ,daß diese Routinen dazugelinkt
werden(wenn ich mir die Größe des HEX FIles so ansehe).
Kann man mit Optionsschaltern ein File erzeugen,das den kompletten
Assembler-Code enthält? oder müßte ich dazu die LIBS disassemblieren?

Ich gehe mal davon aus, daß printf.. auf die serielle geleitet wird.
kann man das umprogrammieren,so daß es auf ein LCD geleitet wird?


es grüßt euch

Andreas






Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleich mehrere Fragen...

> Ich gehe mal davon aus, daß printf.. auf die serielle geleitet wird..

Jein, printf wird auf die Funktion putchar geleitet und die kannst du 
selber schreiben oder aus dem SDCC LIB's verwenden.

Nun kannst du ja für das Display die Funktion folgendermaßen bauen:
void putchar (char c)  {    // putchar ist die standard Funktion an die
  display_data_out (c);     // printf die Zeichen übergibt
}

Natürlich mußt du eine entsprechende Funktion für die Zeichenausgabe ans 
Display selber schreiben.

> Ich habe versucht dem Assembler-code der Ausgaberoutinen zu finden..

Was meinst du, den ASM Code des compilierten C Sourcecode ? den erzeugt 
der Compiler mit der Endung .asm

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Glaub ich habs verstanden, wenn du nach Defaultvorgaben installierst 
dann:

C:\MIDE\sdcc\lib\large
C:\MIDE\sdcc\lib\medium
C:\MIDE\sdcc\lib\small

Es gibt verschiedene printf Varianten. Z.B. printf_small, printf_tiny 
etc...

Autor: Andreas K. (oldcoolman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe,

danke erst mal für die Antwort.

konnte leider die funktion _putchar noch nicht finden.

den aufruf aus printf_putchar heraus hab ich gefunden.

wo steckt die denn so?

Im Ausgabe listing des Assemblers steht nur der ensprechende Assembler
code des übersetzten c programms. Bei anderen compilern kann ich halt
den gesamten assembler code sehen. da kann ich auch die internen
funktionen sehen. hier muß ich stöbern und stöbern....

kann ich auch fertige assembler funktionen einbinden?
(zur not mit copy und paste in den inline assembler)


netter gruß


Andreas

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt, die kannst du selber schreiben. UART initialisieren und dann 
die Ausgabe an die UART über putchar. Ein Beispiel habe ich dir ja 
gegeben. Da sollte dann:

void putchar (char c)  {
  while (!TI);              // Transmitter ready/busy ?
  TI = 0;                   // TI Flag löschen
  SBUF = c;                 // Ausgabe an UART
}

diese Routine stehen.

Natürlich UART initialisieren z.B.:

  SCON = 0x52;              // 8 BIT UART, TI=1, REN=1
  TMOD |= 0x20;             // Timer 1, mode 2, 8-bit reload
  TH1 = 0xFD;               // 19200 Baud @ 22,118 MHz
  PCON |= 0x80;             // Double BR BIT => 38400 Baud
  TR1 = 1;                  // Timer 1 Runbit = 1, 38400 Baud @ 22,118 MHz


Im Verzeichnis Mide\sdcc\include findest du die serial_IO.h, kannst du 
natürlich auch verwenden.

Ansonsten empfehle ich dir die Doku zu lesen. Da ist auch das Einbinden 
von ASM erklärt. Aus meiner Sicht brauchst du aber keinen ASM Code in C
;-))

Autor: Andreas K. (oldcoolman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey joe,

ich glaub wir reden da aneinander vorbei.

Ich war der Meinung,daß printf sicherlich an die seri rausgibt.

Was ich aber nicht haben will !

Wenn es so ist,so wollte ich die standard-lib ändern,so daß
printf gleich auf das lcd geht.

Dies war aber nur EIN Beispiel.

Ich habe einen Sack voll Routinen programmiert und würde gerne
diese verwenden. Das Hauptprogramm wollte ich halt von
Assembler nach C umschreiben,um es leichter ändern zu können.

Dieses Anliegen habe ich schon mal gepostet,wurde aber nicht erhört :-|

Also: meine Hauptfragen sind:

Kann ich die standart lib in asem ändern,oder wird das fertig übersetzt
binär dazugelinkt?

falls das nicht geht, wie könnte ich Werte von asm nach c und zurück 
übergeben?

Die Doku hab ich schon rauf und runter gelesen,wahrscheinlich bin ich 
schon
zu Begriffsstutzig :-(

nette Grüße

Andi




Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Willst du das Rad neu erfinden ? dann lese das Kapitel building SDCC, 
werde Entwickler bei Sourceforge und fang an ;-))

Ne, mal ehrlich, du hast nen Sack voll ASM Routinen und willst nur 
"main" in C schreiben... Na dann sei so konsequent und brings in ASM zu 
Ende. Ansonsten siehe S.13 SDCC man. sowie Kapitel 3.1.3 (S.20). Dann 
schau dir mal _asm; _endasm; an. Ebenso les mal wie Parameter übergeben 
werden (du bist nen Scherzkeks, glaubst du das schreibe ich alles für 
dich ?).

Insgesamt halte ich von dieser Vorgehensweise nichts. Machs in ASM oder 
C, aber nicht so einen Murx.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so, noch eins, printf erwartet die Funktion putchar, was du daraus 
machst ist printf egal. Ob du auf der UART, einem Portpin, Display oder 
aufm Lautsprecher ausgibst ist der Funktion egal. Ich glaube ich habe 
das nicht gut genug erklärt.

Autor: Andreas K. (oldcoolman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Joe,
nun, ich weiß nicht wieviel das ist. Dein Hinweis auf die entsprechenden
Kapitel reichen natürlich vollig.
Ich denke ich werde es in Assembler zu ende bringen.
Einmal,weil ich in C nur etwas Theorie gelesen hab und keinerlei 
Erfahrung
und zum Anderen weil das Projekt eh fast fertig ist.
Sollte mal zuviel Zeit vorhanden sein, kann ich das ganze mal komplett
in C schreiben.

zu deinem letzten posting:
Du hast es sicher genug erklärt. Dies geht auserdem aus _printf hervor.
Ich hab mich da nicht richtig ausgedrückt.

Danke für die Infos und den Rat (wegen Murx)

nette Grüße

Andreas



Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas, ich hoffe du bist wegen des Hinweis "Murx" nicht eingeschnappt, 
nimm sowas nicht persönlich.

Es gab hierzu schon diverse Grundsatzdiskussionen, frei nach dem Motto 
für zeitkritische Funktionen sollte man ASM verwenden etc. und diese in 
C einbinden.

Ich programmiere seit 15 Jahren ASM und seid weniger Jahren ;-)) C. 
Meine Erfahrung ist, du kannst alles in lupenreines C umsetzen. Wenn es 
dann tatsächlich mal dazu kommt das man irgendetwas unbedingt in ASM 
einbinden muß, ok dann ist es eben so und man kann das auch problemlos 
machen.

Nur die "main" und der Rest in ASM (hierauf bezog sich Murx) ist aus 
meiner Sicht nicht sinnvoll.

Nichts für ungut...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.