избегают деления, есть ли смысл?
/**
* @brief Converts a 2 digit decimal to BCD format.
* @param Value Byte to be converted
* @retval Converted byte
*/
uint8_t RTC_ByteToBcd2(uint8_t Value)
{
uint32_t bcdhigh = 0U;
while(Value >= 10U)
{
bcdhigh++;
Value -= 10U;
}
return ((uint8_t)(bcdhigh << 4U) | Value);
}
/**
* @brief Converts from 2 digit BCD to Binary.
* @param Value BCD value to be converted
* @retval Converted word
*/
uint8_t RTC_Bcd2ToByte(uint8_t Value)
{
uint32_t tmp = 0U;
tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10;
return (tmp + (Value & (uint8_t)0x0F));
}
можно например так
#define BIN_TO_BCD(BIN)((((BIN/10)%10)<<4)|(BIN%10))
Смысла ноль
Выглядит так, будто писавший этот код человек не в курсе операции деления с остатком.
stm32_hal 🤣 хотя на старых ядрах бывает программная реализация деления.
а разве деление не на порядки более затратная операция чем + - * ? смысл в экономии процессорных ресурсов там где можно?
Обсуждают сегодня