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

 
 
> iar struct union как указать смещение?
AndryG
сообщение Feb 14 2015, 20:10
Сообщение #1


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

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



Имеем, для примера, вот такой тип данных, в котором хотим обеспечить к массиву данных доступ к нужным полям по разному "подходу".

Код
typedef union{
  uint8_t raw[4]; // head, bodyA, bodyB, tail
  struct{
    uint8_t b;
  } body;
  uint8_t bodyA;
  uint8_t tail;
} my_t


Понятно, что всё работает неверно. Вопрос: возможно ли указать полям дополнительно смещение? Если да, то как ?

Совет "расположи поля в объединении в нужном порядке" не предлагать. Это лишь пример для обяъснения проблемы. В моем случае необходимо именно указать смещение.

Единственный вариант вижу в объявлении дополнительным полей-проставок, которые будут смещать на нужное место поля. Но и то сработает не везде.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AndryG
сообщение Feb 16 2015, 10:55
Сообщение #2


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

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



scifi, да я ради интереса включил MISRA посмотреть, насколько далёк мой код от автомобильных стандартов sm.gif
Посты в теме и вдумчивое перечитывание глав кернигана объяснило некоторые её заумные требования.

На какое именно union ругалось уже не помню. Код сто раз перекраивался.

Цитата
Шило на мыло.

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

Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 16 2015, 11:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(AndryG @ Feb 16 2015, 13:55) *
Вот я и ищу вариант, как в функции-обработчики отдать необходимый минимум информации, но в то же время без лишних трат памяти.

Не нужно это. Всё-таки язык Си без некоторой дисциплины - это граната в руках обезьяны. Поэтому не нужно пытаться везде подключать статические проверки компилятора. Часто это просто не стоит того, как и в данном случае.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AndryG   iar struct union как указать смещение?   Feb 14 2015, 20:10
- - kolobok0   Цитата(AndryG @ Feb 14 2015, 23:10) ...По...   Feb 15 2015, 10:28
- - SSerge   Цитата(AndryG @ Feb 15 2015, 03:10) Вопро...   Feb 15 2015, 10:45
- - megajohn   Цитата(AndryG @ Feb 14 2015, 23:10) Понят...   Feb 15 2015, 17:58
- - AndryG   ЦитатаОпишите почему вам понятно "что работае...   Feb 15 2015, 19:11
|- - megajohn   Цитата(AndryG @ Feb 15 2015, 22:11) У мен...   Feb 16 2015, 07:32
||- - Сергей Борщ   Цитата(megajohn @ Feb 16 2015, 09:32) дык...   Feb 16 2015, 07:57
|- - scifi   Цитата(AndryG @ Feb 15 2015, 22:11) У мен...   Feb 16 2015, 08:23
|- - kolobok0   Цитата(AndryG @ Feb 15 2015, 22:11) ...Ра...   Feb 16 2015, 09:26
- - SSerge   Кодtypedef union{ uint8_t raw[4]; // hea...   Feb 15 2015, 20:08
- - AndryG   megajohn, вот и я кроме как вставлять "распор...   Feb 16 2015, 10:32
|- - scifi   Цитата(AndryG @ Feb 16 2015, 13:32) Вмест...   Feb 16 2015, 10:39
|- - kolobok0   Цитата(AndryG @ Feb 16 2015, 13:32) ...Я ...   Feb 17 2015, 21:46
|- - SSerge   Цитата(kolobok0 @ Feb 18 2015, 04:46) И п...   Feb 18 2015, 12:40
- - AndryG   SSerge, именно из-за разных форматов я хочу переда...   Feb 18 2015, 12:58


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 05:52
Рейтинг@Mail.ru


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