Hallo Forum,
ich nutze den GCC aus Codesourcery Lite um meine Software für den STM32
ARM-Prozessor zu übersetzen. Ich wollte jetzt auf die aktuelle Version
umsteigen und diese wirft mir einem Fehler im Assembler vor.
Kennt jemand fogendes Verhalten und ist es mein Fehler oder ein Problem
im GCC?
1 | typedef union {
|
2 | unsigned long int D; /*32Bit unsigned*/
|
3 | struct{
|
4 | unsigned short int _1; /*16Bit unsigned*/
|
5 | unsigned short int _0;
|
6 | }W;
|
7 | } tu_myVar;
|
8 |
|
9 |
|
10 | void MyFunction(void)
|
11 | {
|
12 | tu_myVar my_StackVar;
|
13 | my_StackVar.W._0 = 0x8000;
|
14 | ...
|
15 | some code here
|
16 | ...
|
17 | }
|
Der Assembler wirft mir an der Stelle "my_StackVar.W._0 = 0x8000;"
folgendes vor:
C:\DOKUME~1\foo\LOKALE~1\Temp\ccbvl0ak.s: Assembler messages:
C:\DOKUME~1\foo\LOKALE~1\Temp\ccbvl0ak.s:574: Error: immediate value out
of range -- `movt r4,-32768'
Ein Warning kommt nicht.
Das sieht für mich aus wie ein Vorzeichenproblem. Und das stimmt auch:
mit 0x7FFFF funktioniert das ganze. Liegt die Variable nicht auf dem
Stack funktioniert das auch.
Mache ich was falsch oder ist das wirklich in Bug im GCC?
hier noch die Parameter:
gcc version 4.5.1 (Sourcery G++ Lite 2010.09-51) (4.3.3 hat
funktioniert)
Vielen Dank
Rangi