Warum fängt ST bei 1 an zu zählen?

Gast #4794763
Lesenswert?

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!
Gast #4794838
Lesenswert?

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.
Gast #4794869
Lesenswert?

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)
#4794888
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #4794917
Lesenswert?

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.
Gast #4794922
Lesenswert?

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.
Gast #4794926
Lesenswert?

> 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.
#4794948
Lesenswert?

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.
#4795046
Lesenswert?

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?)
#4795071
Lesenswert?

@ 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;
Gast #4795132
Lesenswert?

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 :-)
Moderator (Firma: Titel) Persönliche Seite #4795141
Lesenswert?

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.
Gast #4795154
Lesenswert?

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.
Gast #4795229
Lesenswert?

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...)
Gast #4795237
Lesenswert?

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.
Gast #4795273
Lesenswert?

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 :-)
#4795281
Lesenswert?

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.
Gast #4795352
Lesenswert?

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.
#4795372
Lesenswert?

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.
#4795649
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #4796204
Lesenswert?

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);
Moderator #4796401
Lesenswert?

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.

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