Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
u32 bin2bcd_u32(u32 data, u8 result_bytes)
{u32 result = 0; /*result*/
u8 u8_1;
for (u8_1 = (4 - result_bytes); u8_1; u8_1--) data <<= 8; /*adjust input bytes*/
for (u8_1 = (result_bytes << 3); u8_1; u8_1--) /*bit shift loop*/
{u8 u8_2, u8_3;
/*result BCD nibbles correction*/
result += 0x33333333;
/*result correction loop*/
for (u8_3 = 4; u8_3; u8_3--)
{u8_2 = result >> 24;
if (!(u8_2 & 0x08)) u8_2 -= 0x03;
if (!(u8_2 & 0x80)) u8_2 -= 0x30;
result <<= 8; /*shift result*/
result |= u8_2; /*set 8 bits of result*/
}
/*shift next bit of input to result*/
result <<= 1;
if (((u8)(data >> 24)) & 0x80) result |= 1;
data <<= 1;
}
return(result);
}