Перейти к содержанию
    

MPLAB C30, IDE и библиотеки

Добрый день,

Пытаюсь использовать микрочиповские библиотеки перифирии. Среда MPLAB IDE 8.66, компилятор С30 3.25, pic24hj502gp. Добавляю в проект нужный файл библиотеки, и нужный заголовочный файл в <include>.

Компиляция проходит, но линкер не видит ни одной функции, вызываемой из библиотеки. Попытка явно прописать пути к библиотечным файлам в build options к результату не приводит. Что делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день,

Пытаюсь использовать микрочиповские библиотеки перифирии. Среда MPLAB IDE 8.66, компилятор С30 3.25, pic24hj502gp. Добавляю в проект нужный файл библиотеки, и нужный заголовочный файл в <include>.

Компиляция проходит, но линкер не видит ни одной функции, вызываемой из библиотеки. Попытка явно прописать пути к библиотечным файлам в build options к результату не приводит. Что делать?

 

Не имея Вашего проекта, так прямо и не понять что у Вас не так. Проще всего, можете скачать какой нить демонстрационный проект для PIC24 (с сайта Microchip), с использованием периферийной библиотеки и изменить его под ваши цели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проект простейший, в нем только один мой исходник .с, заголовочный файл контроллера, заголовочный файл библиотеки, скрипт линкера для контроллера (не модифицировал) и сама библиотека.

Если не пытаться использовать библиотечные функции, всё работает нормально.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проект простейший, в нем только один мой исходник .с, заголовочный файл контроллера, заголовочный файл библиотеки, скрипт линкера для контроллера (не модифицировал) и сама библиотека.

Если не пытаться использовать библиотечные функции, всё работает нормально.

 

Вы хотя-бы привели лог компилятора - линкера. Может "кто нить - ченить подскажет".

А то тайны мадридского двора прямо :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё раз собрал с нуля проект. В нём следующие файлы:

1) start.c - мой исходник

2)xlcd_my.h - модифицированный под мой контроллер заголовочный библиотеки. Изменены только назначения пинов.

3)p24hj64gp502.h

4)libp24hj64gp502-coff.a - сама библиотека

5)p24hj64gp502.gld - скрипт линкера.

 

Выдача компилера\линкера:

 

..\start\start.c: In function 'main':

..\start\start.c:29: warning: unused variable 'chAstate'

..\start\start.c: In function '_T1Interrupt':

..\start\start.c:110: warning: PSV model not specified for '_T1Interrupt';

assuming 'auto_psv' this may affect latency

..\start\start.c: In function '_SPI1Interrupt':

..\start\start.c:150: warning: PSV model not specified for '_SPI1Interrupt';

assuming 'auto_psv' this may affect latency

Executing: "C:\Program Files\Microchip\mplabc30\v3.25\bin\pic30-gcc.exe" -mcpu=24HJ64GP502 "start.o" "C:\Program Files\Microchip\mplabc30\v3.25\lib\PIC24H\libp24HJ64GP502-coff.a" -o"my.cof" -Wl,--script="..\..\Program Files\Microchip\mplabc30\v3.25\support\PIC24H\gld\p24HJ64GP502.gld",--defsym=__MPLAB_BUILD=1,--defsym=__MPLAB_DEBUG=1,-Map="my.map",--report-mem

Microchip MPLAB C30 License Manager Version v3_25 (Build Date Oct 11 2010).

Copyright © 2008 Microchip Technology Inc. All rights reserved.

The MPLAB C30 license has expired.

Options have been disabled due to expired license

Visit http://www.microchip.com/ to purchase a new key.

 

 

Program Memory [Origin = 0x200, Length = 0xaa00]

 

section address length (PC units) length (bytes) (dec)

------- ------- ----------------- --------------------

.text 0x200 0x90 0xd8 (216)

.const 0x290 0x18 0x24 (36)

.text 0x2a8 0x180 0x240 (576)

.dinit 0x428 0x8 0xc (12)

.isr 0x430 0x2 0x3 (3)

 

Total program memory used (bytes): 0x34b (843) 1%

 

 

Data Memory [Origin = 0x800, Length = 0x2000]

 

section address alignment gaps total length (dec)

------- ------- -------------- -------------------

.nbss 0x800 0 0x8 (8)

 

Total data memory used (bytes): 0x8 (8) <1%

 

 

Dynamic Memory Usage

 

region address maximum length (dec)

------ ------- ---------------------

heap 0 0 (0)

stack 0x808 0x1ff8 (8184)

 

Maximum dynamic memory (bytes): 0x1ff8 (8184)

 

start.o(.text+0xba): In function `main':

C:\a\my_prj\..\start\start.c:95: undefined reference to `OpenXLCD'

start.o(.text+0xbe):C:\a\my_prj\..\start\start.c:96: undefined reference to `WriteCmdXLCD'

start.o(.text+0xc2):C:\a\my_prj\..\start\start.c:97: undefined reference to `putsXLCD'

start.o(.text+0xc6):C:\a\my_prj\..\start\start.c:98: undefined reference to `SetDDRamAddr'

start.o(.text+0xca):C:\a\my_prj\..\start\start.c:99: undefined reference to `putsXLCD'

Link step failed.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё раз собрал с нуля проект. В нём следующие файлы:

1) start.c - мой исходник

2)xlcd_my.h - модифицированный под мой контроллер заголовочный библиотеки. Изменены только назначения пинов.

3)p24hj64gp502.h

4)libp24hj64gp502-coff.a - сама библиотека

5)p24hj64gp502.gld - скрипт линкера.

 

start.o(.text+0xba): In function `main':

C:\a\my_prj\..\start\start.c:95: undefined reference to `OpenXLCD'

start.o(.text+0xbe):C:\a\my_prj\..\start\start.c:96: undefined reference to `WriteCmdXLCD'

start.o(.text+0xc2):C:\a\my_prj\..\start\start.c:97: undefined reference to `putsXLCD'

start.o(.text+0xc6):C:\a\my_prj\..\start\start.c:98: undefined reference to `SetDDRamAddr'

start.o(.text+0xca):C:\a\my_prj\..\start\start.c:99: undefined reference to `putsXLCD'

Link step failed.

 

А похоже для Вашего контроллера этот модуль в библиотеке отсутствует.

Попробуйте любым вьюветом посмотреть файл *-coff.a- для 506 - есть а для 502 функции отсутствуют (о чем честно сообщает линкер).

Объяснения не нашел.

Просто добавте в проект файлы из ...\src\peripheral_30F_24H_33F\src\pmc\xlcd\

и скомпилируйте с ними (может придется их подшаманить).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо, и кстати стала понятна логика микрочипа - по умолчанию заголовочный фаил подразумевает управление LCD через порт D, которого нет в 28 и 44-ногих моделях, поэтому в библиотеку для 502 и 504 модели эти функции не включены, а для 506 уже есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...