Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Relocatable code
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9382
Страница 1 от 1

Автор:  npelov [ Чет Сеп 29, 2011 12:05 am ]
Заглавие:  Relocatable code

До сега не съм писал relocatable код и реших да се пробвам. От една страна е хубаво компилатора да се грижи за ресурсите, но доста главоболия ми създава. Първо със симулатора не мога да поставям в watch лист-а променливи по име, а само по адрес. И как да знам адреса като се избира по време на компилацията.

Другия проблем е в кода по-долу. Дава ми следната грешка:
Error[151] D:\DATA\PIC\C18-TEST\FUNC.ASM 51 : Operand contains unresolvable labels or is too complex

Доста се стреснах, но после разбрах, че компилатора е боза грешно е определил реда на който е грешката (заради #ifdef-a). Грешката всъщност идва от този иф: #if (digitTo7GotoTable & 0xFFFF00) != (digitTo7GotoTableEnd & 0xFFFF00).


Код:
digitTo7
   clrf   PCLATU
   movlw   PCLATH, HIGH(digitTo7GotoTable)
   movwf   PCLATH

   andlw   0x0F
   rlncf   WREG, f

digitTo7GotoTable
   addwf   PCL
               ;   .gfe dcba
   retlw   0x3F   ; 0 0011 1111      abcdef
   retlw   0x06   ; 1 0000 0110
   retlw   0x5B   ; 2 0101 1011      a b g e d
   retlw   0x4F   ; 3 0100 1111      abcd g
   retlw   0x66   ; 4 0110 0110
   retlw   0x6D   ; 5 0110 1101      afgcd
   retlw   0x7D   ; 6 0111 1101      !b
   retlw   0x07   ; 7 0000 0111      abc
   retlw   0x7F   ; 8 0111 1111      all
   retlw   0x6F   ; 9 0110 1111      !e


#ifdef   LCD_DECIMAL
   retlw   0x40   ; A 0100 0000
   retlw   0x00   ; B 0111 0111
   retlw   0x00   ; C 0111 0111
   retlw   0x00   ; D 0111 0111
   retlw   0x00   ; E 0111 0111
   retlw   0x00   ; F 0000 0000      empty
#else
   retlw   0x77   ; A 0111 0111      !d
   retlw   0x7C   ; B 0111 1100      !ab
   retlw   0x39   ; C 0011 1001      afed
   retlw   0x5E   ; D 0101 1110      !af          това е 51-ви ред
   retlw   0x79   ; E 0111 1001      !bc
   retlw   0x71   ; F 0111 0001      !cdb
#endif

digitTo7GotoTableEnd

#if (digitTo7GotoTable & 0xFFFF00) != (digitTo7GotoTableEnd & 0xFFFF00)

   Error "digitTo7GotoTable is not aligned"

#endif

Автор:  npelov [ Пет Сеп 30, 2011 7:57 pm ]
Заглавие:  Re: Relocatable code

Да добавя само че код сегмента започва така:

Код:
.FIRST_TABLES   code   0x001A


т.е. на теория би трябвало адресите на тези етикети да са известни

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/