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

 
 
> Вычисляемая константа в PCW, как?
Eddy71
сообщение Feb 25 2009, 11:21
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879



Возникло желание "попросить" компилятор (PCW) при компиляции рассчитать значение константы (на этапе отладки устройства приходится часто подбирать значение). Пытаюсь вставить такое:
Код
const unsigned int16 VoltageMax = 2.5/(4.18/1024);

Ругается. Приходится вручную подставлять 612.
Если не указываю, что это константа, компилятор напихивает библиотек и прошивка "раздувается".
Что я не так делаю?


--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Eddy71
сообщение Feb 26 2009, 08:33
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879



Исчерпывающий совет. Одно не совсем понятно. Почему константу еще и static надо усугублять? Ведь константа по-определению не меняется в процессе исполнения программы..


--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 26 2009, 09:53
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Если константа объявлена как статик, то компилятор понимает что она локальна в модуле или в процедуре.
И если компилятор видит что внутри этого модуля не происходит взятие адреса этой константы, то он её не создаёт.
Т.е. не занимает под неё память (получается почти полная аналогия с define в смысле отъедания памяти).
Если объявлена просто константа типа const float f; - то она займёт память (целых 4 байта).
Вообще у static я насчитал 3 различных смысла (хотя по правде их только два):
1) для "облегчения" констант
2) для сокрытия локальных процедур и переменных в модуле (+ развязывает руки компилятору по встраиванию таких функций как inline)
3) для локальных статических переменных внутри процедур с неограниченным сроком годностиsmile.gif

Всем этим надо активно и умело пользоваться и размер Ваших программ сильно уменьшится, что Вы даже удивитесьsmile.gif
Возьмите за правило: если функция или переменная или константа не объявляется в заголоыочном файле как extern
(т.е. не используется за пределами единицы трансляции) то она должна быть static.
Помимо всего это ещё и дополнительное средство самодокументирования кода.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 26 2009, 10:01
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(demiurg_spb @ Feb 26 2009, 12:53) *
Если константа объявлена как статик, то компилятор понимает что она локальна в модуле или в процедуре.

А если не локальна?
Типа SYSTEM_TICKS_IN_1S ?
Тогда всё-таки лучше дефайн.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2009, 10:05
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Feb 26 2009, 12:01) *
А если не локальна?
Тогда она объявляется в заголовочном файле и будет локальной для любого модуля, в который включен этот заголовочный файл. Эффект практически тот же, что и с #define, но компилятор может проводить проверки типов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 26 2009, 10:13
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Feb 26 2009, 13:05) *
Тогда она объявляется в заголовочном файле и будет локальной для любого модуля, в который включен этот заголовочный файл.

Не совсем понял, вернее, совсем не понял.
Он же тогда напишет, что переменная non-static и соответственно её таковой считать не будет (или будет?)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Eddy71   Вычисляемая константа в PCW, как?   Feb 25 2009, 11:21
- - _Pasha   Цитата(Eddy71 @ Feb 25 2009, 15:21) Что я...   Feb 25 2009, 11:27
|- - _Pasha   Цитата(_Pasha @ Feb 25 2009, 15:27) #defi...   Feb 25 2009, 11:37
- - MrYuran   Цитата(Eddy71 @ Feb 25 2009, 14:21) Кодco...   Feb 25 2009, 11:31
|- - Eddy71   Цитата(MrYuran @ Feb 25 2009, 15:31) Логи...   Feb 25 2009, 11:53
- - MrYuran   Вообще константа отличается от дефайна тем, что он...   Feb 25 2009, 11:58
|- - Eddy71   Цитата(MrYuran @ Feb 25 2009, 14:58) Вооб...   Feb 25 2009, 13:07
|- - MrYuran   Цитата(Eddy71 @ Feb 25 2009, 16:07) Сейча...   Feb 25 2009, 13:28
|- - Eddy71   Цитата(MrYuran @ Feb 25 2009, 16:28) А ру...   Feb 25 2009, 14:22
|- - _Pasha   Цитата(Eddy71 @ Feb 25 2009, 18:22) Непон...   Feb 25 2009, 14:30
||- - Eddy71   Цитата(_Pasha @ Feb 25 2009, 17:30) Эконо...   Feb 25 2009, 15:00
|- - xemul   Цитата(Eddy71 @ Feb 25 2009, 17:22) ... Н...   Feb 25 2009, 15:33
|- - demiurg_spb   Привыкайте писать грамотно. Используйте препроцесс...   Feb 25 2009, 22:37
|- - Сергей Борщ   Цитата(MrYuran @ Feb 26 2009, 12:13) Он ж...   Feb 26 2009, 12:18
|- - demiurg_spb   Сергей прав. Я просто забыл ещё упомянуть о возмож...   Feb 26 2009, 13:05
- - Eddy71   Попробовал разные варианты компиляции, похоже PCW ...   Feb 26 2009, 14:11
- - Eddy71   По ходу обучения писанию на Си возник глупейший во...   Feb 26 2009, 15:34


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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 05:49
Рейтинг@Mail.ru


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