Цитата(rezident @ Dec 22 2008, 23:34)

Либо я не понял сути проблемы, либо вы не понимаете сути типизации и арифметических действий в Си.
Каждое из значений (число 99) слагаемых конечной суммы в вашем выражении
можно представить типом
char, но сумму из восьми чисел (99*8=792=0x318) уже
нельзя представить типом
char, т.к. оно превышает разрядность этого типа (0<=unsigned char<=255=0xFF) и происходит переполнение переменной. По этой причине сумма усекается до числа представимого с помощью типа
char (0x18=24). Ну а деление полученного (усеченного) числа на 8 и дает искомое число 3 (24/8=3).
В общем рекомендую внимательнее изучить
стандарт Си.
Я понимаю, что такое тип переменной и как он представляется в Си. Видимо я не совсем понятно объяснил суть проблемы. Суммируются 8 чисел, каждое меньше 100. Результат объявлен как
unsigned int. Следовательно, результат помещается в переменной.
Keil суммирует числа так как они написаны в программе: к а прибавляется b (но в формате char). Потом к результату прибавляется c и т.д. Но все в формате char. Получается переполнение.
В отличие от этого Franklin все делает правильно. Он суммирует числа через промежуточные р-ры (R6,R7) с учетом переноса.
Я для сравнения привел ассемблерную мнемонику обеих компиляторов, где и можно все это увидеть.
Что касаетсят программирования на Си, то эта программа нормально работает более двух лет, а вышеуказанная проблема возникла при переходе на Keil.
Я в комментарии указал каким образом Keil работает нормально (все переменные описаны как unsigned int), Но при этом увеличивается память. А ведь Franklin прекрасно все понимает с переменными char. Хотелось бы знать как поступать в будущем.