Gast
#3349648
Hallo, ich habe ein Problem. Ich möchte gerne eine globale volatile uint16_t Variable (g_time_sec) zum Datenaustausch zwischen ISR und Endlosschleife nutzen. Der Wert wird beim Interrupt um 1 inkrementiert. Das Funktioniert auch bis 65536. Später im Programm wird der Wert auf einen Default zurückgesetzt (2100). In den RAM wird aber nur das letzte Byte geschrieben (52). Wenn ich den default-Wert auf 257 setze steht im RAM 1. Die Variable wird also wie eine 8-Bit Variable behandelt, aber nicht beim inkrementieren. im Ram ist die Variable übrigens auch 16 Bit lang.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
Der Mikrocontroller ist ein ATmega 2561. Ich benutze Atmel Studio 6.1 mit folgender Toolchain: Installed Packages: Atmel AVR (8 bit) GNU Toolchain - 3.4.2.1002 AVR Toolchain 8 Bit Version: AVR8_Toolchain_Version:3.4.2.992 GCC_VERSION:4.7.2 mit einem volatile unsigned long int funktioniert es übrigens, aber ich wüsste gerne wieso es mit einem uint16_t nicht klappt und wer weiß was das noch für Seiteneffekte haben könnte. Wenn ich die Variable mit einem Wert größer 256 initialisiere, wird dieser übrigens auch korrekt in den RAM geschrieben. Ich habe auch schon versucht den Block atomar zu machen, aber das hat auch nicht geholfen.