A. R. schrieb:
> Für mich wars so einfacher, weil ich genau weiß, welches Bit gemeint
> ist. Währe bei 2^5 (32) wohl auch erstichtlich gewesen.
Davon war aber auch nicht die Rede!
Jedes Bit hat einen Namen! Der wird im Datenblatt verwendet und durch
die Header Files ist dieser Name auch für dein C-Programm verfügbar.
Die meisten Programmierer wollen nämlich gar nicht wissen, welche
Bitnummer abgefragt wird, der symbolische Name ist völlig ausreichend.
Das hat dann auch den Vorteil, dass der Compiler die Anpassung vornimmt,
wenn dieses Bit bei einem anderen Prozessor zwar an anderer Stelle aber
noch im gleichen Register beheimatet ist. Der Programmierer muss sich
dann nicht darum kümmern.
> Kann es sein, das GCC nicht mit Arrays arbeiten kann?
Ehe wir hier weitermachen:
In 99.999% aller Fälle, in denen Programmierer den Compiler eines
Fehlers bezichtigen, stellt sich hinten nach raus, dass die Kentnisse
der Programmierer lückenhaft, wenn nicht gar fehlerhaft sind.
Also: Ehe du den Compiler eines Fehlers bezichtigst, stell sicher, dasss
nicht du der mit dem Fehler bist.
>
> Folgender Code wird bei mir komplett übersprungen.
>
>
1 | > char array[100];
|
2 | > int i = 0;
|
3 | > while(i<100)
|
4 | > {
|
5 | > array[i]=0;
|
6 | > i++;
|
7 | > }
|
8 | >
|
Der Compiler kann ja auch rausgefunden haben, dass der Nettoeffekt darin
besteht, dass Array komplett auf 0 zu setzen. Und der Compiler mag dafür
bessere, schnellere Methoden haben, als das was du da hingeschrieben
hast. Im Debugger siehst du dann keine 1 zu 1 Korrelation mehr zwischen
den abgearbeiteten Anweisungen und dem was auf dem µC tatsächlich
passiert. Solange das Endergebnis aber dasselbe ist, darf der Compiler
das.