реклама на сайте
подробности

 
 
> Сделать сделать константу "время копиляции" в программе?
inventor
сообщение Nov 16 2017, 08:48
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



задача такая, при компиляции нужно прописывать
время компиляции в какую то константу или переменную для программы,
которую предполается заливать в контроллер.
есть __TIME__ и __DATA_
но если их вставить в файл *.c
этот файл будет компилироваться,только если удален готовый объектник или
если там сделаны изменнения по сравнению с временем объектника
как это можно сделать "красивше"?
чтобы каждый раз это не делать руками
может криво выразился..
но хотелось бы иметь какую то константу, которая будет различная
при каждой компиляции программы.
как это можно сделать в IAR ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
aaarrr
сообщение Nov 16 2017, 08:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(inventor @ Nov 16 2017, 11:48) *
но если их вставить в файл *.c
этот файл будет компилироваться,только если удален готовый объектник или
если там сделаны изменнения по сравнению с временем объектника
как это можно сделать "красивше"?

Вынести в отдельный файл, объектник удалять автоматически до или после сборки. Но лучше внешнюю утилиту написать/приспособить.
Go to the top of the page
 
+Quote Post
inventor
сообщение Nov 16 2017, 09:27
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



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

ну я как бы так и сделал
но не хочу руками это удалять
есть может какая нибудь #pragma для этого?
чтобы всегда компилировалось?
Go to the top of the page
 
+Quote Post
Obam
сообщение Nov 16 2017, 09:32
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата
чтобы всегда компилировалось?

Самая волшебная таблетка "Ребилдол"? Не? (Rebuild All)

Сообщение отредактировал Obam - Nov 16 2017, 09:32


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 16 2017, 09:32
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(inventor @ Nov 16 2017, 12:27) *
. . . но не хочу руками это удалять

в опциях проекта есть поля pre-build
пропишите там командынй файл или сразу старт своей утилиты.
Go to the top of the page
 
+Quote Post
V_N
сообщение Nov 16 2017, 09:42
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 12-01-09
Из: Харьков
Пользователь №: 43 270



Посмотрите здесь http://microsin.ru/content/view/1141/44/
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 16 2017, 09:47
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



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

Это на мой взгляд самое эффективное решение (по крайней мере для IAR моей версии),
тк когда я делел исслледования на эту тему, решения в рамках IDE IAR не нашел.
Выкрутился тем, что такой финт можно сдеать с помощью SVN, но суть не меняется - сторонняя к IAR программа
прописывает "в нужное время, в нужном месте" свои данные (а именно номер ревизии).
-------
Написать свою утилиту, которая генерит исходник в виде модуля, куда пишется дата, время,
и "всечтонадо" в виде констант (например, контрольные суммы модулей).
Может есть более оптимальные решения ?
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 16 2017, 09:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Ну и, конечно, самый православный способ - сделать Makefile, там всё это можно оформить на птичьем языке программы make. Все эти богомерзкие IDE - от лукавого laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 16 2017, 10:11
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

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

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

Истинно так!
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 16 2017, 10:12
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



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

А как это осваивается (с нуля), в смысле, "для интеллектуалов" sm.gif
Есть ли в этом смысл для тех, кого на 99.9 устраивает фунциональность IDE ? (вроде меня)
Go to the top of the page
 
+Quote Post
inventor
сообщение Nov 16 2017, 10:20
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(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

то есть при компиляции меняется время последнего доступа к файлу,
где определана версия
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 16 2017, 10:30
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



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

Смотря какого размера проект (кол-во модулей) и куда включен этот h-файл.
Если он (вдруг) глобальный и модулей много - будет пустопорожняя перекомпиляция "всего".
Лучше уж модуль .c "тачить".
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016