0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 7
1

В макросе подставить поле в структуре

11.02.2019, 13:57. Показов 1887. Ответов 6

Здравствуйте!
пишу под контроллер на IAR C
у меня есть описание структуры:
typedef struct TRegData{
u16 r0006_Ios;
u8 r0007L_Ist;
u8 r0007H_Ust;
..... и много других параметров
} TRegData;

На базе которой созданы две структуры данных
struct TRegData Reg_U3;//данные первого регулятора
struct TRegData Reg_U1;//данные второго регулятора

Есть переменная u8 SELECT (значения 0 или 1) которая показывает какой из регуляторов на связи (0-Reg_U3, 1-Reg_U1) и в зависимости от того какой из них на связи я выбираю из какой структуры мне брать данные.

например вот так
u8 Ist = ((SELECT!=0)?Reg_U1.r0007L_Ist:Reg_U3.r0007L_Ist);
и таких строк у меня полно в проекте. Как правильно описать макросом это выражение.
Хотелось бы иметь макрос:
#define getReg(reg) ((SELECT!=0)?Reg_U1.reg:Reg_U3.reg)
и обращаться к нему:
u8 Ist=getReg(r0007L_Ist);
Я так написал, и у меня не прокатывает :-(
Как передать в макрос имя поля в структуре (в моём случае r0007L_Ist) чтобы макрос выполнил свой предназначение без ошибок?
сейчас Error[Pe029]: expected an expression

С уважением Герасим.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2019, 13:57
Ответы с готовыми решениями:

Подставить значение в поле таблицы поле запроса
Здравствуйте, есть ли какая-то возможность подставить вместо поля в таблице поле с запроса? ...

Подставить значение в поле документа
Всем доброго времени суток! Такой вопрос, дорогие форумчане. Сразу прошу не серчать - я новичёк в...

Подставить текущую дату в поле
В SQL Server Management Studio есть таблица Review с полем data(Datetime). Хотел сделать, чтобы...

Как автоматически подставить значение в поле
1. Есть справочник Контрагенты и подчиненный ему справочник ВидДоговоров, и есть документ...

6
Модератор
Эксперт по электронике
8729 / 6522 / 884
Регистрация: 14.02.2011
Сообщений: 22,832
11.02.2019, 14:04 2
Цитата Сообщение от Gerasimov-GV Посмотреть сообщение
На базе которой созданы две структуры данных
объяви массив и не мучайся
0
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 7
11.02.2019, 14:12  [ТС] 3
не получается. данные в структуре разной размерности: u8,16,32... float`ы, битовые поля, с массивом не прокатывает
0
Модератор
Эксперт по электронике
8729 / 6522 / 884
Регистрация: 14.02.2011
Сообщений: 22,832
11.02.2019, 14:16 4
Цитата Сообщение от Gerasimov-GV Посмотреть сообщение
. данные в структуре разной размерности:
как это стыкуется с этим
Цитата Сообщение от Gerasimov-GV Посмотреть сообщение
На базе которой созданы две структуры данных
C
1
2
struct TRegData Reg_U3;//данные первого регулятора
struct TRegData Reg_U1;//данные второго регулятора
объявляешь вот так
C
1
TRegData Reg[2];
используешь так
C
1
u8 Ist =Reg[SELECT].r0007L_Ist;
1
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 7
11.02.2019, 14:46  [ТС] 5
яп с радостью так поступил, но структуры большие, две вместе не лезут в один кусок памяти, так как контроллер и память ограничена. Поэтому структуры разбросаны по памяти с помощью линковщика.
struct TRegData Reg_U3; //эта лежит в основной памяти
struct TRegData Reg_U3 @ "USB_DMA_RAM"; //а эта в памяти буфера USB, так как USB в данном девайсе не применяется
0
Модератор
Эксперт по электронике
8729 / 6522 / 884
Регистрация: 14.02.2011
Сообщений: 22,832
11.02.2019, 15:21 6
Лучший ответ Сообщение было отмечено Gerasimov-GV как решение

Решение

Цитата Сообщение от Gerasimov-GV Посмотреть сообщение
C
1
2
struct TRegData Reg_U3; //эта лежит в основной памяти
struct TRegData Reg_U3 @ "USB_DMA_RAM"; //а эта в памяти буфера USB, так как USB в данном девайсе не применяется
используй тэги выделения кода
теперь по теме
создай тогда массив указателей
C
1
2
3
TRegData *  Reg[2];
Reg[0]=&Reg_U1;
Reg[1]=&Reg_U3;
используешь так

C
1
u8 Ist =Reg[SELECT]->r0007L_Ist;
1
0 / 0 / 0
Регистрация: 11.02.2019
Сообщений: 7
11.02.2019, 19:10  [ТС] 7
отлично! спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2019, 19:10
Помогаю со студенческими работами здесь

Как в макросе по нажатия кнопки проверить введено ли значение в поле
Собственно как в макросе по нажатия кнопки проверить введено ли значение в поле? Есть форма,...

Как Подставить Поле Inetfrom В Отправляемое Письмо
Есть задача, в которой пользователи создают письма в одной из БД на основании документа. Сами...

В Поле со списком на форме подставить значения из фиксированного списка
Доброго времени суток форумчане! Как сделать что бы в ПолеСоСписком на форме подставлялись значения...

Как подставить значение поле в IIF или CASE
Помогите с такой проблемой. (первый раз делаю запрос на MS SQL) Делаю запрос вида: select OrderID...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru