ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
44364 Топик полностью
Ruslan (18.11.2005 14:40, просмотров: 1) ответил Ruslan на Вот код
Исправленный код. 
#define Y (signed int)0x10000000L

#include 

signed int scale1 (signed int in_data)
{
  signed int y = Y;

  in_data += (1L << 12);

  if (in_data >= y)
    in_data = y - 1;
  else if (in_data < -y)
    in_data = -y;

  return (in_data >> 13);
}

signed int scale2 (signed int in_data)
{
  in_data += (1L << 12);

  if (in_data >= Y)
    in_data = Y - 1;
  else if (in_data < -Y)
    in_data = -Y;

  return (in_data >> 13);
}

int main()
{
  signed int dat = 0x836DDFD;

  printf("0x%8.8x\t", scale1(dat));
  printf("0x%8.8x\n", scale2(dat));

  return 0;
}

Результаты тестов: 0x000041b7 0x000041b7 - ARM mode 0x000041b7 0x00007fff - Thumb mode Компилятор IAR EW ARM 4.30A