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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Прозрачность программы для компилятора, Почему иногда приходится обьявлять одни и теже инклюды
Сергей Борщ
сообщение Nov 2 2007, 09:48
Сообщение #16


Гуру
******

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



Цитата(Waso @ Nov 2 2007, 12:28) *
В обоих указан инклюд, в котором находится конфликтующая ф-я. Причом она инлайновая.
Похоже этот заголовочник отлаживался в С++ режиме, а вы его пытаетесь в С использовать. Допишите перед определением функции static.

Цитата(ig_z @ Oct 30 2007, 16:37) *
1 склеим все хедеры в один
2 склеим все сишники в один
3 склеим склееное в один супер сишник
4 выкинем лишнее, оставшееся от хедеров
Получаем удовольствие 08.gif
Получаем CodeVisionAVR lol.gif


--------------------
На любой вопрос даю любой ответ
"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
VladislavS
сообщение Nov 2 2007, 17:41
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Waso @ Nov 2 2007, 12:28) *
Охранные директивы в этом хедере есть. В чем проблема?


А причем тут охранные директивы? Они нужны только чтобы при компиляции хидер только один раз включался, если вдруг хидер по каким-то причинам несколько раз подключен. В вашем случае имеется два тела инлайновой (это кстати не главное в данном случае) функции в разных модулях. Вот линкер и не может разобраться. Надо бы ограничить зону видимости этой функции. Наверное static поможет.
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Nov 4 2007, 18:52
Сообщение #18


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(Waso @ Nov 2 2007, 12:28) *
Линкер выдает такую ошибку:
Код
Error[e27]: Entry "AT91F_ADC_CfgModeReg" in module BasicWEB ( ..\BasicWEB.r79 ) redefined in module SAM7_EMAC ( ..\SAM7_EMAC.r79 )
В обоих указан инклюд, в котором находится конфликтующая ф-я. Причом она инлайновая.
#include <lib_AT91SAM7X256.h>
С АЦП я вообще не работаю. Охранные директивы в этом хедере есть. В чем проблема?


Это уже линкер обругал Ваши объектные файлы... АЦП тут вовсе непричем.

Просто у Вас скорее всего в сишных файлах и/или инклюдниках есть два объявления функции AT91F_ADC_CfgModeReg, а именно в файлах
BasicWEB.с ( или в асмовском)
и в файле:
SAM7_EMAC.c ( или в асмовском)

Да Вы и сами причину написали:
Цитата
В обоих указан инклюд, в котором находится конфликтующая ф-я. Причом она инлайновая.


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

Цитата(VladislavS @ Nov 2 2007, 20:41) *
Наверное static поможет.


либо попробовать ее в одном из файлов как extern объявить, но если она не inline-естествоенно...
мне вообще странно что inline-функция вылезла аж до линкера. biggrin.gif
Вроде бы ее тело должно просто быть подставлено в текст программы в каждой точке ее вызова и она не должна вылазить в распоряжение линкера?
Go to the top of the page
 
+Quote Post
Waso
сообщение Nov 8 2007, 11:45
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Видимо проблема в том что компилятор умничает и игнорирует директиву inline, и поскольку эти функции описаны внутри хедера (а не с-шного файла) то получается конфликт. Этот хедер писали сами атмеловцы и не предусмотрели почемуто отключение эвристики компилятора. Хотя они заботливо подменили через дефайн слово inline строкой __inline. Небольшое исправление этого дефайна устранило проблему:

Было:
#define __inline inline

Стало:
#define __inline _Pragma("inline = forced")

================================================
Еще маленький вопросик - как в редакторе ИАР табом сдвинуть сразу несколько строк?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 8 2007, 12:14
Сообщение #20


Гуру
******

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



Цитата(Waso @ Nov 8 2007, 13:45) *
Еще маленький вопросик - как в редакторе ИАР табом сдвинуть сразу несколько строк?
Как и в большинстве редакторов - выделить несколько строк и нажать таб для сдвига вправо или шифт-таб для сдвига влево.


--------------------
На любой вопрос даю любой ответ
"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
Waso
сообщение Nov 13 2007, 11:08
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Спасибо. Просто у меня после паскалевских Ctrl-Shift-K и -N (кажется) не рождается таких простых ассоциаций насчет таба. =)))

Еще вопрос - можно ли в ИАР 4.40A при пользовании J-Link запускать отладку не прошивая кристалл? Тоесть прошил я один раз и отлаживаю. Смотрю по шагам прогу. День рабочий закончился или нечаянно вышел из дебаггера, если программу не менял - не хочется зря тратить ресурс флеша при новом запуске дебаггера...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 13 2007, 12:40
Сообщение #22


Гуру
******

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



Цитата(Waso @ Nov 13 2007, 13:08) *
Еще вопрос - можно ли в ИАР 4.40A при пользовании J-Link запускать отладку не прошивая кристалл?
Project->Options->Debugger->Download поставить галочку Suppress Download. Автоматически выключится галочка Use flash loader. Когда захотите прошить снова и будете снимать Suppress Dowload - не забудьте поставить Use flash loader. А можно создать вде конфигурации - одну с прошивкой, другую без. Создавать проще всего в текстовом редакторе, скопровав и переименовав соответствующие секции в *.ewd и *.ewp


--------------------
На любой вопрос даю любой ответ
"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

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:01
Рейтинг@Mail.ru


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