ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
166763 Топик полностью
rezident (16.09.2009 21:35 - 21:40, просмотров: 291) ответил Brains на В коде С есть неточность - unsigned char in_byte; надо читать unsigned short in_word;,
Практически ваш код #define DATA_IN P8IN unsigned short ReadExtMem(void) { unsigned short result; result= DATA_IN; result<<=8; result+=DATA_IN; return result; } void main(void) { unsigned short in_word; for(;;) in_word = ReadExtMem(); } компилируется вот так NAME test RSEG CSTACK:DATA:SORT:NOROOT(0) EXTERN ?longjmp_r4 EXTERN ?longjmp_r5 EXTERN ?setjmp_r4 EXTERN ?setjmp_r5 PUBWEAK ?setjmp_save_r4 PUBWEAK ?setjmp_save_r5 PUBLIC ReadExtMem PUBWEAK _A_P7IN PUBLIC main ASEGN DATA16_AN:DATA:NOROOT,038H // union <unnamed> _A_P7IN _A_P7IN: DS8 2 RSEG CODE:CODE:REORDER:NOROOT(1) ReadExtMem: MOV.B &0x39, R12 SWPB R12 MOV.B &0x39, R15 ADD.W R15, R12 RET REQUIRE _A_P7IN RSEG CODE:CODE:REORDER:NOROOT(1) main: ??main_0: CALL #ReadExtMem JMP ??main_0 RSEG CODE:CODE:REORDER:NOROOT(1) ?setjmp_save_r4: REQUIRE ?setjmp_r4 REQUIRE ?longjmp_r4 RSEG CODE:CODE:REORDER:NOROOT(1) ?setjmp_save_r5: REQUIRE ?setjmp_r5 REQUIRE ?longjmp_r5 END Как вы можете заметить подпрограмма чтения ReadExtMem в пять команд уместилась. Запись в in_word в теле main компилятор выбросил вполне справедливо. Ее значение нигде не используется, а потому в данном примере нафиг не нужно.