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?
TI macht da bei seinen Piccolo MCUs auch so. Warum auch immer.
Es ist eben der erste USART und nicht der Nullte :-) Ich als Informatiker halte es so, dass ... ich wirklich andere Probleme habe ;-)
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!
Weil auch Informatiker bei 1 anfangen zu zählen. Was man mit 0 beginnen läßt, ist keine Zählung, sondern Offsets (Array-Indices).
Äh, nein?! Alles fängt bei 0 an, wie willst du denn binär denken ohne die 0?
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.
Ich beginne immer beim höchsten Wert und zähle runter: 0, -1, -2, -3, ... Da kommt nie ne eins!
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.
Falk B. schrieb: > Namen sind Schall und Rauch! Magic Smoke[TM] is an essential part of Electronics, Ruhe also of CS, IT and last but not least AI.
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:
1 | TIMER(n)->CSR |= CSR_ENABLE; |
(Gibt es einen Hersteller, der so etwas macht?)
@ 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.
1 | extern volatile struct EPWM_REGS *ePWM[]; |
2 | |
3 | void PWM_2ch_UpDwnCnt_CNF(int16 n, int16 period, int16 mode, int16 phase) |
4 | {
|
5 | // Time Base SubModule Registers
|
6 | (*ePWM[n]).TBCTL.bit.PRDLD = TB_SHADOW; // set Shadow load |
7 | (*ePWM[n]).TBPRD = period/2; // half-period due to up-down count |
8 | (*ePWM[n]).TBPHS.half.TBPHS = 0; |
9 | (*ePWM[n]).TBCTR = 0; |
10 | (*ePWM[n]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; |
11 | (*ePWM[n]).TBCTL.bit.HSPCLKDIV = TB_DIV1; |
12 | (*ePWM[n]).TBCTL.bit.CLKDIV = TB_DIV1; |
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 :-)
Informatiker am Bahnhof: "0... 1... 2... WO IST MEIN DRITTER KOFFER?!!"
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.
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.
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...
An meinem ERSTEN vollendeten Lebensjahr, hatte ich schon zum ZWEITEN Mal Geburtstag. Aber so genau weiß ich das nicht mehr ;-)
Wenn man sieht, von wie vielen Nullen man so umgeben ist, kann eine Eins doch nicht schaden.
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.
Markus F. schrieb: > Wieviele Treppen mußt Du laufen, bis Du im 3. Stock bist? Und ist der 3. Stock nicht schon die 4. Etage? ;)
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.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
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.
Wir haben hier ein Gerät für 150k€ Dessen Bilder werden mit 639x479 Bildpunkten ausgegeben :) -> Die SW dafür stammt aus dem selben Haus -> fail
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.
Aus gegebenem Anlass im Beitrag "Bildung des Zweierkomplements einer 4 Bit-Zahl" siehe mal die Zuordnung der Schalter und LEDs zu den Bits im angehängten Screenshot... :-D
Immerhin ist 0 auch hier das unterste Bit. Umgekehrt gibts nämlich auch, d.h. 0 ist das oberste und 31 das unterste Bit von Adressen und Daten.
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: |
2 | bar <= foo (24 to 31); |
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
