Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.01.2011, 08:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
Вроде получилось.
По крайней мере CV ошибок не видит, что радует.
Может еще подскажете пару вопросов.
В добавленом файле есть функция которая использует некоторые переменные которые используются и другими функциями. Покуда все было вместе то и нормально, както понятно было, переменные были глобальными, теперь эти переменные вынесены в отдельный файл с этой функцией. Так будет работать? Как разумно сделать так чтоб эти переменные всеже остались в основном теле програмы там где main. потому как прыгать от файла к файлу чтоб видеть эти переменные не очень удобно, другими словами если добавленых файлов с различными функциями много то как красиво поступить с глобальными переменными?
И еще вопрос.
Судя по всему от заголовочных файлов избавится не выйдет, да и хрен сним. Но судя из литературы приIncludeть модно только 16 вложений, чтож не мало, а как больше приладить.
|
|
|
|
22.01.2011, 11:00
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
У CVAVR область видимости переменных обьявлений и функций глобальная. Вы можете написать обьявления функций в одном файле, список переменный в другом, тела функций в третьем а прерывания и MAIN в четвертом. Если программа достаточно сложная я всегда разношу ВСЕ участки кода по разным файлам, оставляя в основном C файле только инклюды.
К примеру
PHP код:
|
//main.c
//Ту просто список стандартных инклюдов из набора компилятора
#include‹stdincludes.h›
//тут дефайны и переменные
#include‹vars_defs.h›
//Полный каталог прототипаов функций где бы они ни встречались
#include‹prototypes.h›
//Тут функции инициализации портов и периферии
#include‹init.h›
//Сюда выносим обработчики прерываний
#include‹interrupts.h›
//тцт отработчик улавиатуры
#include‹keyboard.h›
//Драйвер экрана
#include‹ls020.h›
//Набор каких либо стандартных функций которые постоянно используются мной в разных проектах
#include‹functions.h›
//Набор функций прописанных спецом для проекта
#include‹dataharvester.h›
void main(void)
{
STARTUP();
while(1)
{ keyboardprocessor(); }
}
|
__________________
Найди путь или проложи сам!
|
|
|
|
22.01.2011, 13:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
MasterMushi
Цитата:
|
Если программа достаточно сложная я всегда разношу ВСЕ участки кода по разным файлам, оставляя в основном C файле только инклюды.
|
Именно то что и нужно.
Я писал
Цитата:
|
судя из литературы приIncludeть модно только 16 вложений, чтож не мало, а как больше приладить.
|
И вот тоже не совсем понимаю
Цитата:
|
#ifndef _file1_INCLUDED_
#define _file1_INCLUDED_
|
Заменять пробелы подчеркиваниями обязательно? Конкретно в CV
В проводнике проекта видны инклюды встроеных макросов чипа, делая и т.д., а файл который я приинклюдил не виден. Это нормально или косяк какой, имеется в виду *.h?
Сам приделаный файл "*.с" виден в проводнике
Я создал файл например peremenie.c в котором находятся все переменные, а как правильно написать peremenie.h.
С функциями все понятно пока.
Последний раз редактировалось 7Fantomas7; 22.01.2011 в 13:25.
|
|
|
|
22.01.2011, 13:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
Подчёркивания обязательны. Файл в проект CV добавляется не includ-ом .h , а Add в Project-Confige.
upd. ааа -не понял сразу ...в Именах файлов- всё как в оригинале, только без расширения
upd2. include - это просто компилятор вставляет на это место содержимое файла , который описан. Я- часто делаю так - посреди текста делаю #include ‹file.asm› , что-бы не загромождать текст ассемлеровскими вставками,компилятор просто тупо вставляет строки из файла. Так-же и с .h - можно ручками прописать. А насчет глубины вложений....я- бы посмотрел на ту программу, где требуется уровень до 16 - это в include файле - есть свой include, в том -тоже есть include ....и т.д. .....
Последний раз редактировалось OlegNZH; 22.01.2011 в 13:43.
|
|
|
|
22.01.2011, 13:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
OlegNZH,
С подчеркиваниями понял. То что файл добавляется не инклюдом а Add в Project-Confige тоже понятно. Но *.h то приинклюдивать нужно? и в проводнике проекта он не виден, хотя проблема решилась, перезагрузил проект и стал виден, может глюк какой, я думаю что на ходу должен был подхватить в проводник.
С переменными если можно подскажите.
|
|
|
|
22.01.2011, 13:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
OlegNZH,
Цитата:
|
А насчет глубины вложений....я- бы посмотрел на ту программу, где требуется уровень до 16 - это в include файле - есть свой include
|
Все понял. Просто в книжке написано весьма размыто и я понял что это не глубина, а обшее количество, в глубину мне и двух ненужно, пока.
Цитата:
|
Я- часто делаю так - посреди текста делаю #include ‹file.asm›
|
Не нужно посреди програмы. Нужно в заголовке потому как в main эти вункции используются в различных сочетаниях в зависимости от от условий, а именно от состояния переменных.
|
|
|
|
22.01.2011, 14:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
А переменные.Глобальные определяются в .h где они используются. если из другого файла-тогда в начале его нужно дать ссылку на эту переменную. extern char A.Тогда компилятор будет просматривать все .h файлы в поисках объявления этой переменной. Я обычно не раскидываю переменные по хидерам , делаю один global_var.h , и туда все скидываю, Удобно- все в одном месте.
upd. Кстати , так-же и с функциями- если в одном файле используется фунция из другого - так-же нужно обозначить этот момент - extern void func_(void) - например.Будут просмотрены все хидеры в поисках этой функции.
up2.Для функций можно и includ ещё раз использовать, по если в том хидере будет определение какой-нибудь глобальной переменной - то будет ошибка- "переопределение переменной".
Последний раз редактировалось OlegNZH; 22.01.2011 в 15:10.
|
|
|
|
22.01.2011, 15:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
|
|
|
|
22.01.2011, 15:38
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
7Fantomas7,
PHP код:
|
#ifndef _file1_INCLUDED_
#define _file1_INCLUDED_
|
Это сделано для того чтобы избежать повторных вложений. Смысл в чем
Include это комманда которая фактически делает копирование и вставку текста из другого файла в тот где эта команда прописана.
Технически после всех инклюдов у нас получается огромный единвый файл с текстом программы
Компилятор инклюдит то что ему указали и если к примеру встречается повторный инклюд чтобы избежать повторного вложения текста применяется так называемое Условное вложение
Вот в чем дело - мы пишем условный код который компилятор воспринимает как указания для себя
define - для нас это комманда которая говорит компилятору определить за каким то словом какой то текст
PHP код:
|
#define NASHE_SLOVO {kakoyto_text(); ili_kod(); ili_eshechegoto}
|
В тексте программы компилятор все слова NASHE_SLOVO заменит на тот текст который мы написали после него в одну строку.
НО. Мы можем применить "хитрость" и не писать никаких слов после NASHE_SLOVO. И получается так, что компилятор понял что гдето возможно упомянуто то что мы написали после дефайна но никакого текста на замену не назначил.
Для чего эта хитрость нужна - в нашем заголовочном файле к примеру мы должны использовать функции из другого заголовочного файла. Но мы не знаем добавили мы тот файл к тексту программы или нет. Поэтому чтобы избежать повторного вкладывания мы может спросить у компилятора - вкладывался ли файл или нет. И если вкладывался, то мы его больше не добавляем.
Пример
PHP код:
|
//Main.c
#include‹file1.h›
#include‹file2.h›
|
PHP код:
|
//File1.h
//Проверим зарезервировано ли слово file1_is_included
#ifndef file1_is_included
//и ЕСЛИ ОНО НЕ ЗАРЕЗЕРВИРОВАНО
//мы напишем дефайн который скажет компилятору то, что мы должны
//будем заменить все слова file1_is_included внутри программы
// на какойто текст. Но самого текста
//мы писать не будем. Поэтому у компилятора будет просто указание на
//какоето слово
#define file1_is_included
|
PHP код:
|
//file2
//И мы хотим использовать функции из file1 в нашем file2
//Но мы не знаем вложен это файл в текст программы или нет
//Чтобы не вкладывать тексты еще раз мы спросим у компилятора было ли где либо уже зарезервировано file1_is_included
#ifndef file1_is_included
//А так как мы это слово резервируем в file1 то мы будем четко знать уже вложен он или нет
//ifndef это то, что спрашивает компилятор ЕСЛИ НЕ ЗАРЕЗЕРВИРОВАНО ТОГДА чтото
// предпринять. И мы предпримем вложение file1.h
#include‹file1.h›
|
А подчеркивания и надписи капсом это просто так применяется чтобы пользователь не спутал свои #define с дефайнами который уже стандартно прописаны в библиотеки компилятора
__________________
Найди путь или проложи сам!
|
|
|
|
22.01.2011, 16:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: CodeVisionAVR добавление файлов в проект, прошу помочь
sdsrem,
Все хорошо и замечательно, только есть нюансы.
Я спрашивал как глобальные переменные уложить в один файл там это не описано. Согласитесь все глобальные переменные удобнее уложить в один файл и приладить его к проекту с полным описанием назначения этих переменных. В файл *.С скопировать не велика проблема и addировать в конфигураторе не проблема, а что писать в *.h который приинклюдивается или принклюдивать не нужно. Вобшем нужно переменные вынести в отдельный файл и чтоб они были видны всеми функциями.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:03.
|
|