|
Приведение типа указателя на элемент структуры |
|
|
|
Oct 17 2012, 10:51
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Допустим, имеется структура из байтов. Хочу инициализировать сразу 2 байта 16-битовым числом, или сразу 4 байта 32-битовым числом. Привожу указатель к нужному типу. Код typedef struct { __IO uint8_t A; __IO uint8_t B; uint16_t RES; } DEV_t;
DEV_t Dev; DEV_t *pDev = &Dev;
pDev->A = 0x55; pDev->B = 0xAA; (uint16_t)pDev->A = 0x3333; (uint32_t)pDev->A = 0x01234567; Код работает. Но Keil выдает предупреждения: source\Exercises.c(117): warning: #1441-D: nonstandard cast on lvalue Есть ли способ написать так, чтобы Keil не возмущался?
|
|
|
|
|
 |
Ответов
|
Dec 20 2013, 09:45
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Всплыл вопрос, кажется, подойдет в эту тему. Создаю суперструктуру из нескольких разных структур. В каждой из структур переменные разного размера кидаю, как попало. Не знаю, создаются дыры или нет, но пока использовал структуры по-отдельности, проблем не было. Keil знает, куда положил, и откуда брать. Для Cortex-M нет проблем. В суперструктуре должно быть аналогично.
Теперь хочу копировать суперструктуру в другую, такую же (backup). Хочу делать это 32-битовыми пересылками. Кроме того, хочу вычислять аппаратно CRC суперструктуры, туда тоже нужно посылать 32-битовые слова. Задаю указателю на uint32 адрес суперструктуры (uint32_t *)&Ctrl. Вычисляю ее размер в словах (!) size(Ctrl_t) / 4. И так собираюсь использовать.
Вопросы: 1. Что гарантирует, что вся суперструктура разместится по выровненному до слова адресу? Что будет, если первый элемент - 8-битовый? 2. Как задать, чтобы ее размер был равен целому числу слов? Пока напихал несколько пустых байтов, каждая мелкая структура - по 2-4-8 байтов, общее количество 44 байта (но, может, есть и дыры двухбайтовые?). В конце суперструктуры задаю 32-битовую CRC, это гарантирует выравнивание по словам, и целое число слов?
|
|
|
|
|
Dec 24 2013, 16:06
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(ViKo @ Dec 20 2013, 11:45)  В конце суперструктуры задаю 32-битовую CRC, это гарантирует выравнивание по словам, и целое число слов? Как уже было сказано - да, гарантирует. Но все "дырки", оставшиеся от выравнивания полей, могут быть заполнены совершенно произвольным мусором. Учтите это при расчете CRC. Т.е. либо перед заполнением полей структуры обнуляйте выделенную под нее память при помощи memset, либо считайте CRC конкретных полей, а не всей памяти струткуры, либо размещайте поля так, чтобы не между ними не образовывалось "дырок".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
ViKo Приведение типа указателя на элемент структуры Oct 17 2012, 10:51 AHTOXA *(uint16_t*)&Dev.A = 0x55AA; Oct 17 2012, 11:11 ViKo Цитата(AHTOXA @ Oct 17 2012, 14:11) *(uin... Oct 17 2012, 11:20  AHTOXA Но это хак, работоспособность которого зависит от ... Oct 17 2012, 11:27   ViKo Цитата(AHTOXA @ Oct 17 2012, 14:27) Но эт... Oct 17 2012, 11:36    _Артём_ Цитата(ViKo @ Oct 17 2012, 14:36) Правиль... Oct 17 2012, 11:58     ViKo Цитата(_Артём_ @ Oct 17 2012, 14:58) А на... Oct 17 2012, 12:06      toweroff Цитата(ViKo @ Oct 17 2012, 16:06) *(uint3... Oct 17 2012, 12:12       ViKo Цитата(toweroff @ Oct 17 2012, 15:12) то ... Oct 17 2012, 12:19       _Артём_ Цитата(toweroff @ Oct 17 2012, 15:12) то ... Oct 17 2012, 12:19      _Артём_ Цитата(ViKo @ Oct 17 2012, 15:06) *(uint3... Oct 17 2012, 12:18       ViKo Цитата(_Артём_ @ Oct 17 2012, 15:18) И чт... Oct 17 2012, 12:20     MrYuran Цитата(_Артём_ @ Oct 17 2012, 15:58) А на... Oct 17 2012, 12:43      ViKo Цитата(MrYuran @ Oct 17 2012, 15:43) Вот ... Oct 17 2012, 12:46       MrYuran Цитата(ViKo @ Oct 17 2012, 16:46) Так зап... Oct 17 2012, 12:54        ViKo Цитата(MrYuran @ Oct 17 2012, 15:54) А не... Oct 17 2012, 13:10    _Pasha Цитата(ViKo @ Oct 17 2012, 14:36) Для тог... Oct 17 2012, 15:18     _Артём_ Цитата(_Pasha @ Oct 17 2012, 18:18) Патам... Oct 17 2012, 15:44      _Pasha Цитата(_Артём_ @ Oct 17 2012, 18:44) Инте... Oct 17 2012, 16:21       AHTOXA А в каком случае может не сработать индуистский ва... Oct 17 2012, 16:48       Дмитриос Цитата(_Pasha @ Oct 17 2012, 20:21) Я тут... Oct 17 2012, 20:22        _Pasha Цитата(Дмитриос @ Oct 17 2012, 23:22) Про... Oct 17 2012, 20:39         Дмитриос Цитата(_Pasha @ Oct 18 2012, 00:39) STM32... Oct 17 2012, 20:53          _Pasha Цитата(Дмитриос @ Oct 17 2012, 23:53) А р... Oct 17 2012, 21:31     ViKo Цитата(_Pasha @ Oct 17 2012, 18:18) Не на... Oct 17 2012, 17:31      _Pasha Цитата(ViKo @ Oct 17 2012, 20:31) Я тоже ... Oct 17 2012, 18:22       ViKo Цитата(_Pasha @ Oct 17 2012, 21:22) Не по... Oct 17 2012, 18:33       AHTOXA Цитата(_Pasha @ Oct 18 2012, 00:22) Не по... Oct 17 2012, 18:35        _Pasha Цитата(AHTOXA @ Oct 17 2012, 21:35) _Pash... Oct 17 2012, 18:50         AHTOXA Цитата(_Pasha @ Oct 18 2012, 00:50) Вообщ... Oct 17 2012, 18:59          _Pasha Цитата(AHTOXA @ Oct 17 2012, 21:59) А в ч... Oct 17 2012, 19:17           ViKo Цитата(_Pasha @ Oct 17 2012, 22:17) В дан... Oct 17 2012, 19:20           AHTOXA Цитата(_Pasha @ Oct 18 2012, 01:17) В дан... Oct 18 2012, 03:39            _Pasha Цитата(AHTOXA @ Oct 18 2012, 06:39) Да не... Oct 18 2012, 07:44             ViKo Цитата(_Pasha @ Oct 18 2012, 10:44) Ну не... Oct 18 2012, 07:54              _Pasha Цитата(ViKo @ Oct 18 2012, 10:54) Приведе... Oct 18 2012, 08:43         MrYuran Цитата(_Pasha @ Oct 17 2012, 22:50) Вообщ... Oct 18 2012, 05:12          AHTOXA Цитата(MrYuran @ Oct 18 2012, 11:12) Это ... Oct 18 2012, 06:14           MrYuran Цитата(AHTOXA @ Oct 18 2012, 10:14) Что н... Oct 18 2012, 06:25           Палыч Цитата(AHTOXA @ Oct 18 2012, 10:14) Что н... Oct 18 2012, 06:55            esaulenka Цитата(Палыч @ Oct 18 2012, 10:55) Встави... Oct 18 2012, 12:23             _pv Цитата(esaulenka @ Oct 18 2012, 19:23) Ко... Oct 18 2012, 15:51       ViKo Цитата(_Pasha @ Oct 17 2012, 21:22) port-... Oct 17 2012, 18:47        AHTOXA Цитата(ViKo @ Oct 18 2012, 00:47) Это есл... Oct 17 2012, 18:52         ViKo Цитата(AHTOXA @ Oct 17 2012, 21:52) Вообщ... Oct 17 2012, 18:56        _Pasha Цитата(ViKo @ Oct 17 2012, 21:47) Это есл... Oct 17 2012, 18:56 toweroff Ух как у меня все это перекликается... и с volatil... Oct 17 2012, 17:07 toweroff Итак, добавляю
есть две области в ARM968E-S
в пер... Oct 17 2012, 17:47 toweroff Админы, я так понимаю, здесь свой колхоз
я это вс... Oct 17 2012, 18:41 AHTOXA Цитата(MrYuran @ Oct 18 2012, 12:25) Я не... Oct 18 2012, 07:49 Палыч Цитата(AHTOXA @ Oct 18 2012, 11:49) Нет, ... Oct 18 2012, 08:16  AHTOXA Цитата(Палыч @ Oct 18 2012, 14:16) А тепе... Oct 18 2012, 08:45   ReAl Цитата(AHTOXA @ Oct 18 2012, 11:45) Пока ... Oct 18 2012, 14:47    AHTOXA Цитата(ReAl @ Oct 18 2012, 20:47) Там, я ... Oct 18 2012, 16:20     ViKo Цитата(AHTOXA @ Oct 18 2012, 19:20) Можно... Oct 19 2012, 04:41      AHTOXA Цитата(ViKo @ Oct 19 2012, 10:41) Если пр... Oct 19 2012, 04:59       ViKo Цитата(AHTOXA @ Oct 19 2012, 07:59) Какая... Oct 19 2012, 05:49        AHTOXA Цитата(ViKo @ Oct 19 2012, 11:49) Мы же е... Oct 19 2012, 07:31         _Pasha Цитата(AHTOXA @ Oct 19 2012, 10:31) Так в... Oct 19 2012, 09:27 XVR Вообще то компиляторы упаковывают структуры не от ... Oct 18 2012, 08:23 ViKo Цитата(XVR @ Oct 18 2012, 11:23) int :16... Oct 18 2012, 08:27  XVR Цитата(ViKo @ Oct 18 2012, 12:27) лишнееД... Oct 18 2012, 08:47 ViKo К счастью, в железе STM32 адреса устройств уже рас... Oct 19 2012, 09:32 _Pasha Цитата(ViKo @ Oct 19 2012, 12:32) К счаст... Oct 19 2012, 09:57 =GM= Цитата(ViKo @ Oct 17 2012, 09:51) Допусти... Oct 26 2012, 20:10 _Pasha Есть Грабля!
CODEtypedef struct
{
char id[2]... Nov 9 2012, 18:48 Сергей Борщ QUOTE (_Pasha @ Nov 9 2012, 20:48) CODEty... Nov 9 2012, 19:29 AHTOXA Цитата(_Pasha @ Nov 10 2012, 00:48)
Ест... Nov 9 2012, 19:33  _Pasha Цитата(AHTOXA @ Nov 9 2012, 22:33) Да вро... Nov 9 2012, 19:43 MrYuran Цитата(ViKo @ Dec 20 2013, 13:45) 1. Что ... Dec 20 2013, 10:35 ig_z QUOTE (ViKo @ Dec 20 2013, 11:45) 2. Как ... Dec 20 2013, 11:05 XVR Цитата(ViKo @ Dec 20 2013, 13:45) 1. Что ... Dec 24 2013, 09:55  AHTOXA Цитата(Сергей Борщ @ Dec 24 2013, 22:06) ... Dec 24 2013, 18:52 ViKo Почитал здесь - http://www.keil.com/support/man/do... Dec 20 2013, 10:44 ViKo Запустил компиляцию с опцией --remarks.
Вижу:
enum... Dec 20 2013, 11:08 PheeL Цитата(ViKo @ Dec 20 2013, 15:08) enum за... Dec 20 2013, 11:14  ViKo Цитата(PheeL @ Dec 20 2013, 14:14) Каждый... Dec 20 2013, 11:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|