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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> iar struct union как указать смещение?
SSerge
сообщение Feb 18 2015, 12:40
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(kolobok0 @ Feb 18 2015, 04:46) *
И пару слов про модбас.

А что до модбаса, то при разборе его пакетов все эти манипуляции с union и struct совершенно бесполезны по двум причинам:
1. У разных функций разный формат, поэтому проще для каждой вызвать отдельную процедуру-обработчик, а там ограничиться парой-тройкой константных индексов в массиве.
2. Использовать данные из массива напрямую невозможно, из-за тупоконечности (старший байт идёт первым) их всё равно приходится сначала перепаковывать.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
AndryG
сообщение Feb 18 2015, 12:58
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



SSerge, именно из-за разных форматов я хочу передавать отдельной процедуре-обработчику не char[255], а struct{} modbusFunc3Request. дабы в обработчике не ломать голову с индексами и случайно не затереть что не надо.

Остановился на варианте описания всех полей в структуре (без "пустот"), часть из них const.

Примерно так будет.

Код
typedef struct{
  const uint8_t addr;
  const uint8_t func;
  const mbReg16_t first;
  const mbReg16_t count;
} mbFunc3Rqs_t;

typedef struct{
  const uint8_t addr;
  const uint8_t func;
  const uint8_t size;
  mbReg16_t reg[(MB_FRAME_MAX - 6) / 2];
}mbFunc3Rsp_t;

#pragma inline=forced
mbError_t mbFunc3Handler(void *frame){
//  mbFunc3Rqs_t *rqs  = frame;
//  mbFunc3Rsp_t *rsp  = frame;
  return MBE_NONE;
}


kolobok0, спасибо за "пару слов" постараюсь обойти грабли sm.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th August 2025 - 03:43
Рейтинг@Mail.ru


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