реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Траблы с HI-TECH 18
Rusoil
сообщение Sep 23 2009, 07:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Переношу кусок проекта с 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"


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

Функции используются один раз - передается указатель на данную функцию в другой модуль.
Пробовал использовать без прототипов, просто перенес эти две функции в самое начало сишного файла и потом использовал. Таже хня.
Go to the top of the page
 
+Quote Post
testerplus
сообщение Sep 23 2009, 07:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



Не бери PRO - больше намучаешься (от недоделанный). Что хоть за "непонятные" и "немотивированные" сообщения от STD?

Сообщение отредактировал testerplus - Sep 23 2009, 07:31
Go to the top of the page
 
+Quote Post
Rusoil
сообщение Sep 23 2009, 07:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Цитата(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 - сразу все запустилось, но и тут трабл.
Go to the top of the page
 
+Quote Post
testerplus
сообщение Sep 23 2009, 08:26
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



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

Если ошибка останется, значит файл не был включен (может, какими-нибудь #ifdef'ами обходится).
Go to the top of the page
 
+Quote Post
Rusoil
сообщение Sep 23 2009, 11:17
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Поставил опять 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;
};



Думаю, может это баги МпЛаба, а не компилятора?
Более ранюю версию можно где-нить еще скачать?
Go to the top of the page
 
+Quote Post
testerplus
сообщение Sep 23 2009, 11:29
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



Особенность СТД версии: она не позволяет определять переменные в середине блока. Т.е. их можно определять только за открывающей {.

Более ранняя версия не поможет. С таким поведением компилятора придется мириться (т.е. нужно будет переписать такие фрагменты кода). Поверь на слово: переход на PRO-версию доставит гораздо больше хлопот.
Go to the top of the page
 
+Quote Post
Rusoil
сообщение Sep 23 2009, 11:44
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Спасибо за помощь. Пределал все такие места.

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

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

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)

Немного не понятно, когда компилил проект мигания светодиодами, то такого не было.
Какие настройки линкера посоветуете сделать?
Go to the top of the page
 
+Quote Post
testerplus
сообщение Sep 23 2009, 11:49
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



Стартап вставляется автоматически (его при желании можно подправлять). Линкер сейчас ругается на то, что не определена функция main() (которая как раз и вызывается из стартапа). Файл с этой функций включен в проект?

Сообщение отредактировал testerplus - Sep 23 2009, 11:49
Go to the top of the page
 
+Quote Post
Rusoil
сообщение Sep 23 2009, 12:05
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Функция майн в проекте конечно же есть.....
Go to the top of the page
 
+Quote Post
testerplus
сообщение Sep 23 2009, 12:45
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



Цитата(Rusoil @ Sep 23 2009, 16:05) *
Функция майн в проекте конечно же есть.....

Что-то я запутался в личке, не получается отправить. Пиши на testerplus

Сообщение отредактировал testerplus - Sep 23 2009, 12:55
Go to the top of the page
 
+Quote Post
Rusoil
сообщение Sep 23 2009, 14:24
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-01-09
Пользователь №: 43 695



Большое спасибо testerplus за помощь, в итоге все заработало.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 18:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016