[quote="mazda"] когда вы ВСЕ ЗАГОЛОВОЧНИКИ включаете во ВСЕ ИСХОДНИКИ
я сказал не это, в главном файле я подключаю один инклюд conf.h
и в нём сначала указываю частоту потом доп настройки для таймеров, юарт и тд и потом все нужные библиотеки.
вы же видимо представили как я пихаю заголовок .h c с какими то опережающими объявлениями функций, я так вообще стараюсь не делать, за всё время работы опережающее объявление испрользовал пару раз всего
_________________ я его в гугл на дрц прогнал, вы знаете, пи-када нет.
ну вот это то самое, о чем я и говорил: вместо того, чтобы максимально избегать глобальной видимости объектов, вы делаете все объекты глобально видимыми. это не комильфо.
хорошая практика - подключать в любой сишный файл только те заголовки, которые необходимы для успешной его компиляции. если модулю sound.c (генерация звука) не нужны для компиляции сведения из bunttons.h (описания кнопок и т.п.), то в sound.c не должно быть прямо или косвенно buttons.h. в вашем случае это не так благодаря тому, что все заголовки проекта собраны в едином "общем" заголовке, который вы суете во все исходники...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Я сделал так по той причине, что указал общий инклюд и забыл. Не нужно вспоминать, какие файлы подключать. И нет простыни с расписанным списком инклюдов. А с той проблемой просто нужно разобраться в чем причина. Некогда пока разбираться. Даже если и не решу, то проблема уже обойдена и меня устраивает.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
ARV, если в первой строке программы написано include conf.h то первая его строка и будет первой строкой всей программы, если в conf.h первой строкой идёт F_CPU то его видят вообще все подключенные инклюды, область видимости макросов define - везде после него.
Если всё равно не вяжется, поставьте опцию only preprocessor, откомпильте простой проект и посмотрите что как раскрылось и куда поставилось.
Ограничивать области видимости вижу смысл только на слабых системах, что бы хоть как то ускорить компиляцию, не более того.
_________________ я его в гугл на дрц прогнал, вы знаете, пи-када нет.
тут имхо лучше отцов основателей почитать (K&R), начинающие обычно с этого начинают: 4.5. Заголовочные файлы .....
Цитата:
Существует еще один момент, о котором следует предупредить читателя, — определения и объявления совместно используются несколькими файлами. Мы бы хотели, насколько это возможно, централизовать эти объявления и определения так, чтобы для них существовала только одна копия. Тогда программу в процессе ее развития будет легче и исправлять, и поддерживать в нужном состоянии. Для этого общую информацию расположим в заголовочном файле calc.h, который будем по мере необходимости включать в другие файлы.
со времен отцов-основателей воды много утекло... интересно, как при таком подходе можно узнать, где реализована та или иная объявленная "в общем" заголовке функция? писать детальные комментарии?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
В модулях специфичные функции. Функции, которые объявлены в общем файле могут использоваться в любом модуле. Или в нескольких. sprintf вы же используете в разных модулях, и не испытываете при этом дискомфорта. Не так ли?
возможно взаимное недопонимание связано с тем что говорим о разных языках и компиляторах?
я говорю тут только про си++11 на компиляторе GCC4.5 в IDE Atmel Studio 6.2
то есть у меня в коде запись PORTB = ({int x = 6; int y = 7; x+y}); будет выполняться, это работает не на каждом си++
ещё можно например посчитать количество объектов обращаясь к ещё не созданному объекту шаблона, и потом так его и не создать и это не ошибка, и не костыль а возможность плюсов. на ней организются компайл-тайм счётчики.
_________________ я его в гугл на дрц прогнал, вы знаете, пи-када нет.
да утекло - сейчас понапридумывали иде всяких, где мышку навел - все увидал, а уж правой кнопкой даже скакнуть куда надо можно: вот раньше в консоли все как то делалось...
sprintf вы же используете в разных модулях, и не испытываете при этом дискомфорта. Не так ли?
в каждом модуле при этом я делаю #include <stdio.h>, чтобы пользоваться sprintf-ом. именно в каждом, а не в некоем "общем" для каждого, иначе независимость модуля не обеспечивается.
mazda писал(а):
ещё можно например посчитать количество объектов обращаясь к ещё не созданному объекту шаблона, и потом так его и не создать и это не ошибка, и не костыль а возможность плюсов. на ней организются компайл-тайм счётчики
ну так я давно и говорю - использование С++ в качестве мощного препроцессора. счетчиков и итераторов времени компиляции очень не хватает в "стандартном" сишном препроцессоре...
oleg110592 писал(а):
сейчас понапридумывали иде всяких, где мышку навел - все увидал, а уж правой кнопкой даже скакнуть куда надо можно
как это поможет с глобальной видимостью объектов в случае пихания всего в "общий" заголовочник? или не важно что, важно вставить словечко?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
как это поможет с глобальной видимостью объектов в случае пихания всего в "общий" заголовочник? или не важно что, важно вставить словечко?
ответ был на "как при таком подходе можно узнать, где реализована та или иная объявленная "в общем" заголовке функция?", а не "как это поможет с глобальной видимостью" - я так, например узнаЮ, как и написал, причем это работает для любой функции. На форумах обычно не "вставляют" а обмениваются опытом.
вопрос был о том, как глядя в заголовок, понять, где эта функция реализована, а не увидев реализацию этой функции в файле, наведением мыша на неё увидеть, где она описана. заголовки обычно короткие и достаточно информативные для анализа общей структуры проекта. если не поддерживать заголовки в порядке, придется анализировать проект по структуре исходников, что даже с IDE достаточно не тривиальная задача.
самый логичный способ - создавать заголовок, совпадающий по названию с модулем, но с расширением .h - тогда вопросов, к чему относится содержимое заголовка, не возникает принципиально.
логичная, с моей точки зрения, такая структура: 1. заголовок описания внешних сигналов. описаны порты и пины для общения с внешней схемой. 2. конфигурационный заголовок. описаны макросы, меняющие процесс сборки проекта, например, включающие или отключающие те или иные блоки кода и даже целиком модули. правильнее это делать при помощи возможностей makefile, но по вышеозвученным причинам я этого не умею делать. 3. пары файлов "модуль-заголовок"
в каждом модуле должно быть указано подключение тех заголовков проекта, которые необходимы для компиляции этого модуля. подключение заголовков, никак не влияющих на компиляцию модуля (типа просто до кучи) не должно осуществляться.
теоретически в моем видении проекта есть место, куда вписать F_CPU, но, так как IDE проекта уже содержит в том или ином виде это значение, я так не делаю и другим не советую - не нужно плодить сущности и тем более задваивать их.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
удалились от темы имхо - изначально вопрос был про #define F_CPU и функции _delay_us() _delay_ms() (см. название темы и первый пост), функции то стандартные, знамо - где искать. Человеку надо было помочь где обозначить #define F_CPU, каждый высказал свое мнение - можно в иде, можно в заголовке, например, если я пишу в блокноте и компилирую в командной строке - в блокнот F_CPU не вставишь. Теперь рассматриваются какие то другие функции и "как понять, где эта функция реализована". F_CPU в иде при наведении тоже видно и по F3 или правой кнопкой мышки перейти к реализации можно тоже легко:
у Чена хорошо задержки сделаны в подключаемом асм файле - там в мэйкфайле DEFS = F_CPU=16000000 (без UL почему то) оно не только компилятору Си передается а и ассемблеру: http://elm-chan.org/works/sd8p/report.html з.ы. переменные там напрямую вроде в функции можно
у Чена хорошо задержки сделаны в подключаемом асм файле
по моему мнению, при всей удивительной гениальности Чена, код из-под его рук выходит ужасным... Petit FatFS недавно внимательно изучал - ужас! никогда не посоветую никому так писать, даже если результат лучше всех!
oleg110592 писал(а):
там в мэйкфайле DEFS = F_CPU=16000000
я об этом давным давно сказал - makefile наиболее подходящее место для F_CPU, однако, если проследить его путь из makefile, то можно увидеть, что все ээто попадает на прокорм компилятору и становится доступным в исходниках при помощи директивы компилятора -D, о чем я так же давным давно сказал.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения