[uquote="a.garkin",url="/forum/viewtopic.php?p=4534483#p4534483"]Вопрос элементарный[/uquote]
В качестве ликбеза. Вопрос. А зачем частоту определять в мейкфайле? Вроде бы это делается непосредственно в тексте обычным дефайном...
Ну и мое мнение относительно delay(). Последние лет 5 использую только свой. Точнее свои. На каждую платформу отдельно. И не миллисекундный, а микросекундный.
[uquote="OKF",url="/forum/viewtopic.php?p=4534667#p4534667"]makefile всё и строит. И частоту[/uquote]
Это не ответ. Есть функция delay() и в ней применен обычный коэффициент, позволяющий перевести аргумент в число итераций. Причем тут makefile? Я пишу свою такую функцию и у меня не возникает необходимости чего то там писать в makefile.
Вот вариант для ARM (он просто под рукой):
Вы для чего пытаетесь в мейк записать частоту?
[uquote="OKF",url="/forum/viewtopic.php?p=4534678#p4534678"]Ну вы бы посмотрели make, и зачем она, и чем она занимается...[/uquote]
Вы не поверите... Я знаю чем занимается мейк. Он управляет трансляцией. Этапы трансляции там описаны в комментарии перед самим мейком. Ни о каких литералах кода там речь не идет.
И расскажите мне, каким таким образом код может получить доступ к тексту мейка? Что это за синтаксис такой?
PS В догон. Чем занимается мейк легко узнать из мануала на среду. Там есть целый параграф на эту тему...
PPS Makefile в русском языке мужского рода.
Ну да, всё верно. Мейк передаёт параметры в опции транслятора. В которых задаётся частота и из них (этих параметров) строится длительность delay. Или нет?
Я тут чуток подбухнул, поэтому могут быть неточности.( Извиняюсь.
Через командную строку компилятора можно передать препроцессору предопределённые символы. Таким образом, имея несколько конфигураций сборки, мы можем сообщить коду какая из них собирается. Если вариантами сбоки управляет makefile, то в нём эти ключи и прописываются.
Только вот передать можно только факт определения символа, без значения.
Последний раз редактировалось VladislavS Вс янв 28, 2024 09:18:38, всего редактировалось 1 раз.
Почему не очень? Конфигурации сборки задаются в свойствах проекта. Не править же каждый раз руками код, если надо собрать конкретную конфигурацию. При управлении проектом через makefile всё в нём и задаётся.
Мы говорим конкретно о частоте осциллятора. Поскольку изменение частоты требует правки в разных частях кода, то наиболее логично вынести определение в хедер. Ну и подобное управление через мейкфайл полагаю идиотским на том основании, что код должен быть самодостаточным по максимуму. Делать его зависимым от ключей компиляции - значит создавать проблемы с переносимостью и сопровождением.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536114#p4536114"]Мы говорим конкретно о частоте осциллятора. Поскольку изменение частоты требует правки в разных частях кода, то наиболее логично вынести определение в хедер.[/uquote]И каждый раз его править? Вместо того чтобы просто собрать конфигурацию с нужным кварцем.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536114#p4536114"]Ну и подобное управление через мейкфайл полагаю идиотским на том основании, что код должен быть самодостаточным по максимуму.[/uquote]Складывается впечатление, что вы никогда не использовали конфигурации проекта, например, для сборки отладочной версии. Как кроме передачи определений препроцессора сказать коду, что в отладочной версии он что-то должен по другому делать? Вот, например, одним махом включается вывод всей отладочной информации.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536114#p4536114"]Делать его зависимым от ключей компиляции - значит создавать проблемы с переносимостью и сопровождением.[/uquote]Не видел ни одной IDE, в которой бы нельзя было определить символы препроцессору.
IAR:
Keil:
Visual Studio:
И, наконец, makefile:
Итого: проект собирается тремя разыми компиляторами (IAR, ARMCompiler и GCC) в трёх разных IDE и просто make. Никаких проблем переносимости и никаких правок исходного кода. Так что, вылезайте из танка, программируйте повзрослому. Спойлер
Все о чем вы говорите, мне известно. Ничего нового. Такое ощущение, что вы не желаете понять собеседника.
Переносимость и поддержка подразумевает возможность ДРУГОГО человека разобрать ваш код и продолжить работу с ним.
Якобы "взрослые" изыски делают этот процесс зависимым от квалификации этого другого человека.
И таки я не программист, а радиоинженер. И создавать себе и другим проблемы полагаю глупым.
Ну и по теме. Ничто не мешает автору вопроса просто определить литерал дефайном.
И библиотеки тут вообще не причем. Мейк ничего сверх дефайна не даст.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536140#p4536140"]И таки я не программист, а радиоинженер.[/uquote]Именно поэтому не стоит делать заключения какой способ "идиотский", а какой нет, придумывать проблемы переносимости и каких-то мифических других людей. Выбрать конфигурацию в свойствах проекта нормально, править для этого исходники - зашквар.
Все с точностью до наоборот. Правят не код. Правят хедер. А точнее - просто управляют минимальным списком дефайнов.
В отличии от настроек среды или компилятора, хедер является частью проекта. Он читаем и адекватен. В отличии от.
Я беру исходник чужого проекта и он мне должен быть понятен и самодостаточен. Тогда нет необходимости таскать повсюду настройки среды в виде мейка. Достаточно только исходного текста.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536198#p4536198"]Все с точностью до наоборот.[/uquote]Ну разве что у радиоинженеров.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536198#p4536198"]Правят не код. Правят хедер.[/uquote]В заголовочном файле не код? Вот это новость.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536198#p4536198"]А точнее - просто управляют минимальным списком дефайнов.[/uquote]Вот первый попавшийся очень простой проект открыл. В нём 6 единиц трансляции и порядка 50 заголовочных файлов, не считая стандартных. И заголовочные файлы содержат примерно 80% кода. В каком из них искать заветный дефайн? В настройках проекта всё в одном месте.Спойлер
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536198#p4536198"]В отличии от настроек среды или компилятора, хедер является частью проекта.[/uquote]Ещё одна новость. Если в программе больше одной единицы трансляции, то проект просто обязан содержать информацию как его собрать: список файлов, линкерскрипт, настройки компилятора, пути поиска подключаемых файлов и т.д. Иначе не только тот мифический другой человек, но и вы сами не сможете его собрать. Вот что такое проект.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536198#p4536198"]Он читаем и адекватен. В отличии от.[/uquote]Хорошая шутка, особенно если код чужой. Вот вам пример кода одного из заголовочных файлов. Надеюсь, всё поймёте Спойлер
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536198#p4536198"]Я беру исходник чужого проекта и он мне должен быть понятен и самодостаточен. Тогда нет необходимости таскать повсюду настройки среды в виде мейка. Достаточно только исходного текста.[/uquote]Так не бывает. Не сможете вы его скомпилировать без настроек.
Спойлер
Это все пустой разговор для дилетантов. Обозначить хедер с настройками элементарно. Это main.h
И не нужно ничего искать. Прямо в его начале список всех опций проекта.
И чем провинился кварц? У меня список этих опций строк на 50. И каждой строке нужен коммент на пару строк. Иначе потом не разберешься. Мне эти комменты в мейк писать? Зачем? Чтобы какой то сторонний программер, который никогда не получит этот код по совершенно техническим причинам получил внутреннее удовлетворение?
Не катит, извините.
ЗЫ. И не нужно про плюсы. Мы люди простые. Нам достаточно чистого Си. Особенно для радиотехнических проектов.
[uquote="VladislavS",url="/forum/viewtopic.php?p=4536222#p4536222"]Не сможете вы его скомпилировать без настроек.[/uquote]
Конечно не смогу. Если код подразумевает эти настройки.
А если не подразумевает, то смогу.
Осталось задать логичный вопрос. Кто писал такой код? С настройками кода в мейке...
Добавлено after 3 minutes 28 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4536250#p4536250"]значит ему надо.[/uquote]
Ему только так кажется. А есть гораздо более естественный путь.
Добавлено after 2 minutes 15 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536252#p4536252"]Осталось задать логичный вопрос. Кто писал такой код? С настройками кода в мейке...[/uquote]Остаётся задать логичный вопрос. Вы писали что-нибудь сложнее "Hello world"?
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536252#p4536252"]Ему только так кажется. А есть гораздо более естественный путь.[/uquote]Кто вас уполномочил это решать?
Добавлено after 30 minutes 48 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4536252#p4536252"]А если не подразумевает, то смогу.[/uquote]Посмотрел лог, вот сколько параметров Visual Studio передаёт компилятору. И это ещё лайтовенько, без директив препроцессора. Все они из настроек проекта взяты. Имея только исходники ой как долго вы будете собирать...
А ещё такую же пачку, если не больше, линкеру.