С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/235: Рейтинг темы: голосов - 235, средняя оценка - 4.83
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
1

Отладка подключаемых файлов в AVR Studio

03.09.2010, 16:02. Просмотров 42317. Ответов 84
Метки нет (Все метки)

Добрый день товарищи.

Обращаюсь к вам за помощью.

Патыюсь отлаживать код в AVR Studyo. С кодом написанным в основном модуле проблем нет. А вот сишний код подключеный дерективой include не показывает. (

выглядет это примерно так:

Код
---- D:\AvrStudyo_Projects\temp_gsm\default/D:\AvrStudyo_Projects\temp_gsm\..\include/util/OWIHighLevelFunctions.c
288: File not found
+000004A3:   926F        PUSH      R6             Push rikystir on stack
+000004A4:   927F        PUSH      R7             Push rikystir on stack
+000004A5:   928F        PUSH      R8             Push rikystir on stack
Подскажите что делать. В АСМе смыслю мало, пишу на С.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2010, 16:02
Ответы с готовыми решениями:

Отладка в AVR Studio и EEPROM
Коллеги! Прошу помощи. Делаю программу на WinAVR + AVR Studyo 4.19 - на Си....

Не работает отладка в AVR Studio 4
Добрый день ! Подскажите пожалуйста, почему не работает пошаговая отладка ....

Китайский JTAG ICE, отладка в AVR STUDIO
Здравствуйте, прикупил себе на ebay такое чудо: Фото <Изображение удалено> ...

CAVR против AVR Studio, что не так в программе под AVR Studio
Проблема такая, есть исходник, если его компилировать в CAVR заливаю в МК все...

AVR studio, Winavr и компиляция нескольких файлов
Здравствуйте, вопрос наверное глупый, поскольку гугл по этому поводу молчит....

84
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 11:59 61
тут уже советовали, что в хидерах надо только описывать функции и переменные. чтобы ничего не переопределялось в хидерах нужно делать так
Код
#ifndef __HEADER__
#define __HEADER__
//тут текст хидера
#endif
тогда ничего переопределятся не будет. переменные нужно описывать так extern uint8_t var(это к примеру только).

ps. тему читал мельком, возможно повторил уже кого-нибудь.
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 12:07 62
Именно так хидеры и сделаны. И такой вариант нормально работает при компиляции, Но повторюсь с компиляцие проблем нет. А вот когда в студии сишник добавлется в дерево проекта, то он их компилит отдельно и тут возникают косяки. Если хидер стретился в главном модуле, то при компиляции внешнего файла он это дефайн

Код
#define __HEADER__
уже не видит, и конечно делает все повторно, и вылезает ошибка.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 12:17 63
что-то запутано у вас все слишком. я с студией мало общался. вшений файл - это файл который не в дереве проекта студии? как тогда студия его компилит?
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 12:35 64
Есть основной модуль.

Допустим в нем ведется работа с LCD. Для это у меня есть самописаня библиотека.
Еще у меня есть библиотека со стандартными моими функциями, например с функциями изменения конкретного бита. (HiPin,LowPin)

Сейчас я везде инклюжу только хидеры, они написаны таким образом что в них в конце инклюдится файл с кодом (если нужно)

Ситуацию с повторным определением обхожу просто, условными дерективами (см. на 2 поста выше).

Все отлично комплируется, прошивается и работает в железе.

Симулируется в студии все тоже на ура. НО при просмотре дизассемблированного кода возникает косяк (см первый пост).

Разбирались разбирались, пришли к выводу что нужно исходники библиотек подключать к дереву проекта, что какаято ересь с точки зрения языка С. Код становится неуниверсальным.

Ладно поплевались, поплевались, но способ вроде найден. Подключить одну библиотеку с ее исходником можно, при отладке все видно как нужно. Но вот блин косяк, Мало того что нужно перелопатить типовые библиотеки поставляемые вместе с ВинАвр, так еще неполучается ничего с прикручиванием ко всему этому третьей билблиотеки, которая участвует во всех подулях (та что с частоиспользующимися типовыми библиотеками).

Вот и возникает вопрос как жы вы отлаживает е такие вещи? Модет кто поделится своим проектиком, посмотрю может я чегото не понимаю.
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
05.09.2010, 13:04 65
Цитата Сообщение от mos80
они написаны таким образом что в них в конце инклюдится файл с кодом (если нужно)
Вот здесь твоя ошибка. Инклюдить в конце хидера не нужно, поэтому и получается, что один сишник попадается компилятору 2 раза: первый раз он его берет из списка сорцов, а второй из хидера. На это он и ругается.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 13:19 66
можно уточнить малость, что ругается линкер, а не компилер. ну это так к слову. хотя и компилер может, что-то не дошло сразу.
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
05.09.2010, 13:37 67
Цитата Сообщение от tyx
можно уточнить малость, что ругается линкер, а не компилер. ну это так к слову. хотя и компилер может, что-то не дошло сразу.
Я для краткости так обозвался, чтоб понятно было
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 14:53 68
Цитата Сообщение от lyberzon
Цитата Сообщение от mos80
они написаны таким образом что в них в конце инклюдится файл с кодом (если нужно)
Вот здесь твоя ошибка. Инклюдить в конце хидера не нужно, поэтому и получается, что один сишник попадается компилятору 2 раза: первый раз он его берет из списка сорцов, а второй из хидера. На это он и ругается.

Я же гвоорю я так делаю сейчас, сейчас у меня все так работает и в это нет никаких ошибок. Я попробовал сделать без этого, с одной библиотекой проблем нет. А вот когда появляется еще одна попавшая и туда и туда то тут уже конфликтует. Твой пример с одной библиотекой работает, а вот если добавить еще чтото то нет.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 15:21 69
надо код функций убирать из хидеров. и переменные тоже. вобще библиотеки состоят из c файла и хидера(грубо). в хидере только описание функций библиотеки и все, никакого кода и инклуда си файлов. где необходини библиотека инклудят хидер и все. компилер помещает в объектник вызов функций из библиотеки, а потом линкер связывает этот вызов с телом функции в исполняемом файле. что-то типа этого...
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 15:46 70
А что делать если это глобальная переменная? Типовые библиотеки к стати сделаны не так. Они на такое не расчитаны. Тотже delay прямо в хидере прописано тело процедуры.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 16:13 71
если переменная глобальная тогда есть ключевое слово extern. функции _delay_* описаны как static, тоесть видны только в том файле где написан их код. он не экспортируются.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 16:15 72
и к тому же функции задержки объявлены как always_inline, т.е. все подставляются в месте вызова.
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 16:30 73
Как правильно подключать библиотеку? У нее есть хидер, есть основной файл. Там где мне нужно ее подцепить я что должен указать? Я правильн понимаю что только хидер, А в студии добавить основное тело библиотеки как файл с исходником. Я правильно понял?
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 16:34 74
правильно.
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 18:10 75
А каким образом обрабатываются дефайны? Вот есть у меня например определение частоты процессора F_CPU в главном модуле (самое подходящее место), и есть библиотека, в которой используется модуль с задержками, Сеячас попробовал скомпилить, в итоге при компиляции этого модуля этот дефан компилятор не находит и потому результат будет неправильным. Как тут поступать?
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 18:26 76
вобще макроопределение можно задать в параметрах компилятору. для gcc так -DF_CPU=1000000UL. в студии возможно есть опции проекта в которых это можно задать. если так сделать то желательно в коде проверять не определено макроопределение при помощи #ifndef. у вас winavr?
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 18:28 77
можно еще создать хидер общий для всех config.h например, и инклудить его везде.
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 18:30 78
Да использую студию с ВинАвр. Проверка такая есть и какраз если не определено специально вызывается ошибка. Хорошо, F_CPU можно определить в параметрах проекта, там есть такое поле, а если я использую какието свои макраопределения? Прописывать их в ручную?
0
mos80
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 233
05.09.2010, 18:32 79
Делать общий хидер неудобно получается, прийдется перелопатить все типовые библиотеки. Наверное удобнее будет через ручные параметры, правда и не так наглядно. Хотя, надо попробовать, спасибо за совет.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
05.09.2010, 18:35 80
ничего не надо перелопачивать. просто сначала инклудим config.h, а потом хидер либы. и все. все свои определения тоже удобно в config.h положить.
0
05.09.2010, 18:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2010, 18:35

AVR Studio 6 и AVR Toolchain вопросы!
Всем доброго времени суток. Решил я написать софтинку в новой студии от...

GCC и AVR Studio 5 и AVR Studio 4.18
Доброго дня Всем! Кто может подсказать следующее - у меня установлена AVR...

Отладка микроконтроллеров AVR
Здравствуйте. Я осваиваю программирование МК серии AVR. Последние пару дней...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru