|
Вычисляемая константа в PCW, как? |
|
|
|
Feb 25 2009, 11:21
|

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

|
Возникло желание "попросить" компилятор (PCW) при компиляции рассчитать значение константы (на этапе отладки устройства приходится часто подбирать значение). Пытаюсь вставить такое: Код const unsigned int16 VoltageMax = 2.5/(4.18/1024); Ругается. Приходится вручную подставлять 612. Если не указываю, что это константа, компилятор напихивает библиотек и прошивка "раздувается". Что я не так делаю?
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
 |
Ответов
|
Feb 25 2009, 13:07
|

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

|
Цитата(MrYuran @ Feb 25 2009, 14:58)  Вообще константа отличается от дефайна тем, что она располагается в памяти (ОЗУ или во флеши) и программа по мере надобности к ней обращается. Дефайн подставляется по месту на этапе компиляции препроцессором. Сейчас пытался дефайном вставить - ругается, зараза.. Сам дефайн "съедает". А вот потом присвоить переменным не выходит. ОЗУ тратить не хочется..
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
Feb 25 2009, 13:28
|

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

|
Цитата(Eddy71 @ Feb 25 2009, 16:07)  Сейчас пытался дефайном вставить - ругается, зараза.. А ругается-то как? Error - это ругается. А Warning - это просто предупреждает, что, мол, имеете право, но возможны проблемы... Лучше выкладывайте, как ругается и на что, показательней будет
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Feb 25 2009, 14:22
|

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

|
Цитата(MrYuran @ Feb 25 2009, 16:28)  А ругается-то как? Лучше выкладывайте, как ругается и на что, показательней будет Вротмненоги!... Хотел показать - откомпилировалось без ошибок. Правда аномалия: Код const unsigned int16 ChargeMax = (unsigned int16)(1024 * 2.5/4.18); const unsigned int16 ChargeMin = (unsigned int16)(1024 * 2.5/4.10); после такого пишет Memory Usage: ROM38% RAM30% А после такого варианта: Код #define VoltageMax (2.5/(4.18/1024)) #define VoltageMin (2.5/(4.10/1024)) volatile unsigned int16 ChargeMax = VoltageMax; volatile unsigned int16 ChargeMin = VoltageMin; Memory Usage: ROM39% RAM36% Непонятно..
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
|
Feb 25 2009, 22:37
|

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

|
Привыкайте писать грамотно. Используйте препроцессор (define etc.) только там, где он необходим. Вы программируете в первую очередь на СИ а не на языке препроцессора (условно говоря). static const заменяет define в 90% случаев (и не занимет память как в случае без static). Код static const unsigned int16 CHARGE_MAX = (unsigned int16)(1024.0 * 2.5 / 4.18 + 0.5); static const unsigned int16 CHARGE_MIN = (unsigned int16)(1024.0 * 2.5 / 4.10 + 0.5); +0.5 для правильного округления положительных чисел до целого при отбрасывании дробной части (int)(1.1 + 0.5) = 1 (int)(1.4 + 0.5) = 1 (int)(1.5 + 0.5) = 2 (int)(1.9 + 0.5) = 2 (int)(2.0 + 0.5) = 2 Имена констант и то что объявлено через define заглавными буквами, всё остальное строчными.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
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    _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 Eddy71 Исчерпывающий совет. Одно не совсем понятно. Почем... Feb 26 2009, 08:33 demiurg_spb Если константа объявлена как статик, то компилятор... Feb 26 2009, 09:53  MrYuran Цитата(demiurg_spb @ Feb 26 2009, 12:53) ... Feb 26 2009, 10:01   Сергей Борщ Цитата(MrYuran @ Feb 26 2009, 12:01) А ес... Feb 26 2009, 10:05    MrYuran Цитата(Сергей Борщ @ Feb 26 2009, 13:05) ... Feb 26 2009, 10:13     Сергей Борщ Цитата(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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|