EEPROM Adresse über 255 und SOFT PWM Frage/Anliegen

Gast #6467702
Lesenswert?

Hallo,

ich habe meinen ganzen Code mal angehangen, bzw. so weit wie ich jetzt 
bin.

Der Code kurz erklärt:

Zeile 9 - 13 prüfen ob ein bestimmter Wert im EEPROM steht.. Falls 
nicht, werden "Defaultwerte" in den EEPROM geschrieben.

Kann man das irgendwie ändern das ich nicht immer den Wert in der 
eeprom.h ändern muss sondern das nach einem "Flash" immer die 
Defaultwerte neu geschrieben werden?

Zeile 22 - 30

Je nachdem welcher "Boardmodus" eingestellt wird, soll das Board I/O 
oder PWM Board sein.

I/O

Das Board selber verfügt über mehrere Modes (onoff.* files)
1
volatile int onoffmodes[NUM_OF_ONOFF_MODES][NUM_OF_CHANS];

Ist der I/O Modus eingestellt kann man die "Modes" durchschalten.

In der loop wird dann nur verglichen und ggf. geschaltet...
1
if (IOs[i] != isIOs[i]) {
2
  onoff(i);
3
}

Das ganze hatte ich vorher nur mit einem Mode am laufen, das lief 
problemlos. Da die Daten auch "gespeichert" werden können sollen greife 
ich auf den EEPROM zurück. Das lief bis 2 Modes problemlos.

Nun mekkert der compilier mit
1
...........
2
...........
3
eeprom.c:520:52: warning: large integer implicitly truncated to unsigned type [-Woverflow]
4
 uint8_t eeDataPWMCH31_7 EEMEM                    = 521;
5
                                                    ^
6
eeprom.c:521:52: warning: large integer implicitly truncated to unsigned type [-Woverflow]
7
 uint8_t eeDataPWMCH32_7 EEMEM                    = 522;

Wie bekomme ich mehr EEPROM Adressen als 255 zugewiesen? Also das ganze 
funktioniert ja so.. nur eben.. ja.. sobald ich mehr EEPROM Adressen 
will, geht es nicht mehr...

Was kann ich dagegen machen?

Nun soll das Board noch Software PWM haben....

Also wenn der Boardmode auf 2 (PWM) ist soll er.. ebenso wie bei IO die 
PWM Werte vergleichen und 32CH Software PWM machen...

Wie stelle ich das am besten an?

Der ATMega128 wird mit einem 16Mhz Quarz betrieben.
Angehängte Dateien:
Gast #6467739
Lesenswert?

Ohne mir das ganze Zeugs reingezogen zu haben, was wohl bei der 
Datenmenge  und der kurzen und "wirren" Beschreibung viele Mitleser 
abschrecken wird...

 ->  irgendwo scheinst Du da wohl einen Overflow deiner Variable (8bit 
!; max 255dec) zu haben... Da schau mal nach.
Gast #6467751
Lesenswert?

Ohne jemandem zu nahe treten zu wollen: Es wäre ratsam, zuerst ein 
C-Buch gründlich durchzuarbeiten, speziell die Begriffe 'array', 
'struct', 'for'-Schleife. Das spart viel Tipparbeit (was da in eeprom.c 
bzw. eeprom.h steht, ist in meinen Augen eher eine Strafarbeit). Und 
hinterher auch Flash ...

Vielleicht wird dann auch klar, dass es bei dem Fehler bei
  uint8_t eeDataPWMCH31_7 EEMEM                    = 521;
überhaupt nicht um eine EEPROM-Adresse geht (darum kümmert sich der 
Compiler intern, die bekommt man normalerweise nicht zu Gesicht), 
sondern, dass da einer uint8_t-Variablen (die nur Werte von 0 bis 255 
annehmen kann!) ein Wert außerhalb des möglichen Bereichs zugewiesen 
werde soll. Das macht keinen Sinn.
Gast #6470593
Lesenswert?

Daniel schrieb:
> Tada.. Funktioniert.

Dieses Chaos soll funktionieren?

Ich habe auch keine Lust das alles genau durchzuschauen, aber
eines ist nach einem kurzen Blick in ein paar Sources sicher:

Die definierst mehrmals (also in mehreren Fällen) Variablen
in Header-Dateien. Das tut man nicht und das wird dir - wenn
nicht schon passiert - irgendwann auf die Füsse fallen. Das
ist Programmieren unter aller Sau denn du weisst gar nicht
so recht was du da tust.
Gast #6470614
Lesenswert?

Nunja... Ich komme aus einer Code Welt... Wo es so was kompliziertes 
nicht gibt.
1
function foobar($value) {
2
  Tu etwas
3
}

vs
1
void foobar(int $value) {
2
  Tu etwas
3
}

Oben ist es völlig gleich ob das nen string, nen int oder was auch immer 
ist.. Und auch ob 0 oder 250 oder 18374728

Das ist dem Code völlig schnuppe.

Und im unteren?! Alles nur eingeschränkt.

C halt
Gast #6470676
Lesenswert?

Daniel schrieb:
> Nunja... Ich komme aus einer Code Welt... Wo es so was kompliziertes
> nicht gibt.

Faule Ausrede.

Das mehrfache Definieren von einer Variablen desselben Namens - so
wie es bei deinem Sourcen-Gefüge passieren kann - wird dir in
"einer anderen Code Welt" auch auf die Füsse fallen.

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