www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C505C(8051 und derivate)


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennst sich einer mit dem C505C aus?
Ich habe folgendes Problem. Ich habe einen C505C mit externen Speicher
und SRAM. Ich Übersetze meine Programme mit dem C51 Compiler von Keil.

Wenn ich im Compiler sage nutze den internen SRAM läuft das Programm
mit normaler geschwindigkeit. Wenn ich nun aber im Compiler sage ich
habe large memory(#pragma large) läuft mein Programm total langsamm ab
aber es läuft woran liegt das?

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Standard-8051 war das so: Befehle, die auf Speicherbereiche einer
2k-Page zugreifen (AJMP und ACALL), haben 2 Byte Größe und 1 Zyklus
Ausführungszeit. Bei Zugriffen über eine 2k-Page hinaus braucht man
LJMP und LCALL, die 3 Byte Größe haben und mit 2 Zyklen die doppelte
Ausführungszeit. Der C-Compiler generiert also je nach Speichergröße
und Speicherarchitektur (Speicher intern oder extern?) verschiedenen
Code.

Bei internen Daten verwendet er gerne Register, die 1 Zyklus
Ausführungszeit haben. Muß er die Daten von externem Speicher holen,
lädt er die erst in interne Register um, was 2 Zyklen Ausführungszeit
zusätzlich braucht (MOVX- und MOVC-Befehle). Und speichert die Daten
nach Bearbeitung auch nochmal zurück, was bei externem Speicher wieder
Zeit kostet.

Mit externem Speicher ist auch auf dem Chip integriertes FLASH oder
XRAM gemeint, da es wie bei zu früheren Zeiten echtem extern
befindlichem Speicher angesprochen wird.

Schau doch mal ins Listing (*.lst), das bringt sicher Erleuchtung.

Gruß

Dietmar

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja aber wenn das 2 Zyklen sind wäre ja schön.
Z.b wenn ich das speichermodell small benutzte dauert die Abfrage eines
Taster ms. Bei large dauert es wirklich 1 Sekunde bis der Prozessor
merkt das ich ein Taster gedrückt habe.

Autor: peter dannegger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Den Unsinn sieht man leider immer wieder, die Leute nehmen das
Large-Modell und zwingen damit den Compiler sämtliche Variablen im
XDATA anzulegen.

Natürlich muß das grottenlangsam sein, gar keine Frage !

Warum die das machen, ist mir absolut rätselhaft.
Eins weiß ich aber genau, die haben weder das Keil-Handbuch, noch den
C51-Primer gelesen.

Es hat schon seinen Sinn, daß per default das Modell Small ausgewählt
ist.

Hat man große Datenfelder oder Variablen, die selten benötigt werden,
kann man sie genauso gut im Small Modell als xdata deklarieren, um sie
auszulagern.


Es mag Fälle geben, wo Large Sinn macht, aber die sind mir bisher noch
nicht untergekommen.

Anbei mal das Listing, wie ein i++; in Small und wie es in Large
aussieht, der CPU-Zeitverbrauch ist 1:7.


Peter

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.