Hallo Leuts und Forenleser,
Nun muss ich mich nach knapp einem Jahr doch mal dem Forum widmen.
Wie die Überschrift schon aussagt, geht es mir um dieses Thema.
Ich habe eine Platine, welche 2 Modi beherschen soll. 1. Modi
über UART EEprom beschreiben, 2. Modi EEprom auslesen. Controller ist
der Mega8..
Der Wechsel zwischen den Modi erfolgt durch Reset bzw. entfernen der
Betriebsspannung.
1 | if (PIND & (1 << PD0)) {
|
2 | /*If High Signal from the level converter
|
3 | * */
|
4 | PORTC |= (1 << PC3); // Red LED on, UART-Modus
|
5 | setup_uart();
|
6 |
|
7 | }
|
Damit wird ermittelt, ob an dem UArt-Pin RXD ein Pegelwandler bzw. ein
SerialAdaper steckt.
Nun sollen im "Uart"-Modus enpfangene Daten im EEProm geschrieben
werdem.
Das erledige ich mit
1 | uint8_t coor_m[32][8][2]; //"quellblock" aus dem Sram, von Uart Empfangen
|
2 | uint8_t coor[32][8][2] EEMEM; // "Destination EEProm"
|
3 | eeprom_write_block(coor_m, &coor, sizeof(coor_m));
|
Für jedes empfangende Zeichen über UART wird eine Funktion uart_rec(char
s) aufgerufen.
1 | uint8_t coor_m[16][8][2]; //global
|
2 | uart_rec(char UDRr){
|
3 | ...weise coor_m[][][] Werte zu...
|
4 | ....weiterer Algorhytmus
|
5 | }
|
Wenn nun der EEProm erfolgreich beschrieben wurde, möchte ich in den 2.
Modi wechseln.
Die Routinen arbeiten aber dann nicht mehr, weil coor_m[16][8][2] so gut
wie den kompletten Sram frisst.
Ist es irgendwie möglich die Initialisierung von globalen Variable
coor_m[16][8][2] durch einer if,else Anweisung zu steuern. Diese
Variable wird im 2. Modi niemals gebraucht.
Ich finde es nachteilig, das der EEProm nur durch die identische Größe
aus dem SRAM Copiert werden kann.