heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · heise open · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


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

Re: [ct-bot] signed vs. unsigned char

Absender: Fabian Recktenwald
Datum: Fr, 24.03.2006 19:56:26
In-reply-to: <44242497.7090801@xxxxxxxx>
References: <Pine.BSO.4.63.0603240904390.31736@xxxxxxxxxxxxxxxxxx> <4423C478.1030701@xxxxxxxx> <4423C9C6.2020503@xxxxxxxxxxxxxxxxxxx> <4423CA88.5000309@xxxxxxxx> <4423D842.2090007@xxxxxxxxxxxxxxxxxxx> <44242497.7090801@xxxxxxxx>


So, der Patch ist drin. Aber jetzt lauert eine noch viel schwierigere
Aufgabe: Wir sollten uns von allen int-Deklarationen Verabschieden und
sie auf

uint8, int8, unit16, int16, uint32, int32
Vorläufig schon mal ein Teil der entsprechenden Änderungen. Die muss aber auf jeden Fall nochmal jemand durchsehen, ist auch noch nicht vollständig.

	Recktenwald Fabian
Index: bot-logik.c
===================================================================
RCS file: /ctbot/ct-Bot/bot-logik.c,v
retrieving revision 1.27
diff -u -r1.27 bot-logik.c
--- bot-logik.c	24 Mar 2006 18:16:55 -0000	1.27
+++ bot-logik.c	24 Mar 2006 20:07:03 -0000
@@ -338,8 +338,8 @@
 	static int16 mot_goto_l=0;	/*!< Muss der linke Motor noch drehen?  */
 	static int16 mot_goto_r=0;	/*!< Muss der rechte Motor noch drehen?  */
 
-  	int diff_l;	/* Restdistanz links */
-	int diff_r; /* Restdistanz rechts */
+  	int16 diff_l;	/* Restdistanz links */
+	int16 diff_r; /* Restdistanz rechts */
 
 	/* Sind beide Zaehler Null und ist die Funktion active 
 	 * -- sonst waeren wir nicht hier -- 
@@ -556,7 +556,7 @@
  * @return Bestand Handlungsbedarf? True, wenn das Verhalten ausweichen musste, sonst False.
  * TODO: Parameter einfuegen, der dem Verhalten vorschlaegt, wie zu reagieren ist.
  * */
-int bot_avoid_harm(void){
+uint8 bot_avoid_harm(void){
 	if(is_obstacle_ahead(COL_CLOSEST) != False || sensBorderL > BORDER_DANGEROUS || sensBorderR > BORDER_DANGEROUS){
 		speedWishLeft = -BOT_SPEED_NORMAL;
 		speedWishRight = -BOT_SPEED_NORMAL;
@@ -569,7 +569,7 @@
  * Es handelt sich hierbei nicht im eigentlichen Sinn um ein Verhalten, sondern ist nur eine Abstraktion der Motorkontrollen.
  * @param curve Gibt an, ob der Bot eine Kurve fahren soll. Werte von -127 (So scharf wie moeglich links) ueber 0 (gerade aus) bis 127 (so scharf wie moeglich rechts)
  * @param speed Gibt an, wie schnell der Bot fahren soll. */
-void bot_drive(int8 curve, int speed){
+void bot_drive(int8 curve, int16 speed){
 	// Wenn etwas ausgewichen wurde, bricht das Verhalten hier ab, sonst wuerde es evtl. die Handlungsanweisungen von bot_avoid_harm() stoeren.
 	if(bot_avoid_harm()) return;
 	if(curve < 0) {
@@ -620,7 +620,7 @@
  * @param cm Gibt an, wie weit der Bot fahren soll. In cm :-) Die Strecke muss positiv sein, die Fahrtrichtung wird ueber speed geregelt.
  * */
 
-void bot_drive_distance(Behaviour_t* caller,int8 curve, int speed, int cm){
+void bot_drive_distance(Behaviour_t* caller,int8 curve, int16 speed, int16 cm){
 	int16 marks_to_drive = cm * 10 * ENCODER_MARKS / WHEEL_PERIMETER;
 	int16 *encoder;
 	drive_distance_curve = curve;
Index: command.c
===================================================================
RCS file: /ctbot/ct-Bot/command.c,v
retrieving revision 1.10
diff -u -r1.10 command.c
--- command.c	19 Mar 2006 20:42:51 -0000	1.10
+++ command.c	24 Mar 2006 20:07:03 -0000
@@ -76,10 +76,10 @@
  * Greift auf low_read() zurueck
  * @see low_read()
  */
-int command_read(void){
-	int bytesRcvd;
-	int start=0;			// start of command sequence
-	int i;			
+int8 command_read(void){
+	uint8 bytesRcvd;
+	uint8 start=0;			// start of command sequence
+	uint8 i;			
 	command_t * command;		// Pointer to Cast rceceived data
 	char * ptr;			// helper
 	char buffer[RCVBUFSIZE];       // Buffer  
@@ -154,7 +154,7 @@
 	}
 }
 
-static int count=1;	/*!< Zaehler fuer Paket-Sequenznummer*/
+static uint16 count=1;	/*!< Zaehler fuer Paket-Sequenznummer*/
 
 /*!
  * Uebertraegt ein Kommando und wartet nicht auf eine Antwort
@@ -222,8 +222,8 @@
  * Wertet das Kommando im Puffer aus
  * return 1, wenn Kommando schon bearbeitet wurde, 0 sonst
  */
-int command_evaluate(void){
-	int analyzed = 1;
+int8 command_evaluate(void){
+	int8 analyzed = 1;
 	
 	switch (received_command.request.command) {
 		case CMD_SENS_RC5:
Index: ct-Bot.c
===================================================================
RCS file: /ctbot/ct-Bot/ct-Bot.c,v
retrieving revision 1.24
diff -u -r1.24 ct-Bot.c
--- ct-Bot.c	24 Mar 2006 18:16:55 -0000	1.24
+++ ct-Bot.c	24 Mar 2006 20:07:03 -0000
@@ -145,7 +145,7 @@
  */
 	void display(void){
 		#ifdef TEST_AVAILABLE_COUNTER
-			static int counter=0;
+			static uint16 counter=0;
 		#endif
  		if (display_update >0)
  			#ifdef DISPLAY_SCREENS_AVAILABLE
@@ -280,8 +280,8 @@
  */
  	int main (int argc, char *argv[]){
 
-		int ch;	
-		int start_server = 0;	/*!< Wird auf 1 gesetzt, falls -s angegeben wurde */
+		char ch;	
+		uint8 start_server = 0;	/*!< Wird auf 1 gesetzt, falls -s angegeben wurde */
 		char *hostname = NULL;	/*!< Speichert den per -t uebergebenen Hostnamen zwischen */
 
 		// Die Kommandozeilenargumente komplett verarbeiten
@@ -296,7 +296,7 @@
 				// uebergeben. Der String wird in hostname
 				// gesichert.
 				{
-					const int len = strlen(optarg);
+					const uint16 len = strlen(optarg);
 					hostname = malloc(len + 1);
 					if (NULL == hostname)
 						exit(1);
Index: log.c
===================================================================
RCS file: /ctbot/ct-Bot/log.c,v
retrieving revision 1.1
diff -u -r1.1 log.c
--- log.c	8 Mar 2006 14:21:26 -0000	1.1
+++ log.c	24 Mar 2006 20:07:04 -0000
@@ -100,7 +100,7 @@
  * @param line Zeilennummer
  * @param log_type Log-Typ
  */
-extern void log_begin(char *filename, unsigned int line, LOG_TYPE log_type) {
+extern void log_begin(char *filename, uint16 line, LOG_TYPE log_type) {
 
 /* Ausgaben ueber das LCD-Display werden ohne Dateiname und Zeilennumer
  * gemacht. Der Log-Typ versteckt sich im ersten Buchstaben. Durch eine
@@ -168,7 +168,7 @@
 extern void log_printf(char *format, ...) {
 
 	va_list	args;
-	unsigned int len = strlen(log_buffer);
+	uint16 len = strlen(log_buffer);
 	
 	#ifdef LOG_DISPLAY_AVAILABLE
 		/* Nur auf einem bestimmten Screen werden Loggings ausgegeben. */
Index: sensor.c
===================================================================
RCS file: /ctbot/ct-Bot/sensor.c,v
retrieving revision 1.10
diff -u -r1.10 sensor.c
--- sensor.c	24 Mar 2006 18:16:55 -0000	1.10
+++ sensor.c	24 Mar 2006 20:07:04 -0000
@@ -48,8 +48,8 @@
 volatile int8 sensMouseDX;		/*!< Maussensor Delta X, positive Werte zeigen querab der Fahrtrichtung nach rechts */
 volatile int8 sensMouseDY;		/*!< Maussensor Delta Y, positive Werte zeigen in Fahrtrichtung */
 
-volatile int sensMouseX;		/*!< Mausposition X, positive Werte zeigen querab der Fahrtrichtung nach rechts */
-volatile int sensMouseY;		/*!< Mausposition Y, positive Werte zeigen in Fahrtrichtung  */
+volatile int16 sensMouseX;		/*!< Mausposition X, positive Werte zeigen querab der Fahrtrichtung nach rechts */
+volatile int16 sensMouseY;		/*!< Mausposition Y, positive Werte zeigen in Fahrtrichtung  */
 
 volatile int16 sensEncL=0;	/*!< Encoder linker Motor */
 volatile int16 sensEncR=0;	/*!< Encoder rechter Motor */
Index: include/bot-logik.h
===================================================================
RCS file: /ctbot/ct-Bot/include/bot-logik.h,v
retrieving revision 1.11
diff -u -r1.11 bot-logik.h
--- include/bot-logik.h	24 Mar 2006 18:16:55 -0000	1.11
+++ include/bot-logik.h	24 Mar 2006 20:07:04 -0000
@@ -103,7 +103,7 @@
  * @param cm Gibt an, wie weit der Bot fahren soll. In cm :-) Die Strecke muss positiv sein, die Fahrtrichtung wird ueber speed geregelt.
  * */
 
-void bot_drive_distance(Behaviour_t* caller,int8 curve, int speed, int cm);
+void bot_drive_distance(Behaviour_t* caller,int8 curve, int16 speed, int16 cm);
 
 /*! 
  * Dreht den Bot im mathematisch positiven Sinn. 
Index: include/command.h
===================================================================
RCS file: /ctbot/ct-Bot/include/command.h,v
retrieving revision 1.8
diff -u -r1.8 command.h
--- include/command.h	24 Mar 2006 18:16:55 -0000	1.8
+++ include/command.h	24 Mar 2006 20:07:04 -0000
@@ -119,7 +119,7 @@
  * greift auf low_read() zurueck
  * @see low_read()
  */
-int command_read(void);	
+int8 command_read(void);	
 
 /*!
  * Uebertraegt ein Kommando und wartet nicht auf eine Antwort
@@ -144,7 +144,7 @@
  * Wertet das Kommando im Puffer aus
  * return 1, wenn Kommando schon bearbeitet wurde, 0 sonst
  */
-int command_evaluate(void);
+int8 command_evaluate(void);
 
 /*! 
  * Gibt ein Kommando auf dem Bildschirm aus
Index: include/display.h
===================================================================
RCS file: /ctbot/ct-Bot/include/display.h,v
retrieving revision 1.8
diff -u -r1.8 display.h
--- include/display.h	24 Mar 2006 18:16:55 -0000	1.8
+++ include/display.h	24 Mar 2006 20:07:04 -0000
@@ -56,7 +56,7 @@
  * @param row Zeile
  * @param column Spalte
  */
-void display_cursor (int row, int column) ;
+void display_cursor (uint8 row, uint8 column) ;
 
 /*!
  * Schreibt einen String auf das Display.
Index: include/global.h
===================================================================
RCS file: /ctbot/ct-Bot/include/global.h,v
retrieving revision 1.4
diff -u -r1.4 global.h
--- include/global.h	4 Mar 2006 14:54:23 -0000	1.4
+++ include/global.h	24 Mar 2006 20:07:05 -0000
@@ -46,12 +46,11 @@
 	#endif
 	
 	typedef unsigned char uint8;                       /*!< vorzeichenlose 8-Bit-Zahl  */
+	typedef short unsigned int uint16;                 /*!< vorzeichenlose 16-Bit-Zahl  */
 	typedef unsigned int word;                         /*!< vorzeichenlose 16-Bit-Zahl  */
 	typedef signed char int8;                          /*!< vorzeichenbehaftete 8-Bit-Zahl */ 
 	typedef short int int16;                           /*!< vorzeichenbehaftete 16-Bit-Zahl  */
 
-	#define uint16                  word				/*!< Int mit 16 Bit */
-	
 	#define True                  1						/*!< Wahr */
 	#define False                 0						/*!< Falsch */
 	
Index: include/sensor.h
===================================================================
RCS file: /ctbot/ct-Bot/include/sensor.h,v
retrieving revision 1.11
diff -u -r1.11 sensor.h
--- include/sensor.h	24 Mar 2006 18:16:55 -0000	1.11
+++ include/sensor.h	24 Mar 2006 20:07:05 -0000
@@ -57,8 +57,8 @@
 extern volatile int8 sensMouseDX;		/*!< Maussensor Delta X, positive Werte zeigen querab der Fahrtrichtung nach rechts */
 extern volatile int8 sensMouseDY;		/*!< Maussensor Delta Y, positive Werte zeigen in Fahrtrichtung */
 
-extern volatile int sensMouseX;		/*!< Mausposition X, positive Werte zeigen querab der Fahrtrichtung nach rechts */
-extern volatile int sensMouseY;		/*!< Mausposition Y, positive Werte zeigen in Fahrtrichtung  */
+extern volatile int16 sensMouseX;		/*!< Mausposition X, positive Werte zeigen querab der Fahrtrichtung nach rechts */
+extern volatile int16 sensMouseY;		/*!< Mausposition Y, positive Werte zeigen in Fahrtrichtung  */
 
 
 extern volatile int16 v_left;			/*!< Abrollgeschwindigkeit des linken Rades in [mm/s] [-128 bis 127] relaisitisch [-50 bis 50] */
Index: include/uart.h
===================================================================
RCS file: /ctbot/ct-Bot/include/uart.h,v
retrieving revision 1.7
diff -u -r1.7 uart.h
--- include/uart.h	24 Mar 2006 18:16:55 -0000	1.7
+++ include/uart.h	24 Mar 2006 20:07:05 -0000
@@ -64,12 +64,12 @@
  * @param length Groesse des Datenpuffers in bytes
  * @return Anzahl der gesendete Bytes
  */
-int uart_write(uint8 * data, int length);
+uint16 uart_write(uint8 * data, uint16 length);
 
 /* Liest Zeichen von der UART
  * @param data Der Zeiger an die die gelesenen Zeichen kommen
  * @param length Anzahl der zu lesenden Bytes
  * @return Anzahl der tatsaechlich gelesenen Zeichen
  */
-int uart_read(void* data, int length);
+uint16 uart_read(void* data, uint16 length);
 #endif
Index: mcu/adc.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/adc.c,v
retrieving revision 1.3
diff -u -r1.3 adc.c
--- mcu/adc.c	24 Mar 2006 18:16:55 -0000	1.3
+++ mcu/adc.c	24 Mar 2006 20:07:05 -0000
@@ -46,8 +46,8 @@
  * Liest einen analogen Kanal aus
  * @param channel Kanal - hex-Wertigkeit des Pins (0x01 f�r PA0; 0x02 f�r PA1, ..)
  */
-int adc_read(uint8 channel){
-	int result = 0x00;
+uint16 adc_read(uint8 channel){
+	uint16 result = 0x00;
 
 	// interne Refernzspannung AVCC, rechts Ausrichtung
 	ADMUX= _BV(REFS0) ;//| _BV(REFS1);	 //|(0<<ADLAR);	
Index: mcu/delay.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/delay.c,v
retrieving revision 1.2
diff -u -r1.2 delay.c
--- mcu/delay.c	17 Mar 2006 17:09:24 -0000	1.2
+++ mcu/delay.c	24 Mar 2006 20:07:05 -0000
@@ -55,11 +55,11 @@
  * ==> aufl�sung ohne rtc: 100ms-schritte mir rtc: 5ms-Schritte
  * @param ms Anzahl der Millisekunden
  */
-void delay(int ms){
-	int ms_counter=0;
+void delay(uint16 ms){
+	uint16 ms_counter=0;
 	
 	#ifdef RTC_AVAILABLE
-		int ms_temp=rtc_msecond;
+		uint16 ms_temp=rtc_msecond;
 	#endif
 	
 	while (ms_counter <ms){
Index: mcu/display.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/display.c,v
retrieving revision 1.7
diff -u -r1.7 display.c
--- mcu/display.c	24 Mar 2006 18:16:55 -0000	1.7
+++ mcu/display.c	24 Mar 2006 20:07:05 -0000
@@ -135,7 +135,7 @@
  * @param row Zeile
  * @param column Spalte
  */
-void display_cursor (int row, int column) {
+void display_cursor (uint8 row, uint8 column) {
    switch (row) {
     case 1:
 		display_cmd (0x80 + column - 1);
@@ -206,7 +206,7 @@
  */
 void display_printf(char *format, ...) {
 	
-	unsigned int run = 0;
+	uint8 run = 0;
 	va_list	args;
 	
 	/* Sicher gehen, das der zur Verfuegung stehende Puffer nicht
Index: mcu/mouse.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/mouse.c,v
retrieving revision 1.4
diff -u -r1.4 mouse.c
--- mcu/mouse.c	24 Mar 2006 18:16:55 -0000	1.4
+++ mcu/mouse.c	24 Mar 2006 20:07:05 -0000
@@ -65,7 +65,7 @@
  * @return das Byte
  */
 int8 maus_sens_readByte(void){
-	int i;
+	int8 i;
 	char data=0;
 
 	MAUS_DDR  &= ~MAUS_SDA_PIN; 	// SDA auf Input
@@ -86,7 +86,7 @@
  * @param data Datum
  */
 void maus_sens_write(int8 adr, uint8 data){
-	int i;
+	int8 i;
 	maus_sens_writeByte(adr);
 	maus_sens_writeByte(data);
 	for (i=0; i<75; i++){asm("nop");}	// mindestens 100 Mikrosekunden Pause!!!
@@ -99,7 +99,7 @@
  * @return das Datum
  */
 int8 maus_sens_read(uint8 adr){
-	int i;
+	int8 i;
 	maus_sens_writeByte(adr);
 	for (i=0; i<75; i++){asm("nop");}	// mindestens 100 Mikrosekunden Pause!!!
 	return maus_sens_readByte();
Index: mcu/uart.c
===================================================================
RCS file: /ctbot/ct-Bot/mcu/uart.c,v
retrieving revision 1.6
diff -u -r1.6 uart.c
--- mcu/uart.c	24 Mar 2006 18:16:55 -0000	1.6
+++ mcu/uart.c	24 Mar 2006 20:07:06 -0000
@@ -123,7 +123,7 @@
 //#define uart_send_cmd(cmd)  uart_write(cmd,sizeof(command_t));
 
 /* 
-int uart_send_cmd(command_t *cmd){
+uint uart_send_cmd(command_t *cmd){
 	int i;
 	char * ptr = (char*) cmd;
 	for (i=0; i<sizeof(command_t); i++)
@@ -139,8 +139,8 @@
  * @param length Groesse des Datenpuffers in bytes
  * @return Anzahl der gesendete Bytes
  */
-int uart_write(uint8 * data, int length){
-	int i;
+uint16 uart_write(uint8 * data, uint16 length){
+	uint16 i;
 	char * ptr = (char*) data;
 	for (i=0; i<length; i++)
 		uart_send_byte(*ptr++);
@@ -155,10 +155,10 @@
  * @param length Anzahl der zu lesenden Bytes
  * @return Anzahl der tatsaechlich gelesenen Zeichen
  */
-int uart_read(void* data, int length){
+int16 uart_read(void* data, uint16 length){
 	uint8 i;
 	char* ptr = data;
-	int count= uart_data_available();
+	uint16 count= uart_data_available();
 	
 	if (count > length)
 		count=length;
Index: pc/display_pc.c
===================================================================
RCS file: /ctbot/ct-Bot/pc/display_pc.c,v
retrieving revision 1.9
diff -u -r1.9 display_pc.c
--- pc/display_pc.c	24 Mar 2006 18:16:55 -0000	1.9
+++ pc/display_pc.c	24 Mar 2006 20:07:06 -0000
@@ -84,7 +84,7 @@
 /*!
 ** LCD_Cursor: Positioniert den LCD-Cursor bei "row", "column".
 */
-void display_cursor (int row, int column) {
+void display_cursor (uint8 row, uint8 column) {
 	POSITION(row, column	);
 }
 


Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum