Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR/PIC18 - глюк у меня или у него?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Velund
Пытаюсь наплодить кое что в иаре под 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. Как
результат - мы виснем тут навеки.

Это мой первый опыт с иаром пичным, посему я в раздумьях, то ли букварь читать, то
ли иар на другую версию попробовать махнуть, то ли волосья выщипывать... ;-)...

Что скажут гуру?
Velund
Становится все чудесатее и чудесатее. Запустил build из среды иаровской (выше был тот же компилятор но прикрученный к MPLAB). Вот кусок листинга...

Пошел рыться в опциях в мплаб...

149 void SetCANMode( unsigned char Mode )
\ SetCANMode:
\ 000000 REQUIRE `?CLPIC18_2_12_L00`
150 {
\ 000000 ; Function Enter
151 CANCON = Mode;
\ 000000 010E MOVLW 1
\ 000002 ....6FFF MOVFF PLUSW2,0xF6F
152 while ((CANSTAT & 0xE0) != Mode);
\ `??SetCANMode_0`:
\ 000006 6E50 MOVF 0xF6E,0,0
\ 000008 E00B ANDLW 224
\ 00000A .... MOVWF ?A0,0
\ 00000C 010E MOVLW 1
\ 00000E .... MOVF PLUSW2,0,0
\ 000010 .... XORWF ?A0,0,0
\ 000012 ; Cond:NE
\ 000012 F9E1 BNZ `??SeтCANMode_0`
153 }
\ 000014 .... MOVWF PREINC2,0
\ 000016 1200 RETURN 0
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.