Siro
01.06.2011, 16:27
Hallo,
ich habe (hatte) ein Problem bei einer Berechnung in "C"
Nachdem ich mir den Assemblercode ansah, wurde der Fehler offensichtlich.
Für eine Division mit 16384 hat der Compiler einen Shift Rechts 14 eingesetzt.
Das ist für "positive" Werte völlig okay, aber bei negativen Werten geht es natürlich schief, es sei denn er hätte einen Spezialshift welcher das Vorzeichen beachtet. Hat der Cortex M3 aber nicht und genau für den wurde der Code erstellt.
Um es kurz zu machen, anbei der Code mit der Problemlösung.
Nun die eigentliche Frage:
Kommt nicht bei jeder Berechnung ohne Typecast als "Default(Standard) ein "int" heraus ? dann hätte der Compiler doch nicht einen Shift benutzen dürfen ?
Siro
ich habe (hatte) ein Problem bei einer Berechnung in "C"
Nachdem ich mir den Assemblercode ansah, wurde der Fehler offensichtlich.
Für eine Division mit 16384 hat der Compiler einen Shift Rechts 14 eingesetzt.
Das ist für "positive" Werte völlig okay, aber bei negativen Werten geht es natürlich schief, es sei denn er hätte einen Spezialshift welcher das Vorzeichen beachtet. Hat der Cortex M3 aber nicht und genau für den wurde der Code erstellt.
Um es kurz zu machen, anbei der Code mit der Problemlösung.
Nun die eigentliche Frage:
Kommt nicht bei jeder Berechnung ohne Typecast als "Default(Standard) ein "int" heraus ? dann hätte der Compiler doch nicht einen Shift benutzen dürfen ?
Siro