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/
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.
Schwanand
Paul A.
Schwanand
Paul A.