Jan H. schrieb:> hex_addr - hex_addr -> Da kommt doch jedes mal "0" raus oder habe ich> was verpasst?
Hast du, nämlich:
% SPM_PAGESIZE
Die Operation kommt zuerst.
moep schrieb:> Jan H. schrieb:>> oder habe ich>> was verpasst?>> Ja, die "operator precedence".> Auf gut Schuldeutsch: "Punkt vor Strich"
Soll heißen ->
Jan H. schrieb:> Richtig?
Schaue doch bitte in die Spezifikation der Sprache, welche du
verwendest, wenn du den Antwortenden nicht glauben magst.
In jedem C Buch findest du diese Wahrheit.
In Foren findest du Glauben, Überzeugungen und Meinungen, und diese
stellst du ja hier Frage...
moep schrieb:> Damit wird wohl die Startadresse der Page berechnet in der sich die> aktuelle Adresse (hex_addr) befindet.
Wenn der Controller jetzt sagen wir mal 128 Pages hat.. Darf das
Ergebnis der Rechnung nicht größer als 128 werden oder?
Jan H. schrieb:> Wenn der Controller jetzt sagen wir mal 128 Pages hat.. Darf das> Ergebnis der Rechnung nicht größer als 128 werden oder?
Du hast nicht begriffen, das die Startadresse einer Seite nicht die
(fiktive) "Nummer" einer Seite ist, sondern eben diese fiktive Nummer
multipliziert mit der Größe der Seiten.
Denn genau das braucht der der SPM-Mechanismus. Datenblatt lesen bildet!
c-hater schrieb:> Jan H. schrieb:>>> Wenn der Controller jetzt sagen wir mal 128 Pages hat.. Darf das>> Ergebnis der Rechnung nicht größer als 128 werden oder?>> Du hast nicht begriffen, das die Startadresse einer Seite nicht die> (fiktive) "Nummer" einer Seite ist, sondern eben diese fiktive Nummer> multipliziert mit der Größe der Seiten.>> Denn genau das braucht der der SPM-Mechanismus. Datenblatt lesen bildet!
Hätte ich es verstanden, würde ich wohl kaum hier fragen oder?
Unter was muss ich schauen?
Flash Pages?
Jan H. schrieb:> Unter was muss ich schauen?
Kommt natürlich auf's konkrete DB an. Aber irgendwas mit "Bootloader
support" oder "Self-programming the flash" kommt eigentlich überall im
Titel des/der relevanten Abschnitte vor.
c-hater schrieb:> Jan H. schrieb:>>> Unter was muss ich schauen?>> Kommt natürlich auf's konkrete DB an. Aber irgendwas mit "Bootloader> support" oder "Self-programming the flash" kommt eigentlich überall im> Titel des/der relevanten Abschnitte vor.
Habe hier einen Mega32 vor mir liegen.
Jan H. schrieb:> Habe hier einen Mega32 vor mir liegen.
Schön für dich. Dann weißt du je wenigstens welches verdammte Datenblatt
du herunterzuladen nd zumindest dessen Inhaltsverzeichnis durchzusehen
hast.
Mein Gott, das kann doch nicht so schwer sein, mal wenigstens irgendwas
selbst zu tun...
Schnauze schrieb:> Nicht pampig werden, Stefan. Das Forum ist dazu da Fragen zu stellen.
Mache haben halt direkt alles in die Wiege gelegt bekommen und sind halt
neunmalklug.
c-hater schrieb:> Jan H. schrieb:>>> Habe hier einen Mega32 vor mir liegen.>> Schön für dich. Dann weißt du je wenigstens welches verdammte Datenblatt> du herunterzuladen nd zumindest dessen Inhaltsverzeichnis durchzusehen> hast.>> Mein Gott, das kann doch nicht so schwer sein, mal wenigstens irgendwas> selbst zu tun...
Nette Aussage ?
Schnauze schrieb:> Nicht pampig werden, Stefan. Das Forum ist dazu da Fragen zu stellen.
Es ist aber nicht dazu da, exzessive chronische eigene Faulheit ohne
jede Scham darzustellen.
Ja, kann man machen, muss sich dann aber nicht über die Reaktion der
Fleissigen wundern....
c-hater schrieb:> Schnauze schrieb:>>> Nicht pampig werden, Stefan. Das Forum ist dazu da Fragen zu stellen.>> Es ist aber nicht dazu da, exzessive chronische eigene Faulheit ohne> jede Scham darzustellen.>> Ja, kann man machen, muss sich dann aber nicht über die Reaktion der> Fleissigen wundern....
Dein Ego scheint sehr groß zu sein, zumindest im Netz.
Ich brauchte 20 Sekunden, das Datenblatt zu finden, downzuloaden und die
Worte "self programming" darin zu finden. Es ist ja wohl nicht zu viel
verlangt, nach genannten Stichworten selbst zu recherchieren.
So langsam dämmert mir, was unsere Regierungende Industrie mit
Fachkräftemangel meint. Mir wird Angst und Bange vor den Lenkradlosen
Autos, die unsere Facebook Generation gerade entwickelt.
Du könntest ja auch einfach nicht antworten, wenn es so eine Zumutung
ist.
Oder lässt dein Zwang zu "helfen" das nicht zu? Oder musst du
Überlegenheit demonstrieren wie eine ganze Reihe anderer Kandidaten
hier?
Schnauze schrieb:> Oder lässt dein Zwang zu "helfen" das nicht zu? Oder musst du> Überlegenheit demonstrieren wie eine ganze Reihe anderer Kandidaten> hier?
Nach so viel gemecker habe ich Mitleid mit dem TO empfunden.
Schnauze schrieb:> Du könntest ja auch einfach nicht antworten, wenn es so eine Zumutung> ist.>> Oder lässt dein Zwang zu "helfen" das nicht zu? Oder musst du> Überlegenheit demonstrieren wie eine ganze Reihe anderer Kandidaten> hier?
Ich mag deine Art. Du weißt doch sicherlich "Hochmut kommt vor dem
Fall".
Im Netz große Klappe, zu Hause nichts zu sagen.
Es gibt hier ein paar Menschen, die hassen es, wenn andere mehr
Hilfsbereitschaft zeigen, als sie selber. Verständlich, denn es fühlt
sich nicht gut an, zu merken dass man in gewissen Punkten ein
schlechterer Mensch ist.
Die einen akzeptieren ihre Unvollkommenheit, die anderen hadern ihr
ganzes Leben damit. Denen sieht man es am Gesicht an und man merkt es
auch an ihren Äußerungen.
Jan H. schrieb:> Mache haben halt direkt alles in die Wiege gelegt bekommen und sind halt> neunmalklug.
Falsch. Manche haben sich ihr Wissen hart erarbeitet.
Ich versuch einfach mal auf die Frage zu antworten.
% ist der Modulo Operator. Der gibt dir den Rest einer Division zurück.
Hatte man in der Grundschule mal. Ganz einfach ist das, wenn hinterm
Modulo eine 1 mit vielen Nullen steht. Am Beispiel: 12345%100 = 45. Das
geht auch Hexadezimal 0x12AB % 0x100 = AB oder Binär 0b1000001010 %
0b10000 = 0b1010.
Speicher ist of in mehrere Blöcke (pages) fester größe Zerlegt. Also hat
man beispielsweise 16 Blöcke mit je 1kB. Man kann das entweder mit
0-16383 addressieren oder mit einer Zahl von 0-15 und einer von 0-1023.
1kB ist jetzt SPM_PAGESIZE. hex_addr ist eine Adresse im linear
addressierten Speicher. hex_addr%SPM_PAGESIZE gibt dir die Addresse im
Block, ist im Beispiel also max 1023 groß. Wenn man den Wert von
hex_addr abzieht, dann erhält man die Page-Nummer (gefolgt von ein paar
Nullen).
Blöcke haben praktisch immer die größe einer Zweierpotenz. Binär also
eine 1 mit einigen Nullen. Damit schließt sich dann der Kreis zur Modulo
"Erklärung" oben.
Falls das alles schon klar war, dann einfach nochmal fragen.
Stefanus F. schrieb:> Mathias M. schrieb:>> Falls das alles schon klar war, dann einfach nochmal fragen.>> Warum, damit es nochmal erklärt wird?
Ich gehe davon aus, dass er dann die Frage nicht 1 zu 1 nochmal postet,
sondern neu formuliert, was er noch nicht verstanden hat. Hätte ich
natürlich klarer ausdrücken können, damit du das verstehst.
Mathias M. schrieb:> dass er dann die Frage nicht 1 zu 1 nochmal postet,> sondern neu formuliert
So ergibt es mehr Sinn, als wie ich es vorhin aufgefasst habe.
Mathias M. schrieb:> Falls das alles schon klar war, dann einfach nochmal fragen.
Es gibt auch noch nette Menschen ;)
Ich habe das bis jetzt so verstanden..
( Da ich gerade mit einem "Mega32" arbeite, entnehme ich die Daten aus
dem Datenblatt als Beispiel von dem.. )
Flash Pages = 256
Page Size = 64 Words ( 128 Bytes )
Meine bildliche Auffassung ->
1
Page[0]=0..127(Bytes)
2
Page[1]=127..usw.
3
Page[..]=...
4
Page[255]=...Ende
Daher habe ich mit dieser Rechnung auch nicht viel anfangen können.
Laut dieser Berechnung kommt nach 128 Bytes, als "flash_page" 128 raus.
Dieser Sprung von 0 -> 128 war / ist mir nicht ganz klar.
In meiner Vorstellung müsste nach der ersten geschrieben Page eine 1
raus kommen. Es wird wohl aber so nicht adressiert?
Jan H. schrieb:> Meine bildliche Auffassung ->> Page[0] = 0..127 ( Bytes)> Page[1] = 127.. usw.
Nein.
Page[0] = 0..127
Page[1] = 128..255
Page[2] = 256..383 usw.
Allerdings sind die Namen etwas unglücklich gewählt.
1
flash_page_start=hex_addr-hex_addr%SPM_PAGESIZE;// Absolute adresse an welcher diese Page beginnt
2
3
und:
4
flash_page_nummer=(uint8_t)(hex_addr/SPM_PAGESIZE);// Nummer der Page
5
flash_page_offset=(uint8_t)(hex_addr%SPM_PAGESIZE);// Adresse (Offset) innerhalb dieser Page
Hab hier vom TO noch keine Frage gesehen die sich nicht jedes Toastbrot
mit 2min überlegen selbst hätte beantworten können. Also kein Wunder
dass man da genervt ist. Elektronik ist kein Hobby für jmd der es nicht
mal schafft, bereits genannte Suchbegriffe in einem Datenblatt zu
suchen. Und programmieren ist kein Hobby für jmd der erst in einem Forum
fragen muss um merken, dass Punkt- vor Strichrechnung kommt wenn ein
Code anders wie schon gemerkt ja keinen Sinn ergibt.