Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сделать сделать константу "время копиляции" в программе?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
inventor
задача такая, при компиляции нужно прописывать
время компиляции в какую то константу или переменную для программы,
которую предполается заливать в контроллер.
есть __TIME__ и __DATA_
но если их вставить в файл *.c
этот файл будет компилироваться,только если удален готовый объектник или
если там сделаны изменнения по сравнению с временем объектника
как это можно сделать "красивше"?
чтобы каждый раз это не делать руками
может криво выразился..
но хотелось бы иметь какую то константу, которая будет различная
при каждой компиляции программы.
как это можно сделать в IAR ?
aaarrr
Цитата(inventor @ Nov 16 2017, 11:48) *
но если их вставить в файл *.c
этот файл будет компилироваться,только если удален готовый объектник или
если там сделаны изменнения по сравнению с временем объектника
как это можно сделать "красивше"?

Вынести в отдельный файл, объектник удалять автоматически до или после сборки. Но лучше внешнюю утилиту написать/приспособить.
inventor
Цитата(aaarrr @ Nov 16 2017, 11:59) *
Вынести в отдельный файл, объектник удалять автоматически до или после сборки. Но лучше внешнюю утилиту написать/приспособить.

ну я как бы так и сделал
но не хочу руками это удалять
есть может какая нибудь #pragma для этого?
чтобы всегда компилировалось?
Obam
Цитата
чтобы всегда компилировалось?

Самая волшебная таблетка "Ребилдол"? Не? (Rebuild All)
k155la3
Цитата(inventor @ Nov 16 2017, 12:27) *
. . . но не хочу руками это удалять

в опциях проекта есть поля pre-build
пропишите там командынй файл или сразу старт своей утилиты.
V_N
Посмотрите здесь http://microsin.ru/content/view/1141/44/
k155la3
Цитата(aaarrr @ Nov 16 2017, 11:59) *
Вынести в отдельный файл, объектник удалять автоматически до или после сборки. Но лучше внешнюю утилиту написать/приспособить.

Это на мой взгляд самое эффективное решение (по крайней мере для IAR моей версии),
тк когда я делел исслледования на эту тему, решения в рамках IDE IAR не нашел.
Выкрутился тем, что такой финт можно сдеать с помощью SVN, но суть не меняется - сторонняя к IAR программа
прописывает "в нужное время, в нужном месте" свои данные (а именно номер ревизии).
-------
Написать свою утилиту, которая генерит исходник в виде модуля, куда пишется дата, время,
и "всечтонадо" в виде констант (например, контрольные суммы модулей).
Может есть более оптимальные решения ?
scifi
Ну и, конечно, самый православный способ - сделать Makefile, там всё это можно оформить на птичьем языке программы make. Все эти богомерзкие IDE - от лукавого laughing.gif
aaarrr
Цитата(scifi @ Nov 16 2017, 12:49) *
Ну и, конечно, самый православный способ - сделать Makefile, там всё это можно оформить на птичьем языке программы make.

Православно, но своей утилитой может быть на деле удобнее. Я так прописываю время и номер сборки, длину бинарника и CRC сразу.

Цитата(scifi @ Nov 16 2017, 12:49) *
Все эти богомерзкие IDE - от лукавого laughing.gif

Истинно так!
k155la3
Цитата(scifi @ Nov 16 2017, 12:49) *
Ну и, конечно, самый православный способ - сделать Makefile, там всё это можно оформить на птичьем языке программы make. Все эти богомерзкие IDE - от лукавого laughing.gif

А как это осваивается (с нуля), в смысле, "для интеллектуалов" sm.gif
Есть ли в этом смысл для тех, кого на 99.9 устраивает фунциональность IDE ? (вроде меня)
inventor
Цитата(V_N @ Nov 16 2017, 12:42) *
Посмотрите здесь http://microsin.ru/content/view/1141/44/



спасибо за ответы
сделал немного проще (вместо написания утилиты на бейсике)
в окне Build Action
Prebuild command line добавил
строчку touch $PROJ_DIR$\..\utils\userfunc.h

то есть при компиляции меняется время последнего доступа к файлу,
где определана версия
k155la3
Цитата(inventor @ Nov 16 2017, 13:20) *
. . .в окне Build Action
Prebuild command line добавил
строчку touch $PROJ_DIR$\..\utils\userfunc.h
. . .

Смотря какого размера проект (кол-во модулей) и куда включен этот h-файл.
Если он (вдруг) глобальный и модулей много - будет пустопорожняя перекомпиляция "всего".
Лучше уж модуль .c "тачить".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.