Peter Zz schrieb:
> Ich habe in meinem Code ein paar uint64_t Variablen, die nicht
> initialisiert werden müssen. Andere Variablen hingegen müssen sehr wohl
> initialisiert werden. Wie kann ich dem Compiler sagen:
> "schau her, bei diesen bitte keine Warnung, wenn ich sie nicht
> initialisiere"
Mach die Variablen global, dann werden die mit 0 initialisiert, sofern
du nichts anderes angiebts.
Brauchst du denn wirklich uint64?
uint32 statt uint64 spart auch schon wieder viel programmspeicher beim
initialisieren.
Atmel Studio 6.2 (projekt fur AVR), GCC 4.8.1, optimierung ist
abgeschaltet
Lokal ohne Initialisierung:
1 | #include <stdint.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | uint64_t a0;
|
6 | uint64_t a1;
|
7 | uint64_t a2;
|
8 | uint64_t a3;
|
9 | uint64_t a4;
|
10 | uint64_t a5;
|
11 | uint64_t a6;
|
12 | uint64_t a7;
|
13 | uint64_t a8;
|
14 | uint64_t a9;
|
15 | uint64_t a10;
|
16 | uint64_t a11;
|
17 |
|
18 | while(1);
|
19 | }
|
1 | Program Memory Usage : 264 bytes
|
Globale Initialisierung mit 0:
1 | #include <stdint.h>
|
2 |
|
3 | uint64_t a0;
|
4 | uint64_t a1;
|
5 | uint64_t a2;
|
6 | uint64_t a3;
|
7 | uint64_t a4;
|
8 | uint64_t a5;
|
9 | uint64_t a6;
|
10 | uint64_t a7;
|
11 | uint64_t a8;
|
12 | uint64_t a9;
|
13 | uint64_t a10;
|
14 | uint64_t a11;
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | while(1);
|
19 | }
|
1 | Program Memory Usage : 280 bytes
|
Globale Initialisierung:
1 | #include <stdint.h>
|
2 |
|
3 | uint64_t a0 = 0;
|
4 | uint64_t a1 = 123;
|
5 | uint64_t a2 = 43534645;
|
6 | uint64_t a3 = 45645;
|
7 | uint64_t a4 = 6758;
|
8 | uint64_t a5 = 678;
|
9 | uint64_t a6 = 456;
|
10 | uint64_t a7 = 33;
|
11 | uint64_t a8 = 34555346;
|
12 | uint64_t a9 = 56756734563;
|
13 | uint64_t a10 = 356457;
|
14 | uint64_t a11 = 58790087;
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | while(1);
|
19 | }
|
1 | Program Memory Usage : 306 bytes
|
Lokale Initialisierung:
1 | #include <stdint.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | uint64_t a0 = 0;
|
6 | uint64_t a1 = 123;
|
7 | uint64_t a2 = 43534645;
|
8 | uint64_t a3 = 45645;
|
9 | uint64_t a4 = 6758;
|
10 | uint64_t a5 = 678;
|
11 | uint64_t a6 = 456;
|
12 | uint64_t a7 = 33;
|
13 | uint64_t a8 = 34555346;
|
14 | uint64_t a9 = 56756734563;
|
15 | uint64_t a10 = 356457;
|
16 | uint64_t a11 = 58790087;
|
17 |
|
18 | while(1);
|
19 | }
|
1 | Program Memory Usage : 626 bytes
|
Wie du siehst, braucht die globale initialisierung nur die hälfte an
speicher. Ist meiner Meinung nach die schönste Methode, da man variablen
nur dann global machen sollte, wenn man sie auch global braucht (z.B. in
einer isr), aber das ist ja jedem selbst überlassen ;)
Peter Zz schrieb:
> "schau her, bei diesen bitte keine Warnung, wenn ich sie nicht
> initialisiere"
Warnungen "abschalten" halte ich für den "falschen" weg, da Warnungen ja
einen Grund haben. Ob du die Warnungen nun für gesonderte Bereiche
abschaltest bzw. versteckst, oder einfach ignorierst, kommt dabei auf's
gleiche raus. Dann würde ich persönlich das ignorieren der Warnungen
aber vorziehen.