write-program-memory()

Gast #2144265
Lesenswert?

> -Das Flash muss vor dem Beschreiben gelöscht werden.

Hey! :)

Ich hoffe ihr könnt mir weiterhelfen. Ich nutze den internen 
Programmspeicher (write_program_memory) (natürlich nur unbenutzten ab 
Adresse 0x61AA - 18F4550 ist der PIC) um GPS Daten über einen kurzen 
Zeitraum zu sichern. Nun ist die Frage, wie ich eine bestimmte Adresse 
(z.B. 0x61AA) löschen kann um erneut sie mit einem Wert zu beschreiben?

Ich suche seit einer Ewigkeit nach einem Befehl, jedoch finde ich 
nichts!

Ich hoffe ihr könnt mir weiterhelfen.

l.g.

PS - Programmauszug:
1
int16 pointer;
2
  // Receive Pointer
3
  if(firstwrite == 1) {
4
    pointer = STARTADDRESS;
5
    pointer += 4;
6
    firstwrite = 0;
7
  } else {
8
    read_program_memory(STARTADDRESS, &pointer, 2);
9
    pointer += 4;
10
  }
11
  // Save Float
12
  printf(usb_putc,"Pointer: %lx\r", pointer);
13
  write_program_memory(pointer, &data , 4);
14
  printf(usb_putc,"Data: %.4f\r", data);
15
  delay_ms(1000);
16
  // Save current Pointer Position
17
  int16 temp = pointer; 
18
  write_program_memory(STARTADDRESS, &temp, 2);
19
  delay_ms(1000);
Gast #2144830
Lesenswert?

Ich weiß es leider nicht,

In der oben bereits herausgeschnittenen Methode übergebe ich einen Float 
data. Dieser wird auf die Adresse auf welche der int16 pointer zeigt 
geschrieben. Der pointer wird immer um 4 Adressen hinaufgezählt und 
anschließend auf die erste Stelle geschrieben.

Nun ist mir klar das es ein Flashspeicher ist und er in Zellen 
organisiert ist. Nun weiß ich nicht wie ich die Größe bei dem 18F4550 
einer Zelle herausfinden kann. Desweiteren muss ich ja die ganze Zelle 
löschen, falls ich einen Wert in dieser ändern will.

Ich hoffe mir kann wer weiterhelfen!

l.g.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren