Brains (16.09.2009 20:46, просмотров: 1) ответил rezident на А что получается, если квалификатор volatile в определении переменной in_byte убрать?
Все остается как и было и с оптимизацией и без. Volatile, как и объявление глобальной переменной я вынес когда пробовал разные варианты. Если переменная локальная, код генерируется еще смешнее:
unsigned short in_byte;
in_byte = P8IN;
\ 000002 5F426102 MOV.B &P8IN, R15
\ 000006 4F4F MOV.B R15, R15
\ 000008 0A4F MOV.W R15, R10
Зачем так сложно, если можно MOV.B &P8IN, R10 ?
Вообще-то мне нужно прочитать из внешней 16-битной памяти слово, но шина данных 8 бит, поэтому читать нужно сначала lowbyte, затем highbyte, а функция должна возвращать ushort.
На ассемблере я могу написать легко:
DATA_REG DS 2
MOV.B &P8IN,DATA_REG //младший байт
MOV.B &P8IN,DATA_REG+1 //старший байт