Цитата(HARMHARM @ Jan 26 2011, 14:43)

Добавьте везде volatile, и не будет никакой разницы
Код
;;;222 volatile uint8_t s0, s1, s2, s3;
;;;223 volatile uint8_t m1 = ((s1 + s2) * 9 - s0 - s3) / 16;
000106 eb0c0006 ADD r0,r12,r6
00010a eb0000c0 ADD r0,r0,r0,LSL #3
00010e eba00007 SUB r0,r0,r7
000112 eba00006 SUB r0,r0,r6
000116 ea4f71e0 ASR r1,r0,#31
00011a eb007111 ADD r1,r0,r1,LSR #28
00011e f3c11107 UBFX r1,r1,#4,#8
;;;224 volatile uint8_t m2 = ((s1 + s2) * 9 - s0 - s3) >> 4;
000122 f3c01007 UBFX r0,r0,#4,#8
Цитата(GetSmart @ Jan 26 2011, 14:51)

А вот для проверки почему, надо бы ко всем константам приписать U в конце.
Код
;;;222 volatile uint8_t s0, s1, s2, s3;
;;;223 volatile uint8_t m1 = ((s1 + s2) * 9U - s0 - s3) / 16U;
000106 eb0c0006 ADD r0,r12,r6
00010a eb0000c0 ADD r0,r0,r0,LSL #3
00010e eba00007 SUB r0,r0,r7
000112 eba00006 SUB r0,r0,r6
000116 ea4f1010 LSR r0,r0,#4
00011a b2c1 UXTB r1,r0
;;;224 volatile uint8_t m2 = ((s1 + s2) * 9U - s0 - s3) >> 4U;
00011c b2c0 UXTB r0,r0
Вы правы...
На эти U L я обычно "ложил с прибором". Да, видно, зря. Не пойму, 16 - оно ж и в Африке 16. Или нет?
Еще варианты
Код
;;;222 volatile uint8_t s0, s1, s2, s3;
;;;223 volatile uint8_t m1 = ((s1 + s2) * 9U - s0 - s3) / 16;
000106 eb0c0006 ADD r0,r12,r6
00010a eb0000c0 ADD r0,r0,r0,LSL #3
00010e eba00007 SUB r0,r0,r7
000112 eba00006 SUB r0,r0,r6
000116 ea4f1010 LSR r0,r0,#4
00011a b2c1 UXTB r1,r0
;;;224 volatile uint8_t m2 = ((s1 + s2) * 9U - s0 - s3) >> 4;
00011c b2c0 UXTB r0,r0
Код
;;;222 volatile uint8_t s0, s1, s2, s3;
;;;223 volatile uint8_t m1 = ((s1 + s2) * 9 - s0 - s3) / 16U;
000106 eb0c0006 ADD r0,r12,r6
00010a eb0000c0 ADD r0,r0,r0,LSL #3
00010e eba00007 SUB r0,r0,r7
000112 eba00006 SUB r0,r0,r6
000116 f3c01107 UBFX r1,r0,#4,#8
;;;224 volatile uint8_t m2 = ((s1 + s2) * 9 - s0 - s3) >> 4U;
00011a f3c01007 UBFX r0,r0,#4,#8
Да, приходит понимание, что 16 - это число со знаком, а 16U - без знака.
Спасибо! Похоже, виновник найден.