Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компиляция исходника в "неродном" компиляторе
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Edge
Компиляция исходника в неродном компиляторе приводит к ошибкам, зачастую к множеству ошибок (в зависимости от выбранного компилятора)...
Родной компилятор не раздобыть никак, да и устаревший больно (99г)
Что проще, не заморачиваясь на вылавливание различий в синтаксисе написать всё по-новой, или всё-таки попробовать перелопатить старое?
Контроллер 90S2313 обмен по I2C с ЕЕПРОМ 24С16...исходник на С.
vet
Проще поправить уже имеющееся. Отличий в синтаксисе компиляторов одного языка - не так уж и много.
d71
а по мне так лучше переписать, частенько я не изобретаю колесо, а собираю проект из чужих кусочков проектов...

если иар и обмен по и2с с памятью, могу дать готовый набор костей, проверен и просто копируется из проекта в проект
defunct
Цитата(d71 @ Feb 27 2006, 04:48) *
а по мне так лучше переписать, частенько я не изобретаю колесо, а собираю проект из чужих кусочков проектов...

различий между компилятором 99г. и нынешним будет разве что в объявлениях прерываний и может быть еще в объявлениях портов, такую правку изобретением колеса назвать нельзя, imho все-таки проще подправить имеющиеся исходники.
d71
я имел ввиду логику, иногда ну так сложно разбираться в чужом sad.gif
скажем не изобретая колеса, перекрасить велосипед. о
beer_warrior
80% проблем решиться при подключении правильных заголовочных
файлов
и по 10% на переобъявление с новым синтаксисом прерывапий
и флэшовых констант.
основные проблемы будут как раз со всякими указателями на
флэш и операциями с ними.
Edge
Количество ошибок в CV зашкаливает за 250... в ICC поменьше
Такие вот обороты приводят компиляторы в ступор-

#define COL1P PORTD-32,0
#define COL1D DDRD-32,0
...
...
(пропущенны строки)
void Mux(void)
{
setbit(COL1P);
setbit(COL1D);
MuxLo();
clrbit(COL1D);
clrbit(COL1P);

Написать всё по-новой мне ещё неподсилу...
vet
Цитата(Edge @ Feb 27 2006, 23:16) *
Количество ошибок в CV зашкаливает за 250... в ICC поменьше

Ну и ничего страшного, это в массе своей одни и те же ошибки.
Цитата(Edge @ Feb 27 2006, 23:16) *
Такие вот обороты приводят компиляторы в ступор-

#define COL1P PORTD-32,0
#define COL1D DDRD-32,0
...
...
(пропущенны строки)
void Mux(void)
{
setbit(COL1P);
setbit(COL1D);
MuxLo();
clrbit(COL1D);
clrbit(COL1P);

Меняем (для CodeVision):

setbit(COL1P); на PORTD.0 = 1;
clrbit(COL1P); на PORTD.0 = 0;
setbit(COL1D); на DDRD.0 = 1;
clrbit(COL1D); на DDRD.0 = 0;

Всё, в общем-то, очевидно.
Edge
Да, спасибо теперь это и мне стало очевидно.... smile.gif
Новая напасть

register UCHAR Colour1;
register UCHAR Colour2;
register UCHAR Colour3;
register UCHAR Colour4;
register UINT TblPtr; /* 'pointer' into control data table */
register UINT TblPtr0; /* 'pointer' into control data table main routine */
register UCHAR LastDelay; /* last delay value */
register UCHAR LoopCnt; /* loop counter */
register UINT LoopStart; /* 'pointer' to loop start */
register UINT I2cAddr; /* I2C read address */
register UCHAR sp; /* 'stack pointer', index into Stack */
register UINT Stack[4]; /* 'subroutine' stack */
register UINT Subs[20]

Немогу понять чему это будет соответствовать в современном компиляторе...
defunct
Цитата(Edge @ Feb 28 2006, 23:43) *
Немогу понять чему это будет соответствовать в современном компиляторе...


register скорее всего - volatile (хотя может быть и __regvar) сложно сказать надо смотреть по контексту.
остальное:

#define UCHAR unsigned char
#define UINT unsigned int
vet
Edge
в CodeVision register при глобальной переменной размещает её в регистрах R2-R14. В остальных случаях этот модификатор игнорируется.
Если не мешает - оставьте, как есть.
Edge
Спасибо всем за помощь.
Вообщем понемногу продираюсь, но на самом деле не всё так просто...
К примеру
setbit(COL1P);
setbit(COL1D);
MuxLo();
clrbit(COL1D);
clrbit(COL1P);
Казалось бы очевидно...если бы не хедер
#define setbit(address, bit) asm { /* Macro to set a I/O bit */\
SBI address-$20,bit\
}
#define clrbit(address, bit) asm { /* Macro to clear an I/O bit */\
CBI address-$20,bit\
}
... smile.gif
И со всем остальным не так всё легко...
Да оно и понятно сложно давать какие-либо рекомендации по кускам вырванным из контекста...
Но всё равно спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.