MPLAB X IDE

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="a.garkin",url="/forum/viewtopic.php?p=4534483#p4534483"]Вопрос элементарный[/uquote]
В качестве ликбеза. Вопрос. А зачем частоту определять в мейкфайле? Вроде бы это делается непосредственно в тексте обычным дефайном...
Ну и мое мнение относительно delay(). Последние лет 5 использую только свой. Точнее свои. На каждую платформу отдельно. И не миллисекундный, а микросекундный.
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1454
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Так как раз makefile всё и строит. И частоту, и опции, и мк, и программатор... ну как же ж...? Удивительно.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="OKF",url="/forum/viewtopic.php?p=4534667#p4534667"]makefile всё и строит. И частоту[/uquote]
Это не ответ. Есть функция delay() и в ней применен обычный коэффициент, позволяющий перевести аргумент в число итераций. Причем тут makefile? Я пишу свою такую функцию и у меня не возникает необходимости чего то там писать в makefile.
Вот вариант для ARM (он просто под рукой):

Код: Выделить всё

#define SYSTEM_CORE_CLOCK 	240000000	// core=240MHz
...................
...................
void delay_us (uint32_t us)
{
	volatile uint32_t delay = (us * (SYSTEM_CORE_CLOCK / 1000000) / 4);
	while (delay--);
}
OKF
Это не хвост, это антенна
Сообщения: 1454
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Ну причём здесь delay. Ну вы бы посмотрели make, и зачем она, и чем она занимается...
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Вы для чего пытаетесь в мейк записать частоту?
[uquote="OKF",url="/forum/viewtopic.php?p=4534678#p4534678"]Ну вы бы посмотрели make, и зачем она, и чем она занимается...[/uquote]
Вы не поверите... Я знаю чем занимается мейк. Он управляет трансляцией. Этапы трансляции там описаны в комментарии перед самим мейком. Ни о каких литералах кода там речь не идет.
И расскажите мне, каким таким образом код может получить доступ к тексту мейка? Что это за синтаксис такой?
PS В догон. Чем занимается мейк легко узнать из мануала на среду. Там есть целый параграф на эту тему... :wink:
PPS Makefile в русском языке мужского рода. :)
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1454
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Ну да, всё верно. Мейк передаёт параметры в опции транслятора. В которых задаётся частота и из них (этих параметров) строится длительность delay. Или нет?
Я тут чуток подбухнул, поэтому могут быть неточности.( Извиняюсь.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Частота никакого отношения к опциям транслятора не имеет. Она задается в симуляторе, но это совсем другая история.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Через командную строку компилятора можно передать препроцессору предопределённые символы. Таким образом, имея несколько конфигураций сборки, мы можем сообщить коду какая из них собирается. Если вариантами сбоки управляет makefile, то в нём эти ключи и прописываются.

Только вот передать можно только факт определения символа, без значения.
Последний раз редактировалось VladislavS Вс янв 28, 2024 09:18:38, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Все так, только передавать дефайны таким перректальным способом как то не очень.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Почему не очень? Конфигурации сборки задаются в свойствах проекта. Не править же каждый раз руками код, если надо собрать конкретную конфигурацию. При управлении проектом через makefile всё в нём и задаётся.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Мы говорим конкретно о частоте осциллятора. Поскольку изменение частоты требует правки в разных частях кода, то наиболее логично вынести определение в хедер. Ну и подобное управление через мейкфайл полагаю идиотским на том основании, что код должен быть самодостаточным по максимуму. Делать его зависимым от ключей компиляции - значит создавать проблемы с переносимостью и сопровождением.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[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:

Код: Выделить всё

PREPROCESSOR_MACROS += __DEBUG_SRAM__ __RTT_ENABLE__
 
C_FLAGS += -g -gdwarf-2 -ggdb
CPP_FLAGS += -g -gdwarf-2 -ggdb
LINKER_SCRIPT := ../LinkerScripts/GCC/STM32F303CB_sram_ccm.lds
Итого: проект собирается тремя разыми компиляторами (IAR, ARMCompiler и GCC) в трёх разных IDE и просто make. Никаких проблем переносимости и никаких правок исходного кода. Так что, вылезайте из танка, программируйте повзрослому.
Спойлер
изображение_2024-01-28_110329529.png
(20.5 КБ) 663 скачивания
изображение_2024-01-28_110950315.png
(16.88 КБ) 665 скачиваний
изображение_2024-01-28_111443917.png
(13.29 КБ) 664 скачивания
изображение_2024-01-28_111906985.png
(8.6 КБ) 644 скачивания
изображение_2024-01-28_112139090.png
(18.55 КБ) 656 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Все о чем вы говорите, мне известно. Ничего нового. Такое ощущение, что вы не желаете понять собеседника.
Переносимость и поддержка подразумевает возможность ДРУГОГО человека разобрать ваш код и продолжить работу с ним.
Якобы "взрослые" изыски делают этот процесс зависимым от квалификации этого другого человека.
И таки я не программист, а радиоинженер. И создавать себе и другим проблемы полагаю глупым.
Ну и по теме. Ничто не мешает автору вопроса просто определить литерал дефайном.
И библиотеки тут вообще не причем. Мейк ничего сверх дефайна не даст.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4536140#p4536140"]И таки я не программист, а радиоинженер.[/uquote]Именно поэтому не стоит делать заключения какой способ "идиотский", а какой нет, придумывать проблемы переносимости и каких-то мифических других людей. Выбрать конфигурацию в свойствах проекта нормально, править для этого исходники - зашквар.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Все с точностью до наоборот. Правят не код. Правят хедер. А точнее - просто управляют минимальным списком дефайнов.
В отличии от настроек среды или компилятора, хедер является частью проекта. Он читаем и адекватен. В отличии от.
Я беру исходник чужого проекта и он мне должен быть понятен и самодостаточен. Тогда нет необходимости таскать повсюду настройки среды в виде мейка. Достаточно только исходного текста.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[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]Так не бывает. Не сможете вы его скомпилировать без настроек.
Спойлер
изображение_2024-01-28_155720133.png
(37.4 КБ) 419 скачиваний
изображение_2024-01-28_155840752.png
(27.38 КБ) 418 скачиваний
изображение_2024-01-28_161905454.png
(30.78 КБ) 431 скачивание
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Это все пустой разговор для дилетантов. Обозначить хедер с настройками элементарно. Это main.h
И не нужно ничего искать. Прямо в его начале список всех опций проекта.
И чем провинился кварц? У меня список этих опций строк на 50. И каждой строке нужен коммент на пару строк. Иначе потом не разберешься. Мне эти комменты в мейк писать? Зачем? Чтобы какой то сторонний программер, который никогда не получит этот код по совершенно техническим причинам получил внутреннее удовлетворение?
Не катит, извините.
ЗЫ. И не нужно про плюсы. Мы люди простые. Нам достаточно чистого Си. Особенно для радиотехнических проектов.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Почему вы за других решаете надо или нет? a.garkin спрашивал КАК сделать, значит ему надо.

ЗЫ: Я что-то писал про плюсы?
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[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]
Ему только так кажется. А есть гораздо более естественный путь.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

a.garkin, вот так получается передать параметр у GCC. Умеет ли так ваш компилятор не знаю.

Код: Выделить всё

PREPROCESSOR_MACROS += TEST=100
CFLAGS = $(addprefix -D,$(PREPROCESSOR_MACROS))
Вот это в коде как true срабатывает

Код: Выделить всё

if (TEST == 100) { ... }
Добавлено 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 передаёт компилятору. И это ещё лайтовенько, без директив препроцессора. Все они из настроек проекта взяты. Имея только исходники ой как долго вы будете собирать...
Изображение
А ещё такую же пачку, если не больше, линкеру.
изображение_2024-01-28_183445378.png
(9.8 КБ) 573 скачивания
Ответить

Вернуться в «PIC»