2013-04-29 1 views
1

Я пытаюсь скомпилировать и связать программу на языке C с помощью компилятора XC8. Я перешел из компилятора C18 и внес некоторые незначительные изменения в код. С C18 код скомпилирован и связан просто отлично. С XC8, компилирование идет хорошо, но шаг ссылка терпит неудачу с этой ошибкой:Шаг ссылки не может найти символы (компилятор XC8)

Error [500] ; 0. undefined symbols: 
_putch(server.obj) _ENC_Init(server.obj) _ENC_WriteRegister(server.obj) _ENC_ReadRegister(server.obj) 

Как успешно составителя, я предполагаю, что есть прототипы найдены, Ergo в .h файлы включены в порядке. Я думаю, что компилятор не может найти файлы .c.

Функция putch является не называется в моей собственной программе, но это называется в putchar и я использую эту функцию. Функции, начинающиеся с ENC_, являются моими собственными функциями.

Я добавил два пути к «пути поиска» от XC8 ToolSuite:

  • C:\Program Files (x86)\Microchip\xc8\v1.12\sources, где .c файлы компилятора расположены, я считаю
  • C:\...\lib, где мои собственные .c файлы расположены ,

Однако, я все еще получаю сообщение об ошибке.

Как я могу решить эту проблему?

Это полный журнал:

Advisory[1233] Employing 18F4620 errata work-arounds: 
Advisory[1234] * Corrupted fast interrupt shadow registers 
Advisory[1234] * Data in RAM location can be corrupted if async. reset occurs during write 
Warning [1273] ; . Omniscient Code Generation not available in Free mode 
cgpic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -Og9s -q -E1 -w9 -PMS0:code:[email protected]=00h-0FFFFh -PMS0:code:[email protected]=00h-0FFFFh -PMS0:code:[email protected]=01000h-010FFhx240 -PMS0:code:[email protected]=01000h-0FFFFh -PMS1:data:[email protected]=01h-07Fh -PMS1:data:[email protected]=00h-0F7Fh -PMS1:data:[email protected]=01h-0F7Fh -PMS1:data:[email protected]=080h-0FFh,0100h-01FFhx14,0F00h-0F7Fh -PMS1:data:[email protected]=080h-0FFh -PMS1:data:[email protected]=0100h-01FFh -PMS1:data:[email protected]=0200h-02FFh -PMS1:data:[email protected]=0300h-03FFh -PMS1:data:[email protected]=0400h-04FFh -PMS1:data:[email protected]=0500h-05FFh -PMS1:data:[email protected]=0600h-06FFh -PMS1:data:[email protected]=0700h-07FFh -PMS1:data:[email protected]=0800h-08FFh -PMS1:data:[email protected]=0900h-09FFh -PMS1:data:[email protected]=0A00h-0AFFh -PMS1:data:[email protected]=0B00h-0BFFh -PMS1:data:[email protected]=0C00h-0CFFh -PMS1:data:[email protected]=0D00h-0DFFh -PMS1:data:[email protected]=0E00h-0EFFh -PMS1:data:[email protected]=0F00h-0F7Fh -PMS1:data:[email protected]=0F80h-0FFFh -PMS3:config:[email protected]=0300000h-030000Dh -PMS2:eedata:[email protected]=0F00000h-0F003FFh -PMS4:idloc:[email protected]=0200000h-0200007h "--cfgdata=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\cfgdata\18f4620.cfgdata" --cfgprefix=__CFG_ -MLFSROK -MIEEE_DBL -MIEEE_FLT -PPIC18F4620,1,65535,3967,8194,31,1,0,127,0 -fp -AC:\Users\...\AppData\Local\Temp\s234. --funcdat=C:\Users\...\AppData\Local\Temp\s234.5 --addrqual=ignore --runtime=init --runtime=clear server.p1 "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-plib-htc-18f4620.lpp" "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-stdlib-htc-d32-f32.lpp" 
cgpic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -q -E1 -Dserver.sdb -PMS0:code:[email protected]=00h-0FFFFh -PMS0:code:[email protected]=00h-0FFFFh -PMS0:code:[email protected]=01000h-010FFhx240 -PMS0:code:[email protected]=01000h-0FFFFh -PMS1:data:[email protected]=01h-07Fh -PMS1:data:[email protected]=00h-0F7Fh -PMS1:data:[email protected]=01h-0F7Fh -PMS1:data:[email protected]=080h-0FFh,0100h-01FFhx14,0F00h-0F7Fh -PMS1:data:[email protected]=080h-0FFh -PMS1:data:[email protected]=0100h-01FFh -PMS1:data:[email protected]=0200h-02FFh -PMS1:data:[email protected]=0300h-03FFh -PMS1:data:[email protected]=0400h-04FFh -PMS1:data:[email protected]=0500h-05FFh -PMS1:data:[email protected]=0600h-06FFh -PMS1:data:[email protected]=0700h-07FFh -PMS1:data:[email protected]=0800h-08FFh -PMS1:data:[email protected]=0900h-09FFh -PMS1:data:[email protected]=0A00h-0AFFh -PMS1:data:[email protected]=0B00h-0BFFh -PMS1:data:[email protected]=0C00h-0CFFh -PMS1:data:[email protected]=0D00h-0DFFh -PMS1:data:[email protected]=0E00h-0EFFh -PMS1:data:[email protected]=0F00h-0F7Fh -PMS1:data:[email protected]=0F80h-0FFFh -PMS3:config:[email protected]=0300000h-030000Dh -PMS2:eedata:[email protected]=0F00000h-0F003FFh -PMS4:idloc:[email protected]=0200000h-0200007h "--cfgdata=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\cfgdata\18f4620.cfgdata" --cfgprefix=__CFG_ -MLFSROK -MIEEE_DBL -MIEEE_FLT -PPIC18F4620,1,65535,3967,8194,31,1,0,127,0 -AC:\Users\...\AppData\Local\Temp\s234. --funcdat=C:\Users\...\AppData\Local\Temp\s234.5 --addrqual=ignore --runtime=init --runtime=clear server.p1 "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-plib-htc-18f4620.lpp" "C:\Program Files (x86)\Microchip\xc8\v1.12\lib\pic18-stdlib-htc-d32-f32.lpp" 
aspic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -E1 "-CC:\Program Files (x86)\Microchip\xc8\v1.12\dat\picc-18.ini" -ver=V1.12 -lserver.lst --opt= -n -18F4620 --comdiv=127 -no_pa -oserver.obj C:\Users\...\AppData\Local\Temp\s234. 
aspic18 "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" --cmode=htc -E1 "-CC:\Program Files (x86)\Microchip\xc8\v1.12\dat\picc-18.ini" -ver=V1.12 --opt= -n -18F4620 --comdiv=127 -no_pa -oC:\Users\...\AppData\Local\Temp\s234.obj C:\Users\...\AppData\Local\Temp\s234.as 
hlink "--edf=C:\Program Files (x86)\Microchip\xc8\v1.12\dat\en_msgs.txt" -cs -h+server.sym -z -w9 -Q18F4620 -Mserver.map -E1 -ver=XC8#PRO##V1.12 -ACODE=00h-0FFFFh -ACONST=00h-0FFFFh -ASMALLCONST=01000h-010FFhx240 -AMEDIUMCONST=01000h-0FFFFh -ACOMRAM=01h-07Fh -AABS1=00h-0F7Fh -ABIGRAM=01h-0F7Fh -ARAM=080h-0FFh,0100h-01FFhx14,0F00h-0F7Fh -ABANK0=080h-0FFh -ABANK1=0100h-01FFh -ABANK2=0200h-02FFh -ABANK3=0300h-03FFh -ABANK4=0400h-04FFh -ABANK5=0500h-05FFh -ABANK6=0600h-06FFh -ABANK7=0700h-07FFh -ABANK8=0800h-08FFh -ABANK9=0900h-09FFh -ABANK10=0A00h-0AFFh -ABANK11=0B00h-0BFFh -ABANK12=0C00h-0CFFh -ABANK13=0D00h-0DFFh -ABANK14=0E00h-0EFFh -ABANK15=0F00h-0F7Fh -ASFR=0F80h-0FFFh -preset_vec=00h,intcode,intcodelo,powerup,init,end_init -pramtop=01000h -psmallconst=SMALLCONST -pmediumconst=MEDIUMCONST -pconst=CONST -AFARRAM=00h-00h -ACONFIG=0300000h-030000Dh -pconfig=CONFIG -AIDLOC=0200000h-0200007h -pidloc=IDLOC -AEEDATA=0F00000h-0F003FFh -peeprom_data=EEDATA -prdata=COMRAM,nvrram=COMRError [500] ; 0. undefined symbols: 
_putch(server.obj) _ENC_Init(server.obj) _ENC_WriteRegister(server.obj) _ENC_ReadRegister(server.obj) 
AM,nvbit=COMRAM,rbss=COMRAM,rbit=COMRAM -pfarbss=FARRAM,fardata=FARRAM -pintsave_regs=BIGRAM,bigbss=BIGRAM,bigdata=BIGRAM -pbss=RAM -pidata=CODE,irdata=CODE,ibigdata=CODE,ifardata=CODE C:\Users\...\AppData\Local\Temp\s234.obj server.obj 
del l.obj 
del C:\Users\...\AppData\Local\Temp\s234. 
del C:\Users\...\AppData\Local\Temp\s234.1 
del C:\Users\...\AppData\Local\Temp\s234.2 
del C:\Users\...\AppData\Local\Temp\s234.3 
del C:\Users\...\AppData\Local\Temp\s234.4 
del C:\Users\...\AppData\Local\Temp\s234.5 
del C:\Users\...\AppData\Local\Temp\s234.as 
del C:\Users\...\AppData\Local\Temp\s234.obj 
(908) exit status = 1 

ответ

1

Глядя на post here, и консультации с Microchp XC8 users manual получается, что по крайней мере одна проблема заключается в том, что ваш источник отсутствует в putch() функции. Например, многие процедуры (например, printf()) в библиотеках Microchip полагаются на наличие функции putch() для их работы, и эта функция должна быть предоставлена ​​вами. В то время как на «обычных» компьютерах такая функция должна была печатать символ до stdout, микроконтроллеры не имеют стандартного вывода, и поэтому putch() полагается в определенном смысле «определить», что такое «стандартный» вывод. Предполагается, что функция putch() выводит один символ на некоторый выход, такой как ЖК-дисплей, последовательный, мигающий светодиод? (возможно, в коде Морзе?) или carrier pigeon. Из инструкции, стр 350:

The printf() function is a formatted output routine, operating on stdout. It relies on the putch() function to determine the destination of stdout. The putch() function must be written as part of each project, as well as code to initialize any peripherals used by this routine. A stub for putch can be found in the sources directory of the compiler.

Пишет функцию putch(), даже тот, который не делает ничего, будет решать, по крайней мере вопрос _putch быть неопределенным: оказывается, что _putch (название функции в ошибке) это всего лишь aa name-mangledputch().

Смежные вопросы