Пытаюсь наплодить кое что в иаре под 18F458 и натолкнулся на затык один
В хедере CANCON описан следующим образом: __SFR_BITS(__nonbanked,CANCON,0xF6F,,WIN0,WIN1,WIN2,ABAT,REQOP0,REQOP1,REQOP2)
Подпрограммка
void SetCANMode( unsigned char Mode ) { CANCON = Mode; while ((CANSTAT & 0xE0) != Mode); }
компилится так:
149: void SetCANMode( unsigned char Mode ) 150: { 151: CANCON = Mode; 003FE6 C200 MOVFF 0x200, 0x6f <<<<<< засада тут 003FE8 F06F NOP 152: while ((CANSTAT & 0xE0) != Mode); 003FEA 506E MOVF 0xf6e, W, ACCESS 003FEC 0BE0 ANDLW 0xe0 003FEE 0102 MOVLB 0x2 003FF0 1900 XORWF 0, W, BANKED 003FF2 E1FB BNZ 0x3fea 153: } 003FF4 0012 RETURN 0
во всех вариантах оптимизации вместо адреса 0xF6F она, зараза, пишет в 0x6F. Как результат - мы виснем тут навеки.
Это мой первый опыт с иаром пичным, посему я в раздумьях, то ли букварь читать, то ли иар на другую версию попробовать махнуть, то ли волосья выщипывать... ;-)...
Что скажут гуру?
|