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

 
 
> оптимизация Codevision ?, кривая она похоже...
axis
сообщение Aug 9 2005, 06:21
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 645



Доброго времени суток!

Не так давно - убил три часа чтобы разобраться... да так и не нашел "прямого" решения. Может быть вы подскажете ?

Есть Codevidsion AVR 1.24.6

Есть некоторое количество глобальных функций типа:

void set_date(int param);
void set_time(int param);

Есть структура, членом которой является указатель на функцию:

flash struct _ITEM{
flash char *name;
void (*item_func)(int param); // вот этот указатель
flash struct _LIST *enter;
};


Далее идет массивчик из этих структур:

flash struct _ITEM setngs_items[]={
{"DATE",set_date,0},
{"TIME",set_time,0}
};

И шо вы думаете ?

Компилится это без проблем.
А вот при ассемблировании - "не могу найти функцию set_date".

Всю голову себе сломал. "Оказывается" этот #### Codevision так "оптимизирует". Пока он не увидит "реальное" использование функции в программе, ее код он не включит в итоговый asm-файл. В итоге - asm не может найти ссылку на идентификатор...

Решил я это тупо - завел переменную-указатель, которой явно присваиваю адреса используемых функций:

void (*func)(int);
func = set_date;
func = set_time;

Надеюсь, кому-то помог, а может быть и мне кто-то поможет - расскажет как сделать это более прямым способом.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
SlavaCh
сообщение Aug 10 2005, 13:59
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 26-01-05
Пользователь №: 2 200



Похоже кодевижн просто не понимает таких наворотов- я тоже долго мучался с аналогичной проблемой, но так и бросил. Не у кого спросить было. А сейсчас хочется сделать меню с такими структурами. Не подскажете поподробнее где надо явно присвоить имя функции чтоб такое прокатило? Можно кусок кода плиз?

PS - А еще заметил неприятную особенность кодевижна - он на неипс прерывания ставит RJMP 0 !!! То есть если случайно включить прерывание руками, не описав процедуру прерываания - программа просто будет сбрасыаться!! - Тоже целый день потратил на поиск глюка - плата сбрасывалась и все. А я думал что лезет помеха по питанию, все цепи перепаял возле сброса.
По идее надо везде ставить RETI, чтоб не было такого!
Go to the top of the page
 
+Quote Post
d__
сообщение Aug 10 2005, 14:27
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



Ужоснах! И не жалко вам своих молодых лет. Нет чтобы с какой симпатичной девченкой поиметь секс, так имеете секс с южно-карпатским ремесленным поделием... Бросайте пока не поздно, не покупайтесь на его визарда, никакой серьезной работы вы на нем не сделаете...
Go to the top of the page
 
+Quote Post
axis
сообщение Aug 11 2005, 04:10
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 645



[quote=SlavaCh,Aug 10 2005, 19:59]
Похоже кодевижн просто не понимает таких наворотов- я тоже долго мучался с аналогичной проблемой, но так и бросил. Не у кого спросить было. А сейсчас хочется сделать меню с такими структурами. Не подскажете поподробнее где надо явно присвоить имя функции чтоб такое прокатило? Можно кусок кода плиз?

Да тут даже примера кода не надо...
Надо просто тупо, в любой функции, которая вызывается явно (хоть в main)
взять и присвоить переменной-указателю на на функцию адрес "невидимой" функции.

У меня в проекте, действительно, есть система вложенных меню. При выборе конечных пунков которого, вызываются (неявно, через их адреса) обработчики. Так вот, чтобы Codevision "увидел" эти обработчики пришлось сделать такое тупое присваивание:

указатель на функцию = функция_1
указатель на функцию = функция_2
...
указатель на функцию = функция_N

С точки зрения банальной эрудиции эта террада никакого смысла не имеет ибо одной и тоже переменной последовательно присваивается некоторое количество значений... Однако помогает в борьбе с вышеназванным #### Codevision.
Вот так.
Go to the top of the page
 
+Quote Post
axis
сообщение Aug 11 2005, 04:23
Сообщение #5





Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 645



Цитата(d__ @ Aug 10 2005, 20:27)
Ужоснах! И не жалко вам своих молодых лет. Нет чтобы с какой симпатичной девченкой поиметь секс, так имеете секс с южно-карпатским ремесленным поделием... Бросайте пока не поздно, не покупайтесь на его визарда, никакой серьезной работы вы на нем не сделаете...
*


Дорогой d__!

Видишь ли, в моем возрасте уже недостаточно просто секса с симпатичной девченкой smile.gif Это как раз на двадцатый смотреть "полицейскую академию" - все приколы уже в подсознании сидят...

И поэтому хочется разнообразия - секса с кем-нибудь другим. В данном случае, как ты правильно заметил, с "южно-карпатским ремесленным поделием".

И это было вступление. Теперь по существу:

Уважаемый d__!

Интуиция мне подсказывает, шо в интимных вопросах (внутреннее устройство) Codevision Вы являете экспертом.

И потому, очень прошу - расскажите нам, своим менее опытным коллегам, шоже там внутри происходит и почему вы не рекомендуете использовать этот красивый с виду инструмент в серьезных проектах.

Заранее благодарю за конструктив.
Go to the top of the page
 
+Quote Post
arttab
сообщение Aug 11 2005, 04:24
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Эти грабли есть в любом компиляторе с оптимизацией. А не встречал кто документ про принципы оптимизации в разных прогах? По каким критериям он определяет что включатьв код, а что нет. Жить бы проще стало


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
d__
сообщение Aug 16 2005, 16:06
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



Уважаемые коллеги! Я извиняюсь за резкость выражений, но просто жаль вашего бесценного времени. Уже на протяжении 3-4х лет пытался внедрить его в повседневную практику для использования его в различных мелких поделках. Увы опыт печальный: как минимум два раза был вынужден переходить на другой компилятор прямо в середине проекта. Практика показывает: компилятор компилирует примерно 5-6 экранов исходника, после этого у него начинается судороги и конвульсии, выражающиеся в том, что он либо отказывается компилировать исходник, показывая ошибки, там где их нет, либо генерит нерабочий код. Особенно он вянет тогда, когда идет насыщенный операторами код(когда идут сложные вложенные и комплексные операторы). Хотя ИАРовский компилер тоже не подарок, но позволяет профессионально писать, используя особенности языка Ц по полной программе. Так что лучше разок помучиться и научиться работать на ИАРе, хотя там тоже есть пару глюков(они в основном торчат на уровне линкера) и спокойно работать постепенно оттачивая свои скиллы и создавая все более продвинутые продукты. И еще, с ИАРа вы без особенных проблем сможете перейти и на более продвинутые платформы (например на ARM), а с ЦВ вы никуда не перескочите...
Go to the top of the page
 
+Quote Post

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

 


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


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