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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
05/08/08 05:07
Read: times


 
#154562 - That is a LOT of code
Responding to: ???'s previous message
I did not compile it but:

void RS232_Write(unsigned char reg, unsigned char dat0, unsigned char dat1)
{

  unsigned char REG_H, REG_L, DAT1_H, DAT1_L, DAT2_H, DAT2_L, CHECKSUM_H, CHECKSUM_L, CHECKSUM_T, HexValue ;

  REG_H = Hex2Ascii(reg >> 4);	  // do the Upper Nibble
  REG_L = Hex2Ascii(reg  & 0x0F);	  // do the Lower Nibble

  DAT1_H = Hex2Ascii(dat0 >> 4);	  // do the Upper Nibble
  DAT1_L = Hex2Ascii(dat0  & 0x0F); // do the Lower Nibble

  DAT2_H = Hex2Ascii(dat1 >> 4);	  // do the Upper Nibble
  DAT2_L = Hex2Ascii(dat1  & 0x0F); // do the Lower Nibble

  CHECKSUM_T = (cam_header + cam_ID_H + cam_ID_L + REG_H + REG_L + DAT1_H + DAT1_L + DAT2_H + DAT2_L);

  CHECKSUM2_H = Hex2Ascii(CHECKSUM_T >> 4);	// do the Upper Nibble
  CHECKSUM_L = Hex2Ascii(CHECKSUM_T  & 0x0F);	// do the Lower Nibble
  //***********************************************************************
  uart_init();
  uart_transmit(cam_header); 	// Header
  uart_transmit(cam_ID_H); 	// ID H
  uart_transmit(cam_ID_L); 	// ID L
  uart_transmit(REG_H); 	// Register H
  uart_transmit(REG_L); 	// Register L
  uart_transmit(DAT1_H); 	// Data 1 H
  uart_transmit(DAT1_L); 	// Data 1 L
  uart_transmit(DAT2_H); 	// Data 2 H
  uart_transmit(DAT2_L); 	// Data 2 L
  uart_transmit(CHECKSUM_H); 	// Send calculated checksum 1
  uart_transmit(CHECKSUM_L); 	// Send calculated checksum 2
//***********************************************************************
}

unsigned char Hex2Ascii(unsigned char HexValue)
{
   code const unsigned char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
   if(HexValue < 16)return hex[HexValue];
   else                       return '0';
}


would be shorter.
if you look at your switch you can have multiple labels with the same code.
   switch (HexValue)
   {
      case 0x00:    // Numbers
      case 0x01: 
      case 0x02: 
      case 0x03: 
      case 0x04: 
      case 0x05:
      case 0x06
      case 0x07: 
      case 0x08:
      case 0x09: return (HexValue + '0');
        break; 
      case 0x0A:    // Letters 
      case 0x0B: 
      case 0x0C: 
      case 0x0D: 
      case 0x0E:
      case 0x0F: return (HexValue + ('A'- 0x0A));//  The compiler should convert to a single add
        break;
   } 

Otherwise you might as well just return the value.
Note that this might be better as an if statement.

Anyway just a critique.

List of 35 messages in thread
TopicAuthorDate
Problem with the toascii() w/ clarification            01/01/70 00:00      
   toascii not what you want            01/01/70 00:00      
      Ah yes.....makes sense            01/01/70 00:00      
         C does know ASCII            01/01/70 00:00      
            the final result:            01/01/70 00:00      
               That is a LOT of code            01/01/70 00:00      
                  It won't compile in its state because...            01/01/70 00:00      
               Grossly inefficient!            01/01/70 00:00      
                  A small trick            01/01/70 00:00      
                     small trick is cool.....            01/01/70 00:00      
                        Same as Neil's            01/01/70 00:00      
                           Ah makes sense.....            01/01/70 00:00      
                              You can still do better            01/01/70 00:00      
                                 LOL....Russ.......LOL            01/01/70 00:00      
                                    sprintf()            01/01/70 00:00      
                                       I had you at <>            01/01/70 00:00      
                                          So why not sprintf()?            01/01/70 00:00      
                                             You are right......I did say that            01/01/70 00:00      
                        How the small trick works            01/01/70 00:00      
                           Is it worth it?            01/01/70 00:00      
                              Same assembly generated for me            01/01/70 00:00      
                           You said index.....click click....very nice            01/01/70 00:00      
                              fast (sic?) lookup table            01/01/70 00:00      
                                 Faster? Probably not.            01/01/70 00:00      
               What's in a name?            01/01/70 00:00      
                  true.....but at this point.......            01/01/70 00:00      
                     Tricks and treats            01/01/70 00:00      
                     there is no time lost by doing it right            01/01/70 00:00      
                        You guys are completely right,            01/01/70 00:00      
                           the very simple way to (almost) do it right            01/01/70 00:00      
                           For the sake of learning            01/01/70 00:00      
                              Good point            01/01/70 00:00      
   UART doesn't know ASCII            01/01/70 00:00      
      Good point....but            01/01/70 00:00      
   Unhelpful documentation            01/01/70 00:00      

Back to Subject List