Mahlzeit.
Hab mich gerade mal in STM32 eingelesen. Mich wundert, warum ST Timer,
USARTs etc. mit 1 anfängt zu numerieren. Ich als Informatiker halte es
da wie atmel, bei 0 wird angefangen zu zählen.
Gibt es dafür eine Erklärung?
Für uns alte Hasen, die gelernt haben bei 0 anzufangen zu zählen, ist
das ungewohnt. Generell ist es aber natürlicher, bei 1 anzufangen zu
zählen. Da will vielleicht jemand das System mal umkrempeln ;)
OK, aber dann ist das eine Erkenntnis, mit der ich leben kann: Jeder
macht es anders und ich muss mich dadurch nicht verunsichern lassen.
Hatte kurzzeitig an mir selbst gezweifelt, ob ich da irgendwas nicht
sehe/verstehe...
In der Tat habe ich auch andere Probleme ;)
Danke!
0b00? schrieb:> Äh, nein?! Alles fängt bei 0 an, wie willst du denn binär denken ohne> die 0?
Das beweist nur, wie verbogen dein Gehirn schon ist. Du hast dir doch
auch mal dein erstes Auto gekauft, oder war das wirklich dein nulltes??
Georg
Solange du zwei unterschiedliche Symbole hast geht das doch wunderbar
auch ohne Null. Ich nehm immer Äpfel und Birnen, sieht in der Doku auch
schöner aus.
Georg schrieb:> Das beweist nur, wie verbogen dein Gehirn schon ist. Du hast dir doch> auch mal dein erstes Auto gekauft, oder war das wirklich dein nulltes??
Hier geht es mitnichten um das Zählen des Edelschrottes.
Hier geht es um Informatik.
Nop schrieb:> Weil auch Informatiker bei 1 anfangen zu zählen.
Und hier habe ich selten gesehen, daß die Zählweise bei 1 beginnt.
Wie immer sind die Ausländer Schuld!
Denn, wenn die Araber und Inder nicht die Null angeschleppt hätten, dann
hätte wir auch solch wichtigen Probleme nicht.
(und vermutlich würden wir immer noch mit den Schweinen aus dem gleichen
Trog fressen)
Hugo schrieb:>> Weil auch Informatiker bei 1 anfangen zu zählen.>> Und hier habe ich selten gesehen, daß die Zählweise bei 1 beginnt.
Manche sind offenbar schon derart von C versaut, dass sie sich andere
Zählweisen kaum noch vorstellen können. ;-)
Dass Arrays implizit bei 0 anfangen ist eine Eigenheit von C und jener
Sprachen, die davon abstammen. In anderen Sprachen ist das mitnichten
selbstverständlich.
A. K. schrieb:> Dass Arrays implizit bei 0 anfangen ist eine Eigenheit von C und jener> Sprachen, die davon abstammen. In anderen Sprachen ist das mitnichten> selbstverständlich.
Noe, auch Addressbits und Datenbits in der Hardware fangen bei 0 an.
Helmut L. schrieb:> Noe, auch Addressbits und Datenbits in der Hardware fangen bei 0 an.
Das kommt aber von der Wertigkeit des jeweiligen Bits im Zweiersystem:
2^0, 2^1, 2^2, 2^3, 2^4 ...
Und dann wird einfach das 2^ weggelassen, weil das "ja eh' jeder weiß!"
Aber tatsächlich muss dann schon bei C das ERSTE Element eines Arrays
mit dem Index 0 addressiert werden. Das ist eigentlich kurios und
führt regelmäßig zu Verwirrung. Besonders, wenn der Pointer dann hinten
um eins raus läuft...
Ich finde es eigentlich sehr logisch, dass/wenn die Komponenten
beginnend mit 1 nummeriert werden, denn SPI0 und SPI1 und SPI2 hat ja
nichts mit Wertigkeit zu tun. Die könnten auch genau so gut SPIA, SPIB,
SPIC heißen.
0b00? schrieb:> Hab mich gerade mal in STM32 eingelesen. Mich wundert, warum ST Timer,> USARTs etc. mit 1 anfängt zu numerieren. Ich als Informatiker halte es> da wie atmel, bei 0 wird angefangen zu zählen.>> Gibt es dafür eine Erklärung?
Ja, die von dir konsultierte Dokumentation verschweigen Timer0, USART0
und so weiter. Die tatsächlich vorhandenen *0 Komponenten werden auf
Druck der NSA verheimlicht, da mit diesen eine Backdoor für
amerikanische Geheimdienste offen gehalten werden kann.
> Das kommt aber von der Wertigkeit des jeweiligen Bits im Zweiersystem:> 2^0, 2^1, 2^2, 2^3,
Das kommt von der Wertigkeit des jeweiligen Digits im #ersystem:
#^0, #^1, #^2, ...
Da wird einfach "#^" impliziert.
0b00? schrieb:> Äh, nein?! Alles fängt bei 0 an, wie willst du denn binär denken ohne> die 0?
Da ist kein Widerspruch.
Den 1. Baustein kann man mit binär 0 kodieren.
Den 2. Baustein kann man mit binär 1 kodieren.
Somit reicht ein Bit zur Unterscheidung aus. Nichtsdestotrotz ist der
erste Baustein der erste und nicht etwa der nullte.
Wenn ich drei Zahlen in einem Array speichere, dann ist die Zahl an
Index 0 auch die erste von den dreien. Nicht die nullte.
0b00? schrieb:> Mich wundert, warum ST Timer, USARTs etc. mit 1 anfängt zu numerieren.
Weil es kein Index, sondern nur ein Name ist. Da ist es egal, ob man bei
0 oder 1 oder Α oder ☃ anfängt.
Anders wäre es, wenn die Nummer tatsächlich im Code als Index verwendet
werden würde:
@ Clemens L. (c_l)
>Anders wäre es, wenn die Nummer tatsächlich im Code als Index verwendet>werden würde:>TIMER(n)->CSR |= CSR_ENABLE;>(Gibt es einen Hersteller, der so etwas macht?)
U.a. TI beim PICCOLO.
Na klar, ist alles nur Konvention. Ich kann auch Tisch sagen, wenn ich
Stuhl meine. Im Kreuzworträtzel trag ich auch immer Wörter ein die ich
mag, nicht das, was die sich da ausgedacht haben.
Georg schrieb:
> Das beweist nur, wie verbogen dein Gehirn schon ist. Du hast dir doch> auch mal dein erstes Auto gekauft, oder war das wirklich dein nulltes??
Es heißt natürlich auch 1. Mal, obwohl das wohl bei den meisten ne
Nullnummer war...
Ich sehe -zumindest an dieser Stelle - mein Hirn nicht als verbogen
an... Ist halt etablierte Sprechweise/Schreibweise die - wie ich finde -
einen sehr gut nachvollziehbaren Hintergrund bzw. Herkunft hat. Und
deswegen wundert mich halt, dass ST es anders macht. Aber es sind halt
echt nur Namen. Und gut :-)
Clemens L. schrieb:> TIMER(n)->CSR |= CSR_ENABLE;> (Gibt es einen Hersteller, der so etwas macht?)
Das geht doch ohne dem Index 0. Da muss doch nur die Definition der
Startadresse passen. Und es darf keiner versuchen, z.B. auf
TIMER(0)->CSR zuzugreifen. Aber das gilt genau so auch für einen Index,
der über die maximale Timerzahl hinausgeht, also z.B. TIMER(4539)->CSR.
X[0] ist eine Alternative Schreibweise für "*(X+0)" in C. Oder "*X".
Wie Nop schon schrieb, ein Offset.
Bei Adressen ist anfangen mit 0 Konsistent, damit die einer, Zehner,
Zwanziger wirklich je 10 haben.
Bei Pins oder uarts ist anfangen mit 0 witzig, sarkastisch oder
Dummheit, jedenfalls krank, solange ich nicht je 10 oder 2hoch n
gruppieren will.
Thomas schrieb:> Wenn ein Kunde 3 Kartoffeln verlangt er auch nicht 4 Stück.
OK, aber bei Wörtern fängst du bei 0 an zu zählen? Sonst hättest du das
zweite "verlangt" wohl nicht vergessen...?!
...Kartoffeln verlangt, verlangt er...
0b00? schrieb:> Thomas schrieb:>> Wenn ein Kunde 3 Kartoffeln verlangt er auch nicht 4 Stück.>> OK, aber bei Wörtern fängst du bei 0 an zu zählen? Sonst hättest du das> zweite "verlangt" wohl nicht vergessen...?!>> ...Kartoffeln verlangt, verlangt er...
Vermutlich soll das zweite "verlangt", also verlangt[1], ein "bekommt"
sein.
Also das etwas andere "verlangt" ....
????
(seltsam kaputt, der Satz...)
Thomas schrieb:> Ich bin Bauer.> Wenn ich meine Kartoffeln zähle fange ich immer bei 1 an.> Wenn ein Kunde 3 Kartoffeln verlangt er auch nicht 4 Stück.
Dann bekommt dein Kunde aber nur 2 Kartoffeln. Du fängst mit 1 an, es
liegt noch keine Kartoffel da. Dann legst du die erste dazu und zählst
2?
Also ich fange mit null an und zähle eins, wenn ich das erste Element
hingelegt hab.
M. K. schrieb:> Und ist der 3. Stock nicht schon die 4. Etage? ;)
Gleiches Problem. Zählt man das Erdgeschoss mit oder nicht?
Manchmal wird das Erdgeschoss als erste Etage gezählt und manchmal wird
das erste Obergeschoss als erste Etage gezählt.
https://de.wikipedia.org/wiki/Geschoss_(Architektur)#Obergeschoss_.28OG.29
Fazit: Die Informatiker sind nicht allein mit dem Problem :-)
asdf schrieb:> Fazit: Die Informatiker sind nicht allein mit dem Problem :-)
Darauf wollte ich damit hinweisen und die "Stockwerkproblematik" gibts
schon ein paar Tage länger als C und Co. Eigentlich muss man ja nur
wissen, worüber man spricht, dann hat man auch keine Probleme bzw.
andere Probleme als hier beschrieben wurde.
M. K. schrieb:> Für uns alte Hasen, die gelernt haben bei 0 anzufangen zu zählen, ist> das ungewohnt. Generell ist es aber natürlicher, bei 1 anzufangen zu> zählen.
Es ist nicht "natürlicher", sondern wir sind es schlicht gewöhnt, weil
es uns von Kindheit auf so beigebracht wird.
A. K. schrieb:> Hugo schrieb:>>> Weil auch Informatiker bei 1 anfangen zu zählen.>>>> Und hier habe ich selten gesehen, daß die Zählweise bei 1 beginnt.>> Manche sind offenbar schon derart von C versaut, dass sie sich andere> Zählweisen kaum noch vorstellen können. ;-)>> Dass Arrays implizit bei 0 anfangen ist eine Eigenheit von C und jener> Sprachen, die davon abstammen. In anderen Sprachen ist das mitnichten> selbstverständlich.
Als ich im Studium Matlab programmieren musste, bin ich schier wahnsinng
geworden.
asdf schrieb:> M. K. schrieb:>> Und ist der 3. Stock nicht schon die 4. Etage? ;)>> Gleiches Problem. Zählt man das Erdgeschoss mit oder nicht?> Manchmal wird das Erdgeschoss als erste Etage gezählt und manchmal wird> das erste Obergeschoss als erste Etage gezählt.
Und manchmal wird das Erdgeschoss als 1 gezählt, das erste Untergeschoss
als -1, und die 0 fehlt einfach. Das ist dann so wie vor ein paar
Tausend Jahren noch, als die 0 noch nicht erfunden war.
Mark B. schrieb:> Wenn ich drei Zahlen in einem Array speichere, dann ist die Zahl an> Index 0 auch die erste von den dreien. Nicht die nullte.
Aber auch nur, weil du das früher mal so gelernt hast und nicht, weil
das so gottgegeben oder besser wäre.
Spannend wird's ja bei Datum und Uhrzeit. Bei Tag und Monat fängt man
mit der 1 an zu zählen und bei den Stunden und Minuten aber bei der 0 -
und bei den Sekunden und Millisekunden und Mikrosekunden und ...
Das ist eh mein Lieblingsbeispiel, denn bei der Jahreszahl wurde
ursprünglich mal mit der 1 angefangen, weil's noch gar keine 0 gab, als
unsere Zeitrechnung eingeführt wurde, aber die Jahrtausendwende wurde
trotzdem mit dem Wechsel von 1999 zu 2000 statt dem von 2000 zu 2001
gefeiert.
Rolf Magnus schrieb:> Es ist nicht "natürlicher", sondern wir sind es schlicht gewöhnt, weil> es uns von Kindheit auf so beigebracht wird.
Doch, es ist natürlicher eben weil es die 0 in der Natur schlicht nicht
gibt.
Rolf Magnus schrieb:> Spannend wird's ja bei Datum und Uhrzeit. Bei Tag und Monat fängt man> mit der 1 an zu zählen und bei den Stunden und Minuten aber bei der 0 -> und bei den Sekunden und Millisekunden und Mikrosekunden und ...> Das ist eh mein Lieblingsbeispiel, denn bei der Jahreszahl wurde> ursprünglich mal mit der 1 angefangen, weil's noch gar keine 0 gab, als> unsere Zeitrechnung eingeführt wurde, aber die Jahrtausendwende wurde> trotzdem mit dem Wechsel von 1999 zu 2000 statt dem von 2000 zu 2001> gefeiert.
Du vergleichst hier Äpfel mit Birnen. 1 m sind 100 cm oder auch 1000 mm.
1 Stunde sind auch 60 Minute bzw. 3600 s. Da fängt man nicht an bei 0 zu
zählen sondern man wechselt nur in die nächste Potenz.
Und die Jahrtausendwende wurde auch völlig richtig beim Übergang von
1999 zu 2000 gefeiert denn mit Beginn des Jahres 2000 begann auch das
neue Jahrtausend, beim Jahreswechsel von 2000 zu 2001 war das neue
Jahrtausend bereits 1 Jahr alt, hier den Beginn des Jahrtausends zu
wähnen ist schlicht falsch.
Rolf Magnus schrieb:> Spannend wird's ja bei Datum und Uhrzeit. Bei Tag und Monat fängt man> mit der 1 an zu zählen und bei den Stunden und Minuten aber bei der 0
Wobei "struct tm" einen inkonsequent halben Schritt geht, mit Monate von
0 bis 11. Ausserdem gibts Mitternacht u.U. zweimal. Vorwärts bis 24:00,
rückwärts bis 00:00.
M. K. schrieb:> Rolf Magnus schrieb:>> Es ist nicht "natürlicher", sondern wir sind es schlicht gewöhnt, weil>> es uns von Kindheit auf so beigebracht wird.>> Doch, es ist natürlicher eben weil es die 0 in der Natur schlicht nicht> gibt.
Auf einer Wiese können 0 Bäume genauso stehen wie 5.
> Du vergleichst hier Äpfel mit Birnen. 1 m sind 100 cm oder auch 1000 mm.> 1 Stunde sind auch 60 Minute bzw. 3600 s.
Ja, und ein Tag hat 24 Stunden. Ein Monat hat zwischen 28 und 31 Tagen.
Wo sind da jetzt Äpfel und Birnen? Stehe ich ganz am Anfang eines
Jahres, dann steht bei Monat und Tag eine 1, bei Stunde und Minute aber
eine 0.
> Da fängt man nicht an bei 0 zu zählen sondern man wechselt nur in die> nächste Potenz.
Und zu welcher Zeit fängt dann ein Tag an? 1 Sekunde? 1 Millisekunde?
Oder wo steht die 1 dann? Der Tag fängt nicht zum Zeitpunkt 1 an,
sondern um 00:00 mit noch unendlich vielen weiteren Nullen dahinter.
Keine 1 zu sehen, mit der da zu zählen angefangen wird - im Gegensatz
zum Monat, der mit Tag 1 beginnt.
> Und die Jahrtausendwende wurde auch völlig richtig beim Übergang von> 1999 zu 2000 gefeiert denn mit Beginn des Jahres 2000 begann auch das> neue Jahrtausend, beim Jahreswechsel von 2000 zu 2001 war das neue> Jahrtausend bereits 1 Jahr alt, hier den Beginn des Jahrtausends zu> wähnen ist schlicht falsch.
Nein, denn da die Zählung eben nicht bei 0, sondern bei 1 anfing
(mangels einer 0, die es in der Mathematik damals noch nicht gab - auf
das Jahr 1 v.Chr. folgte sofort das Jahr 1 n.Chr.), hat somit nach
Ablauf eines Jahres das Jahr 2 begonnen, nach Ablauf von 9 Jahren das
Jahr 10 und mit Ablauf von 2000 Jahren das Jahr 2001. Also sind erst mit
dem Wechsel von 2000 nach 2001 die 2000 Jahre um gewesen und nicht mit
dem Wechsel von 1999 nach 2000.
A. K. schrieb:> Immerhin ist 0 auch hier das unterste Bit.
Und bekommt den "höchsten" Schalter zugeordnet... ;-)
> Umgekehrt gibts nämlich auch, d.h. 0 ist das oberste und 31 das unterste> Bit von Adressen und Daten.
Jaja, Xilinx und ihr Microblaze. Das bringt dann immer wieder mal welche
durcheinander:
https://forums.xilinx.com/t5/Embedded-Development-Tools/Bit-order-inconsistencies/td-p/114372
Und daraus resultiert dann der Hit:
1
If you want to assign the least-significant byte of foo to bar, you do:
Lothar M. schrieb:>> Umgekehrt gibts nämlich auch, d.h. 0 ist das oberste und 31 das unterste>> Bit von Adressen und Daten.> Jaja, Xilinx und ihr Microblaze.
Und alle anderen Big-Endians, deren Architekten bei Verstand waren.
Mindestens bei jenen, die irgendwas mit Einzelbits oder gar Bitfeldern
am Hut haben.
Rolf Magnus schrieb:> Bei Tag und Monat fängt man mit der 1 an zu zählen und bei den Stunden> und Minuten aber bei der 0
Dass die Stunden ab 0 gezählt werden, ist aber erst so, seit es Uhren
mit Digitalanzeigen gibt. Vorher war die Zählweise so:
zwölf
viertel eins
halb eins
dreiviertel eins
eins
...
halb zwölf
dreiviertel zwölf
zwölf
...
Bei Zeigeruhren gibt es diese Zählweise immer noch. Mag sein, dass es
auch Uhren gibt, bei denen die oberste Markierung auf dem Zifferblatt
mit einer Null statt einer Zwölf beschriftet ist, aber üblich ist das
nicht.