c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] typenprobleme bei ifdef PC ???

Absender: Achim Pankalla
Datum: Fr, 30.03.2007 13:12:44
In-reply-to: <460CDD44.3050409@xxxxxx>
References: <460BFC4D.5030809@xxxxxx> <03FA8E8E-224D-4E27-A1A6-2899A0C20B7B@xxxxxxxxxxxxxxx> <460C243C.907@xxxxxx> <FB69CB24-398E-4A0D-A099-3E8751094F34@xxxxxxxxxxxxxxx> <460CC23C.8090408@xxxxxx> <460CD36D.50200@xxxxxxxx> <460CDD44.3050409@xxxxxx>


hallo,
habe das problem glaube ich etwas eingegrenzt. im folgenden kodeabschnitt in sensor.c habe ich die uint16 register variable durch unit32 (markiert mit <<<>>>) ersetzt, danach fährt der bot im labyrinth wie gewohnt. ein typcasting in der funktion TIMER_GET_TICKCOUNT_16 brachte nichts.

sensor.c:
void sensor_update(void){
static uint16 old_pos=0; /*!< Ticks fuer Positionsberechnungsschleife */ static uint16 old_speed=0; /*!< Ticks fuer Geschwindigkeitsberechnungsschleife */
   #ifdef MEASURE_MOUSE_AVAILABLE
static int16 lastMouseX=0; /*!< letzter Mauswert X fuer Positionsberechnung */ static int16 lastMouseY=0; /*!< letzter Mauswert Y fuer Positionsberechnung */
           static float lastDistance=0;    /*!< letzte gefahrene Strecke */
           static float lastHead=0;        /*!< letzter gedrehter Winkel */
static float oldHead=0; /*!< Winkel aus dem letzten Durchgang */ static float old_x=0; /*!< Position X aus dem letzten Durchgang */ static float old_y=0; /*!< Position Y aus dem letzten Durchgang */ float radius=0; /*!< errechneter Radius des Drehkreises */ float s1=0; /*!< Steigung der Achsengerade aus dem letzten Durchgang */ float s2=0; /*!< Steigung der aktuellen Achsengerade */ float a1=0; /*!< Y-Achsenabschnitt der Achsengerade aus dem letzten Durchgang */ float a2=0; /*!< Y-Achsenabschnitt der aktuellen Achsengerade */
           float xd=0;                    /*!< X-Koordinate Drehpunkt */
           float yd=0;                    /*!< Y-Koordinate Drehpunkt */
float right_radius=0; /*!< Radius des Drehkreises des rechten Rads */ float left_radius=0; /*!< Radius des Drehkreises des linken Rads */
   #endif
static int16 lastEncL =0; /*!< letzter Encoderwert links fuer Positionsberechnung */ static int16 lastEncR =0; /*!< letzter Encoderwert rechts fuer Positionsberechnung */ static int16 lastEncL1=0; /*!< letzter Encoderwert links fuer Geschwindigkeitsberechnung */ static int16 lastEncR1=0; /*!< letzter Encoderwert rechts fuer Geschwindigkeitsberechnung */
   float dHead=0;                    /*!< Winkeldifferenz aus Encodern */
float deltaY=0; /*!< errechneter Betrag Richtungsvektor aus Encodern */ int16 diffEncL; /*!< Differenzbildung linker Encoder */ int16 diffEncR; /*!< Differenzbildung rechter Encoder */
   float sl;                        /*!< gefahrene Strecke linkes Rad */
   float sr;                        /*!< gefahrene Strecke rechtes Rad */
   #ifdef MEASURE_MOUSE_AVAILABLE
       int16 dX;                        /*!< Differenz der X-Mauswerte */
       int16 dY;                        /*!< Differenz der Y-Mauswerte */
int8 modifiedAngles=False; /*!< Wird True, wenn aufgrund 90 Grad oder 270 Grad die Winkel veraendert werden mussten */ sensMouseY += sensMouseDY; /*!< Mausdelta Y aufaddieren */
       sensMouseX += sensMouseDX;        /*!< Mausdelta X aufaddieren */
#endif <<<<< register uint32 ticks = TIMER_GET_TICKCOUNT_16;>>>>
   if (ticks-old_pos > MS_TO_TICKS(50)){
       old_pos = ticks;
       /* Gefahrene Boegen aus Encodern berechnen */
       diffEncL=sensEncL-lastEncL;
       diffEncR=sensEncR-lastEncR;
       lastEncL=sensEncL;
       lastEncR=sensEncR;
       sl=(float)diffEncL*WHEEL_PERIMETER/ENCODER_MARKS;
       sr=(float)diffEncR*WHEEL_PERIMETER/ENCODER_MARKS;
       /* Winkel berechnen */

vielleicht weisst das jemanden mit mehr insiderwissen auf das problem hin...

gruss
  achim