hallo,
ich habe zwei probleme, deren ursache ich nicht erkennen kann. Ich
simuliere übrigens einen attiny45.
1)
ich lasse über dieses programm den debugger vom atmel studio laufen:
Warum ändern sich die Werte von "pos" und "wert" nicht? Wenn ich sie
innerhalb von main deklariere funktioniert das so, wie es soll.
1 | #include <avr/io.h>
|
2 |
|
3 | unsigned int pos = 0;
|
4 | uint64_t wert=0;
|
5 | uint64_t komb=0xFFFFFFFF;
|
6 |
|
7 |
|
8 | int main(void)
|
9 | {
|
10 | while(1)
|
11 | {
|
12 | wert |= (1<<pos);
|
13 | pos++;
|
14 |
|
15 | if(wert>=komb) {
|
16 | pos=0;
|
17 | wert=0;
|
18 | }
|
19 | }
|
20 | }
|
2) nun der fall, dass die variablen in main deklariert sind:
Problem hier: Wenn "pos" den Wert 16 erreicht, Springt "wert" beim
nächsten mal oder-verknüpfen mit der um pos verschobenen 1 auf
0xffffffffffffffff! Bis Verschiebung um 15 sind die Werte immer (so wie
sie sollen) bei 2^pos-1
1 | #include <avr/io.h>
|
2 |
|
3 |
|
4 |
|
5 | int main(void)
|
6 | {
|
7 | unsigned int pos = 0;
|
8 | uint64_t wert=0;
|
9 | uint64_t komb=0xFFFFFFFF;
|
10 |
|
11 | while(1)
|
12 | {
|
13 | wert |= (1<<pos);
|
14 | pos++;
|
15 |
|
16 | if(wert>=komb) {
|
17 | pos=0;
|
18 | wert=0;
|
19 | }
|
20 | }
|
21 | }
|
was passiert hier?
danke im voraus!