Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Траблы с HI-TECH 18
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Rusoil
Переношу кусок проекта с LPC на PIC18F97J60. Для LPC писал в IAR.

Для PIC скачал MPLAB 8.36 и два компилятора hitech PRO 9.63PL2 и STD 9.51PL2.

Почитал форум и сначало начал работать в STD - тестовые мигания светодиодом прошли. Начал переносить код, полезли непонятные и ничем не мотивированные сообщения компилятора.

Сменил компилятор на PRO - все заработало, но при окончательной линковке проекта выскакивает ошибка

CODE

Error [800] ; 0. undefined symbol "_TcpClientEventListener"
Error [800] ; 0. undefined symbol "_TcpServerEventListener"


Я знаю что это за ошибка - вроде как прототип функции есть, а тела функции нет.
Но дело в том что функции есть, прототипы описаны в хедере и везде включены.

Функции используются один раз - передается указатель на данную функцию в другой модуль.
Пробовал использовать без прототипов, просто перенес эти две функции в самое начало сишного файла и потом использовал. Таже хня.
testerplus
Не бери PRO - больше намучаешься (от недоделанный). Что хоть за "непонятные" и "немотивированные" сообщения от STD?
Rusoil
Цитата(testerplus @ Sep 23 2009, 11:30) *
Не бери PRO - больше намучаешься (от недоделанный). Что хоть за "непонятные" и "немотивированные" сообщения от STD?


Типы данных переопределены через typedef

CODE
typedef char Byte;
typedef unsigned char uByte;
typedef signed char sByte;
typedef unsigned short Word;
typedef signed short sWord;
typedef unsigned long DWord;
typedef signed long sDWord;
typedef float Float;
typedef double Double;
#define Bool uByte
#define TRUE 1
#define FALSE 0


соотвественно данный хедер подключен ко всем исходникам.

В некотрых файлах STD считает новые типы данных за переменные. Т.е. есть две функции в одном файле - в одной все нормально, в другой он уже не знает что такое uByte.
Прыгал с бубном два дня, переключил на PRO - сразу все запустилось, но и тут трабл.
testerplus
Никогда не сталкивался в хайтеке с проблемами typedef'а. По типу ошибки (я так понял "missing basic type; int assumed") похоже, что этот файл не везде включен. Но раз ты говоришь, что везде, то для проверки попробуй так:
Код
#define Byte    char
#define sByte   signed char
...

Если ошибка останется, значит файл не был включен (может, какими-нибудь #ifdef'ами обходится).
Rusoil
Поставил опять STD и попробовал сделать, как Вы посоветовали. Ошибка исчезла, но заметил непонятный глюк.

Вот на такой цикл for
CODE
for( uByte i = 0; i < NUMTIMERS; i++ ) {
timer_pool[i].value = 0;
timer_pool[i].free = TRUE;
};


ругается expression syntax, но компиляция модуля проходит. Еще лезет во внешнюю отладку - у меня стоит MS VS2008.


Если переделать так, то компиляция проходит сразу
CODE

uByte i;
for( i = 0; i < NUMTIMERS; i++ ) {
timer_pool[i].value = 0;
timer_pool[i].free = TRUE;
};



Думаю, может это баги МпЛаба, а не компилятора?
Более ранюю версию можно где-нить еще скачать?
testerplus
Особенность СТД версии: она не позволяет определять переменные в середине блока. Т.е. их можно определять только за открывающей {.

Более ранняя версия не поможет. С таким поведением компилятора придется мириться (т.е. нужно будет переписать такие фрагменты кода). Поверь на слово: переход на PRO-версию доставит гораздо больше хлопот.
Rusoil
Спасибо за помощь. Пределал все такие места.

Еще вопрос. Нужно ли писать самому стартап?

Сейчас при окончательной линковке вываливает ошибку

Error [499] C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\lib\pic83sfc.lib(ramfail.obj); 0. undefined symbol: _main(C:\DOCUME~1\139D9C~1.13-\LOCALS~1\Temp\s3ts.obj)

Немного не понятно, когда компилил проект мигания светодиодами, то такого не было.
Какие настройки линкера посоветуете сделать?
testerplus
Стартап вставляется автоматически (его при желании можно подправлять). Линкер сейчас ругается на то, что не определена функция main() (которая как раз и вызывается из стартапа). Файл с этой функций включен в проект?
Rusoil
Функция майн в проекте конечно же есть.....
testerplus
Цитата(Rusoil @ Sep 23 2009, 16:05) *
Функция майн в проекте конечно же есть.....

Что-то я запутался в личке, не получается отправить. Пиши на testerplus
Rusoil
Большое спасибо testerplus за помощь, в итоге все заработало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.