|
оптимизация Codevision ?, кривая она похоже... |
|
|
|
Aug 9 2005, 06:21
|
Группа: Новичок
Сообщений: 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;
Надеюсь, кому-то помог, а может быть и мне кто-то поможет - расскажет как сделать это более прямым способом.
|
|
|
|
|
 |
Ответов
(1 - 6)
|
Aug 11 2005, 04:10
|
Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 645

|
[quote=SlavaCh,Aug 10 2005, 19:59] Похоже кодевижн просто не понимает таких наворотов- я тоже долго мучался с аналогичной проблемой, но так и бросил. Не у кого спросить было. А сейсчас хочется сделать меню с такими структурами. Не подскажете поподробнее где надо явно присвоить имя функции чтоб такое прокатило? Можно кусок кода плиз?
Да тут даже примера кода не надо... Надо просто тупо, в любой функции, которая вызывается явно (хоть в main) взять и присвоить переменной-указателю на на функцию адрес "невидимой" функции.
У меня в проекте, действительно, есть система вложенных меню. При выборе конечных пунков которого, вызываются (неявно, через их адреса) обработчики. Так вот, чтобы Codevision "увидел" эти обработчики пришлось сделать такое тупое присваивание:
указатель на функцию = функция_1 указатель на функцию = функция_2 ... указатель на функцию = функция_N
С точки зрения банальной эрудиции эта террада никакого смысла не имеет ибо одной и тоже переменной последовательно присваивается некоторое количество значений... Однако помогает в борьбе с вышеназванным #### Codevision. Вот так.
|
|
|
|
|
Aug 11 2005, 04:23
|
Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 645

|
Цитата(d__ @ Aug 10 2005, 20:27) Ужоснах! И не жалко вам своих молодых лет. Нет чтобы с какой симпатичной девченкой поиметь секс, так имеете секс с южно-карпатским ремесленным поделием... Бросайте пока не поздно, не покупайтесь на его визарда, никакой серьезной работы вы на нем не сделаете... Дорогой d__! Видишь ли, в моем возрасте уже недостаточно просто секса с симпатичной девченкой  Это как раз на двадцатый смотреть "полицейскую академию" - все приколы уже в подсознании сидят... И поэтому хочется разнообразия - секса с кем-нибудь другим. В данном случае, как ты правильно заметил, с "южно-карпатским ремесленным поделием". И это было вступление. Теперь по существу: Уважаемый d__! Интуиция мне подсказывает, шо в интимных вопросах (внутреннее устройство) Codevision Вы являете экспертом. И потому, очень прошу - расскажите нам, своим менее опытным коллегам, шоже там внутри происходит и почему вы не рекомендуете использовать этот красивый с виду инструмент в серьезных проектах. Заранее благодарю за конструктив.
|
|
|
|
|
Aug 16 2005, 16:06
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548

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