Отговори на тема  [ 2 мнения ] 
Relocatable code 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 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

_________________
PIC SPBRG values calculator


Чет Сеп 29, 2011 12:05 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Re: Relocatable code
Да добавя само че код сегмента започва така:

Код:
.FIRST_TABLES   code   0x001A


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

_________________
PIC SPBRG values calculator


Пет Сеп 30, 2011 7:57 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 2 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни