Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нелогичность вставки #asm после if в PICC-18 STD 9.51PL1?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
PV`
Баг или фича с #asm после if в PICC-18 STD 9.51PL1?
Пользую: MPLAB IDE v8.10, HI-TECH PICC-18 STD Release Notes for Version 9.51PL1, chip=18F258
Пример1 (asm вставляется в if):
Код
main.c:
#include <pic18.h>
near unsigned char test;
void main(void)
{
if (test!=0) test=0x55;
#asm
  movlw 0AAh
  movwf _test,c
#endasm
  LATC=test;
}
Listing:
  _main:                                
; errata NOP at function entry point    
       dw      65535                    
;tst.c: 5: if (test!=0) test=0x55;      
       movf    _test,w,c                
       bz      l2                      
       movlw   85                      
       movwf   _test,c                  
       movlw   170    ;#              
       movwf   _test,c;#              
  l2:                                  
;tst.c: 10: LATC=test;                  
       movff   _test,3979     ;volatile
;tst.c: 11: }                          
       goto    start

Пример2 (добален только ";" и asm вставляется уже после if):
Код
#include <pic18.h>
near unsigned char test;
void main(void)
{
if (test!=0) test=0x55;;
#asm
  movlw 0AAh
  movwf _test,c
#endasm
  LATC=test;
}
Listing:
  _main:                                
; errata NOP at function entry point    
       dw      65535                    
;tst.c: 5: if (test!=0) test=0x55;;  
       movf    _test,w,c                
       bz      l2                      
       movlw   85                      
       movwf   _test,c                  
  l2:                                  
       movlw   170    ;#              
       movwf   _test,c;#              
;tst.c: 10: LATC=test;                  
       movff   _test,3979     ;volatile
;tst.c: 11: }                          
       goto    start

Есть ли какой стандарт на данную тему?
DL36
Цитата(PV` @ May 5 2008, 17:37) *
Баг или фича с #asm после if в PICC-18 STD 9.51PL1?

Есть ли какой стандарт на данную тему?

Делайте лучше асмовские модули. От вставок у компилятора сносит крышу.
PV`
Цитата(DL36 @ May 5 2008, 20:56) *
Делайте лучше асмовские модули. От вставок у компилятора сносит крышу.

С общей рекомендацией “Делайте лучше асмовские модули” согласны многие, но в жизни всегда есть “другой случай” smile.gif
По моей последней практике, при большом количестве разовых проектов, бывают случаи, когда проще или быстрее впихнуть вставку на asm и глянуть листинг, чем описывать и отлаживать внешние ассемблерные модули, тем более вызываемые только через call с тусовкой параметров через память…
Снос крыши компилятора контролируем. И к описанному примеру есть безобидное решение – вставка дополнительного “;”. Для этого и тему создал.
PS: Никакой войны кто круче - СИ или АСМ и кто быстрее и оптимальнее созданет внешние ПП на asm smile3009.gif
Сергей Борщ
Цитата(PV` @ May 6 2008, 15:47) *
И к описанному примеру есть безобидное решение – вставка дополнительного “;”. Для этого и тему создал.
Это действительно глюк компилятора. Вставка дополнительного ";" выглядет нелогичной для стороннего читателя, поэтому лишний ";" лучше откомментировать. А вот заключение test = 0x55; в { } выглядит более логично. Интересно, как поведет себя компилятор в этом случае?
PV`
Цитата(Сергей Борщ @ May 6 2008, 16:59) *
А вот заключение test = 0x55; в { } выглядит более логично. Интересно, как поведет себя компилятор в этом случае?

Всё будет так-же, т.е. если {...} надо обязательно писать {...};
Код
  _main:                                
       dw      65535                    
;tst.c: 3: void main(void)              
;tst.c: 4: {                            
;tst.c: 5: if (test!=0) { test=0x55; }  
       movf    _test,w,c                
       bz      l2                      
       movlw   85                      
       movwf   _test,c                  
       movlw   170    ;#              
       movwf   _test,c;#              
  l2:                                  
;tst.c: 10: LATC=test;                  
       movff   _test,3979     ;volatile
;tst.c: 11: }                          
       goto    start


Данная "фича" наблюдается и в:
PICC-18 COMPILER V9.50PL3
PICC-18 PRO V9.61
От сего и ищется “стандарт” ассемблерной вставки HI-TECH smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.