Guest User

Untitled

a guest
Dec 1st, 2014
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.61 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <stm8s.h>
  3.  
  4. const uint8_t lut[] = {
  5.  // key,  val1, val2,
  6.     0x12, 0xAB, 0xCD,
  7.     0x34, 0xEF, 0x98,
  8.     0x56, 0xC6, 0xDA,
  9.     0x00, 0x00, 0x00, // end of table
  10. };
  11.  
  12. // return 1 if entry is found, 0 if not found
  13. static char findEntryBad(uint8_t key, uint8_t* val1, uint8_t* val2)
  14. {
  15.     uint8_t i, ii, j;
  16.     for (i = 0; ; i++)
  17.     {
  18.         ii = i * 3; // table has 3 columns
  19.         j = lut[ii + 0];
  20.         if (j == key) // found
  21.         {
  22.             *val1 = lut[ii + 1];
  23.             *val2 = lut[ii + 2];
  24.             return 1;
  25.         }
  26.         else if (j == 0) // end of table
  27.         {
  28.             return 0;
  29.         }
  30.     }
  31.     return 0;
  32. }
  33.  
  34. // return 1 if entry is found, 0 if not found
  35. static char findEntryGood(uint8_t key, uint8_t* val1, uint8_t* val2)
  36. {
  37.     volatile uint8_t i, ii, j; // volatile forces calculation of ii
  38.     for (i = 0; ; i++)
  39.     {
  40.         ii = i * 3; // table has 3 columns
  41.         j = lut[ii + 0];
  42.         if (j == key) // found
  43.         {
  44.             *val1 = lut[ii + 1];
  45.             *val2 = lut[ii + 2];
  46.             return 1;
  47.         }
  48.         else if (j == 0) // end of table
  49.         {
  50.             return 0;
  51.         }
  52.     }
  53.     return 0;
  54. }
  55.  
  56. void main(void)
  57. {
  58.     uint8_t res, v1, v2;
  59.  
  60.     res = findEntryBad(0x12, &v1, &v2);
  61.  
  62.     if (v2 == 0xCD)
  63.     {
  64.         // expected
  65.         GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
  66.     }
  67.     else
  68.     {
  69.         // actual, LED lights up
  70.         GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);
  71.         // v2 is found to be 0x12
  72.     }
  73.  
  74.     while (1);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment