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

 
 
> Поместить константу float на место int32, Чистый си.
SasaVitebsk
сообщение Jun 24 2013, 07:07
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Есть структура. Вся структура константная (размещается во флэши). В ней есть 2 поля int.
Дописывал функционал. Ввёл ещё одно поле, которое определяет тип констант. И работаю с ними поразному - или как с int32 или как с float.
А вот при заполнении такой структуры вываливается ошибка.
Как правильно записать, чтобы компилятор понял, что я от него хочу?
Код
typedef const struct
{
  const int32_t            *Index;                // Указатель на редактируемый параметр/ смещение для каналов
  const uint16_t        Ch;                    // 0/ Указатель на канал
  const uint8_t            fSignEn;            // Отображение знака числа
  const uint8_t            LenDig;                // Число цифр в числе (0 - гашение незначащих нулей)
  const uint8_t            DigAfterDot;        // Число цифр после точки (0 - точки нет)
  const uint8_t            DigType;            // Тип результирующего числа (0 - int8, 1 - int16, 2 - int32, 3 - float)
  const int32_t            min,max;            // минимальное и максимальное значение (если <min, то min, если >max, то max)
  const uint16_t        typeEditing;        // возможножность редактирования
  void                    (*savefunc)(void);    // Указатель на функцию записи редактируемых параметров
  const char* const*    NameUnits;            // наименование единиц измерения
} DigEditing_t;


Код
//***************************************************************
// @@ 23155. Диаметр трубопровода 1
DigEditing_t dgeD12_1 =                // Меню "Диаметр трубопровода"
{
  0,                                        // непрямое
  offsetof(PipelineChanal_t,QConfChanal[0])+offsetof(QConfChanal_t,dia_D12),    //
  0,                                        // неотображать знак
  7, 3,                                        // 3 знака, нет запятой
  (int32_t)1.0,(int32_t)5.0e3,                // min,max
  3,                                        // float
  PRGEDIT, 0,                                // Редактировать по паролю, не сохранять (сохранять по выходу из PRG)
  &strMm                                    // "мм"
};
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Jun 24 2013, 07:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(SasaVitebsk @ Jun 24 2013, 11:07) *
Как правильно записать, чтобы компилятор понял, что я от него хочу?

В gcc делаю так:
CODE

//-----------------------------------------------------------------------------
// typedef struct sPARAM
//-----------------------------------------------------------------------------
typedef struct sPARAM
{
int delta;
DWORD act_datetime;

BYTE park_mask;
BYTE wait_on;
BYTE wait_period;
BYTE pre_on;

BYTE pre_period;
BYTE fin_on;
BYTE fin_period;
BYTE to_pre;

BYTE to_fin;
BYTE to_done;
BYTE l_pre;
BYTE l_fin;

BYTE to_btn_press;
BYTE to_btn_release;

union
{
DWORD flags;
struct
{
union
{
WORD ev_msk;
struct
{
WORD ev_msk_total:1;
WORD ev_msk_restart:1;
WORD ev_msk_power_fail:1;
WORD ev_msk_enter:1;
WORD ev_msk_start:1;
WORD ev_msk_release:1;
WORD ev_msk_enable:1;
WORD ev_msk_disable:1;
WORD ev_msk_reserv:8;
};
};

WORD btn_inv:1;
WORD box_led_inv:1;
WORD flags_reserv:14;
};
};

} sPARAM;

//-----------------------------------------------------------------------------
// const sPARAM param_default
//-----------------------------------------------------------------------------
const sPARAM param_default =
{
delta: 0, // delta
act_datetime: ACT_ALWAYS,// ACT_NEVER,
park_mask: 0,
wait_on: RED_TIME(0.2),
wait_period: RED_TIME(3.0),
pre_on: RED_TIME(0.2),
pre_period: RED_TIME(0.5),
fin_on: RED_TIME(1.0),
fin_period: RED_TIME(1.0),
to_pre: TO_TIME(1.0),
to_fin: TO_TIME(10.0),
to_done: TO_TIME(2.0),
l_pre: DISTANCE(1.0),
l_fin: DISTANCE(0.4),
to_btn_press: TO_BTN(1.0),
to_btn_release: TO_BTN(1.0),
ev_msk: 0,
btn_inv: 0,
box_led_inv: 0,
};
Go to the top of the page
 
+Quote Post



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

 


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


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