Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 22.01.2011, 08:02  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

Вроде получилось.
По крайней мере CV ошибок не видит, что радует.
Может еще подскажете пару вопросов.
В добавленом файле есть функция которая использует некоторые переменные которые используются и другими функциями. Покуда все было вместе то и нормально, както понятно было, переменные были глобальными, теперь эти переменные вынесены в отдельный файл с этой функцией. Так будет работать? Как разумно сделать так чтоб эти переменные всеже остались в основном теле програмы там где main. потому как прыгать от файла к файлу чтоб видеть эти переменные не очень удобно, другими словами если добавленых файлов с различными функциями много то как красиво поступить с глобальными переменными?
И еще вопрос.
Судя по всему от заголовочных файлов избавится не выйдет, да и хрен сним. Но судя из литературы приIncludeть модно только 16 вложений, чтож не мало, а как больше приладить.
Реклама:
7Fantomas7 вне форума  
Непрочитано 22.01.2011, 11:00  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию 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();  }

__________________
Найди путь или проложи сам!
MasterMushi вне форума  
Непрочитано 22.01.2011, 13:10  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

MasterMushi
Цитата:
Если программа достаточно сложная я всегда разношу ВСЕ участки кода по разным файлам, оставляя в основном C файле только инклюды.
Именно то что и нужно.
Я писал
Цитата:
судя из литературы приIncludeть модно только 16 вложений, чтож не мало, а как больше приладить.
И вот тоже не совсем понимаю
Цитата:
#ifndef _file1_INCLUDED_
#define _file1_INCLUDED_
Заменять пробелы подчеркиваниями обязательно? Конкретно в CV
В проводнике проекта видны инклюды встроеных макросов чипа, делая и т.д., а файл который я приинклюдил не виден. Это нормально или косяк какой, имеется в виду *.h?
Сам приделаный файл "*.с" виден в проводнике
Я создал файл например peremenie.c в котором находятся все переменные, а как правильно написать peremenie.h.
С функциями все понятно пока.

Последний раз редактировалось 7Fantomas7; 22.01.2011 в 13:25.
7Fantomas7 вне форума  
Непрочитано 22.01.2011, 13:21  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию 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.
OlegNZH вне форума  
Непрочитано 22.01.2011, 13:37  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

OlegNZH,
С подчеркиваниями понял. То что файл добавляется не инклюдом а Add в Project-Confige тоже понятно. Но *.h то приинклюдивать нужно? и в проводнике проекта он не виден, хотя проблема решилась, перезагрузил проект и стал виден, может глюк какой, я думаю что на ходу должен был подхватить в проводник.
С переменными если можно подскажите.
7Fantomas7 вне форума  
Непрочитано 22.01.2011, 13:59  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

OlegNZH,
Цитата:
А насчет глубины вложений....я- бы посмотрел на ту программу, где требуется уровень до 16 - это в include файле - есть свой include
Все понял. Просто в книжке написано весьма размыто и я понял что это не глубина, а обшее количество, в глубину мне и двух ненужно, пока.
Цитата:
Я- часто делаю так - посреди текста делаю #include ‹file.asm›
Не нужно посреди програмы. Нужно в заголовке потому как в main эти вункции используются в различных сочетаниях в зависимости от от условий, а именно от состояния переменных.
7Fantomas7 вне форума  
Непрочитано 22.01.2011, 14:47  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

А переменные.Глобальные определяются в .h где они используются. если из другого файла-тогда в начале его нужно дать ссылку на эту переменную. extern char A.Тогда компилятор будет просматривать все .h файлы в поисках объявления этой переменной. Я обычно не раскидываю переменные по хидерам , делаю один global_var.h , и туда все скидываю, Удобно- все в одном месте.
upd. Кстати , так-же и с функциями- если в одном файле используется фунция из другого - так-же нужно обозначить этот момент - extern void func_(void) - например.Будут просмотрены все хидеры в поисках этой функции.
up2.Для функций можно и includ ещё раз использовать, по если в том хидере будет определение какой-нибудь глобальной переменной - то будет ошибка- "переопределение переменной".

Последний раз редактировалось OlegNZH; 22.01.2011 в 15:10.
OlegNZH вне форума  
Непрочитано 22.01.2011, 15:23  
sdsrem
Почётный гражданин KAZUS.RU
 
Аватар для sdsrem
 
Регистрация: 08.09.2009
Сообщений: 1,139
Сказал спасибо: 138
Сказали Спасибо 366 раз(а) в 230 сообщении(ях)
sdsrem на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

Может сдесь понятней будет что и как.

http://chipenable.ru/index.php/progr...1-lcd-avr.html
sdsrem вне форума  
Непрочитано 22.01.2011, 15:38  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию 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 с дефайнами который уже стандартно прописаны в библиотеки компилятора
__________________
Найди путь или проложи сам!
MasterMushi вне форума  
Непрочитано 22.01.2011, 16:30  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: CodeVisionAVR добавление файлов в проект, прошу помочь

sdsrem,
Все хорошо и замечательно, только есть нюансы.
Я спрашивал как глобальные переменные уложить в один файл там это не описано. Согласитесь все глобальные переменные удобнее уложить в один файл и приладить его к проекту с полным описанием назначения этих переменных. В файл *.С скопировать не велика проблема и addировать в конфигураторе не проблема, а что писать в *.h который приинклюдивается или принклюдивать не нужно. Вобшем нужно переменные вынести в отдельный файл и чтоб они были видны всеми функциями.
7Fantomas7 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помочь в поисках схемы DVD рекодера Grundig GDR 5500 sergeyaf Поиск схем. Делимся схемами 6 30.07.2018 20:09
if с условием прошу помочь 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 5 12.11.2010 13:18
AT Mega8 вольтметр прошу помочь 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 47 23.05.2010 16:16


Часовой пояс GMT +4, время: 01:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot