Следует использовать для промежуточных вычислений 32-х битную переменную или явно приводить типы операндов.
Код
x = (uint16_t) (((uint32_t)y*32UL)/100UL);
Можно конечно воспользоваться и неявным приведением типов.
Код
x = (((uint32_t)y*32UL)/100;
Кстати, эта тема имеет слабое отношение к разделу MSP430. Это раз. Во-вторых, не могли бы вы перестать плодить новые темы по каждому "чиху"? Вы же разрабатываете электросчетчик на MSP430 вроде? Вот и пишите в одной теме о всех проблемах с которыми сталкиваетесь при этом. И вам самому и читающим ваши сообщения будет удобнее и понятнее контекст ваших вопросов/проблем.
P.S. пардон, просмотрел, что у вас беззнаковые операнды. Поправил. Кстати, а значительная ошибка округления при целочисленных вычислениях вас нисколько не смущает?
Сообщение отредактировал rezident - Sep 17 2011, 11:16