IAR MSP
вот это работает неправильно(где-то внутри происходит переполнение при delivery.water_volume_ul>(approx) 10 000 000):
Код
delivery.request_conc_volume_ul=
(unsigned long) ((unsigned long long)
(delivery.water_volume_ul+delivery.semi_water_volume_ul) *
(unsigned long)delivery.request_perc)/
(10000-delivery.request_perc);
вот это работает правильно:
Код
unsigned long long aaa;
unsigned long long ccc;
delivery.divider=10000-delivery.request_perc;
aaa=delivery.water_volume_ul+delivery.semi_water_volume_ul;
ccc= aaa*delivery.request_perc;
delivery.request_conc_volume_ul=(unsigned long)(ccc/delivery.divider);
Сейчас нет возможности в ассемблере смотреть, если можно, ткните в K&R, где именно я ошибся?
Приведение delivery.request_perc к unsigned long непонятно зачем, но это вроде не криминал.
Типы:
typedef struct
{ unsigned int request_perc;
unsigned int divider;
unsigned long request_conc_volume_ul; //ul
unsigned long conc_volume_ul;
unsigned long semi_water_volume_ul;
unsigned long water_volume_ul;
} delivery_type;
Спасибо
Уходя, оставьте свет...