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

 
 
> IAR не линкуется проект, IAR не линкуется проект
chdm
сообщение Nov 23 2009, 15:21
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 23-10-09
Пользователь №: 53 160



Здравствуйте. У меня есть такая проблема. Хочу написать простое приложение типа hello world для микроконтроллера ATmega168. При этом в проект подключаю RTOS XMK (видно не получается корректно подключить). Эта RTOS линкуется, как я понимаю статически. Я её прописал в Additional Includes. Компилятор отрабатывает, а линкер ругается:
Error[e46]: Undefined external "_Xmk_core_initialize" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkIsrSp" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkCurThread" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkKrnStatus" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkCurNext" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_Xmk_findNext" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "PAL__XMK_startIdle" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_Xmk_createThread" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error while running Linker

Подскажите пожалуйста как правильно прописать в ИАР.
Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
chdm
сообщение Nov 25 2009, 13:08
Сообщение #2





Группа: Участник
Сообщений: 13
Регистрация: 23-10-09
Пользователь №: 53 160



Спасибо за помощь. Но тут вот какая штука возникает: я добавил все эти файлы к проекту (имеется ввиду и вроде он создаёт даже r90 файлы в папке OBJ, как я понимаю это объектные файлы). Но не линкует... Пишет

Error[e46]: Undefined external "_Xmk_sysTickISR" referred in isrsystimer ( E:\atmel\Demo\Debug\Obj\isrsystimer.r90 )
........

я в isrsystimer.S объявил:

EXTERN _Xmk_sysTickISR

Если я прописываю :

#include "xmk/tmsys.h"

Тогда если посмотреть в браузере проекта, то файл isrsystimer.S включает по 2 файла tmsys.h, ну и куча других, по 2 файла. Компилятор выдаёт ошибки типа dublicate... Не подскажете в чём ошибка и как её устранить?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 25 2009, 14:10
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(chdm @ Nov 25 2009, 15:08) *
я в isrsystimer.S объявил:

EXTERN _Xmk_sysTickISR
Поиском по файлам ищите объявление этой _Xmk_sysTickISR в исходниках ОС. Весьма вероятно, что она объявлена как встраиваемая статическая С-функция и, значит, не может быть вызвана из ассемблера. И заголовочные файлы могут быть несовместимы с ассемблером. Тогда вам надо написать в С-файле "обертку" для этиой функции и вызывать из ассемблера эту обертку:
Код
#include "xmk/tmsys.h"

void _Xmk_sysTickISR_wrapper()
{
    _Xmk_sysTickISR();
}
Но есть подозрение, что достаточно (и гораздо эффективнее скомпилится) просто написать обработчик прерывания таймера на С. что-то вроде
Код
#pragma vector = TIMER0_OVF_vect
__interrupt void Xmk_sysTickISR()
{
    _Xmk_sysTickISR();
}


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
chdm
сообщение Nov 25 2009, 15:39
Сообщение #4





Группа: Участник
Сообщений: 13
Регистрация: 23-10-09
Пользователь №: 53 160



Цитата(Сергей Борщ @ Nov 25 2009, 16:10) *
void _Xmk_sysTickISR_wrapper()
{
_Xmk_sysTickISR();
}[/code]

Т.е. создать другой .с и .h файлы и с этой этой функцией?

И также я попробовал, закоментировать в ассемблеровском коде вызовы функций, но ничего не дало. Не линкуется по-прежнему:

Error[e46]: Undefined external "_Xmk_core_initialize" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkIsrSp" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkCurThread" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkKrnStatus" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )
Error[e46]: Undefined external "_xmkCurNext" referred in main ( E:\atmel\Dimmer\Demo\Debug\Obj\main.r90 )

smile3046.gif
Go to the top of the page
 
+Quote Post



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

 


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


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