Перейти к содержанию
    

Писать/читать члены структуры генерик способом.

(1) Вот только не понятно зачем по номеру? . . .

(2) . . . Заменяйте их все одновременно.

(3) Программирование это не только "coding", это еще и структурирование и декомпозиция т.п. А программизм ради структурирования сродни (сами придумаете).

(1) одна из многих причин - обмен данными прибора и PC. Чтобы избежать "шизофрении" - на порядок удобнее работать с кодом параметра

(фактически его уникальным Id) и базой параметров. Для "синхронизации" проектов для прибора и PC достаточно чтобы они использовали

один файл - базы, где указано соотв-ие параметра, его Id, тип_данных --> размер поля итд.

Для "упаковки" в пакет или страницу флеш использую сериализацию. Это надежнее.

(2) пока все парам. влазят в страницу (264 байта) - я так и делаю.

(3) да :)

 

Я привел пример только как один из многих-бесконечных вариантов реализации.

ps - структуры отличное решение, еслиб...... не выравнивание, а темболее - для разных платформ. А также зависимость от опций компилятора.

 

 

 

 

а ну если так то я могу засунуть указатель в структуру принятой команды

. . . .

я все равно инициализирую структуру команд. так я добавлю указатель на переменную

Да, где-то так. У меня по такой идее постоены работа HMI прибора - меню и работа с внешним терминалом по USART.

По меню проскакивало обсуждение, тег кажется micromenu.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(1) одна из многих причин - обмен данными прибора и PC. Чтобы избежать "шизофрении" - на порядок удобнее работать с кодом параметра

(фактически его уникальным Id) и базой параметров. Для "синхронизации" проектов для прибора и PC достаточно чтобы они использовали

один файл - базы, где указано соотв-ие параметра, его Id, тип_данных --> размер поля итд.

Для "упаковки" в пакет или страницу флеш использую сериализацию. Это надежнее.

Этот аргумент хорош для придания совместимости с ранее разработанными приборами.

И при этом все равно лучше передавать блок параметров.

Заметьте, что сериализация все равно машиннозависимая. Если слать параметры и размеры, то это то, от чего хотел уйти.

(2) пока все парам. влазят в страницу (264 байта) - я так и делаю.

Я привел пример только как один из многих-бесконечных вариантов реализации.

ps - структуры отличное решение, еслиб...... не выравнивание, а темболее - для разных платформ. А также зависимость от опций компилятора.

Вот с выравниванием тут хорошо. Я сказал "передавать блок параметров", рассортируйте по адресам.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

еще раз

uint32_t *base_ptr;

base_ptr = mot_data+(sizeof(mot_data)*array_index);

как мне динамически передать struct_member - base_ptr->struct_member

 

хотя нет. sizeof возращает размер в байтах значит надо приводить к uint8_t?

uint8_t *base_ptr = mot_data+(sizeof(mot_data)*array_index)

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

еще раз

uint32_t *base_ptr;

base_ptr = mot_data+(sizeof(mot_data)*array_index);

как мне динамически передать struct_member - base_ptr->struct_member

Если правильно понял, то достаточно прочесть Карнегина и Ричина. После присвоения base_ptr = mot_data без твоих выражений доступ по base_ptr[array_index].mot_number

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если правильно понял, то достаточно прочесть Карнегина и Ричина. После присвоения base_ptr = mot_data без твоих выражений доступ по base_ptr[array_index].mot_number

это не base_ptr[array_index].mot_number - это base_ptr[array_index].зависит_от_команды_пришедшей_по_терминалу - мне надо чтоб указатель указывал на base_ptr[array_index].зависит_от_команды_пришедшей_по_терминалу

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это не base_ptr[array_index].mot_number - это base_ptr[array_index].зависит_от_команды_пришедшей_по_терминалу - мне надо чтоб указатель указывал на base_ptr[array_index].зависит_от_команды_пришедшей_по_терминалу

Если Вас не устраивает предложенный вариант, то для Вас придуман С++14. А так - придумайте команды терминала, соответствующие задаче.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uint32_t *base_ptr;

base_ptr = mot_data+(sizeof(mot_data)*array_index);

как мне динамически передать struct_member - base_ptr->struct_member

может offsetof(x,y) ?

И зачем динамически, ОНОж вроде, константа ?

ps - смещения offsetof(x,y) занесите в массив - "описатель" структуры.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может offsetof(x,y) ?

И зачем динамически, ОНОж вроде, константа ?

Судя по записи выше, предложена перегрузка оператора функцией. С++ Жене в руки. И удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно так

при инициализации

.vp = &mot_data[0].член_структуры

и потом в команде полчили AXIS

и прибавили AXIS * sizeof(mot_data)

не очень мне это нравиться, но...

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

&mot_data[0].член_структуры

и

base_ptr[array_index].зависит_от_команды_пришедшей_по_терминалу

Одна сущность или разные? Первая - статический член структуры, второе - перегруженный оператор. Определись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может offsetof(x,y) ?

И зачем динамически, ОНОж вроде, константа ?

ps - смещения offsetof(x,y) занесите в массив - "описатель" структуры.

а да? offsetof(структура, член) вернет офсет члена в структуре?

 

Одна сущность или разные? Первая - статический член структуры, второе - перегруженный оператор. Определись.

ну что то должно быть статическим. либо &mot_data[0].член_структуры, либо offsetof(структура, член) если это работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а да? offsetof(структура, член) вернет офсет члена в структуре?

ну что то должно быть статическим. либо &mot_data[0].член_структуры, либо offsetof(структура, член) если это работает.

Компилятор = переводчик с русского на машинный. Учитесь выражаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...