Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/21/10 22:18
Read: times


 
#173403 - add a cast here?
Responding to: ???'s previous message
Hi Jan,

thanks for the code!! Just a note: by inserting a cast at some places
some probably unneeded (and likely unexpected) promotions to integer
can be avoided:

idx = (uint8_t)(idx + snakeTailIdx) % SNAKE_MAX_LEN;
instead of:
idx = (idx + snakeTailIdx) % SNAKE_MAX_LEN;

The integer promotion then causes a call of a 16 bit modulus library
function. Avoiding this with the appended patch the compiled binary
uses 198 bytes less code memory:)

Greetings,
Frieder


--- main.c.orig 2010-02-21 22:45:08.000000000 +0100
+++ main.c      2010-02-21 22:47:38.000000000 +0100
@@ -172,13 +172,13 @@
 // ---- logical snake
 // -- snake utils
 uint8_t GetSnakePiece(uint8_t idx) {  // get direction of a snake's piece
-  idx = (idx + snakeTailIdx) % SNAKE_MAX_LEN;
+  idx = (uint8_t)(idx + snakeTailIdx) % SNAKE_MAX_LEN;
   return (  ( (snake[idx / 4]) >> (2 * (idx % 4)) ) & 0x03  );
 }

 void SetSnakePiece(uint8_t idx, uint8_t dir) {  // store direction of a snake's piece
   dir &= 0x03;
-  idx = (idx + snakeTailIdx) % SNAKE_MAX_LEN;
+  idx = (uint8_t)(idx + snakeTailIdx) % SNAKE_MAX_LEN;
   snake[idx / 4] = (snake[idx / 4] & (~(0x03 << (2 * (idx % 4))))) | (dir << (2 * (idx % 4)));
 }

@@ -360,7 +360,7 @@
     tmpPos.all = snakeTailPos.all;
     SnakeMove(&snakeTailPos);      // we don't need to check for result, as tail is guaranteed free movement towards body ;-)
     snakeLen--;
-    snakeTailIdx = (snakeTailIdx + 1) % SNAKE_MAX_LEN;
+    snakeTailIdx = (uint8_t)(snakeTailIdx + 1) % SNAKE_MAX_LEN;
     if (MoveTail(&tmpPos)) return true;  // this is the normal course of things: we ate one piece of tail and then break to continue;
   }
 }

 


List of 7 messages in thread
TopicAuthorDate
Snake on 8052.com SBC            01/01/70 00:00      
   As a C noob...            01/01/70 00:00      
      C-hatred            01/01/70 00:00      
   upgrade            01/01/70 00:00      
      8 bit LCD            01/01/70 00:00      
         LCD, 4 vs 8 bit            01/01/70 00:00      
   add a cast here?            01/01/70 00:00      

Back to Subject List