Schreiben von Parametern in den Codespeicher zur Laufzeit während Initialisierungen - 8051

Ich muss das möglich machen. Ich verwende keil IDE und die AT89c51RD2 MCU.

Bei der Initialisierung wird eine Funktion aufgerufen, um etwa 1500 Bytes abzuleiten. Ich möchte dieses Byte in den Codespeicher schreiben (Byte für Byte), da es sich im gesamten Programm niemals ändern wird. Ich weiß, dass dies ungefähr 2 Seiten Flash-Speicher benötigen könnte.

Wie kann ich das tun?

Danke.

BEARBEITEN

Ich fold dies, wo es scheint, dass es getan werden kann. http://www.keil.com/forum/3483/

Korrigieren Sie mich, wenn ich falsch liege, aber Flash von 89C51 wird nur zum Speichern von Programmen verwendet und ist nicht für Anwendungen verfügbar.
@Swanand Du hast vollkommen Recht! Aber es gibt eine Möglichkeit, auch zur Laufzeit auf eine oder mehrere Seiten des Flash-Speichers zu schreiben. davon habe ich schon gehört... deswegen frage ich ja.
Ich bezweifle ... Können Sie eine Datenblattreferenz oder etwas hinzufügen, wo es so steht!
@Swanand Siehe meine Bearbeitung! Es gibt einen Link, aber niemand hat eindeutig geantwortet.

Antworten (1)

Es ist möglich. Ich habe es getan. Aber 8051-Varianten tun dies wirklich nicht gerne. Wenn Sie daran interessiert sind, warum sie das nicht gerne tun, lesen Sie mehr über Harvard Architecture .

Die erste Antwort in dem von Ihnen verlinkten Thread hat Ihnen tatsächlich die zwei verschiedenen Möglichkeiten aufgezeigt, wie dies erreicht werden kann. Das erste, XDATA über Ihren Codespeicher abzubilden und dann die XDATA-Assembleranweisungen zu verwenden, um in diesen Bereich zu schreiben, ist mehr Mühe als es wert ist. Ich sage das, weil Ihr Mikro diese "magischen Anweisungen" enthält, auf die sich das Poster bezieht.

Sie müssen eine Bibliothek verlinken, die Sie von der Atmel-Website erhalten können, und dann können Sie diese magischen Anweisungen aufrufen und über In-System Programming (ISP), in der Literatur auch In-Application Programming (IAP) genannt, in den Flash schreiben .

Schau mal ins Datenblatt . Sie sollten Abschnitt 24 wahrscheinlich vollständig lesen. Aber der wichtige Teil ist Abschnitt 24.10.

24.10 Beschreibung des API-Aufrufs

Das IAP ermöglicht die Neuprogrammierung eines Mikrocontroller-On-Chip-Flash-Speichers, ohne ihn aus dem System zu entfernen und während die eingebettete Anwendung ausgeführt wird.

Die Benutzeranwendung kann einige Routinen der Anwendungsprogrammierschnittstelle (API) aufrufen, die IAP ermöglichen. Diese APIs werden vom Bootloader ausgeführt.

Um die entsprechende API aufzurufen, muss der Benutzer eine Reihe von Flash_api-Routinen verwenden, die mit der Anwendung verknüpft werden können.

Beispiele für Flash_api-Routinen sind auf der Atmel-Website in der Softwareanwendung verfügbar

Notiz:

C-Flash-Treiber für den AT89C51RD2/ED2

Die Beschreibung und die Argumente der API-Aufrufe sind in Tabelle 24-10 dargestellt.

24.10.1 Prozess

Die Anwendung wählt eine API aus, indem sie die Register R1, ACC, DPTR0 und DPTR1 setzt.

Alle Aufrufe erfolgen über eine gemeinsame Schnittstelle „USER_CALL“ an der Adresse FFF0h.

Der Sprung beim USER_CALL muss durch den LCALL-Befehl erfolgen, um in der Anwendung zurückkehren zu können.

Vor dem Sprung auf den USER_CALL muss das Bit ENBOOT im AUXR1-Register gesetzt werden.