|
Приведение типа указателя на элемент структуры |
|
|
|
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, 11:08
|

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

|
Запустил компиляцию с опцией --remarks. Вижу: enum занимают по 32 бита! Неоправданная роскошь. К структуре с enum и 3-мя uint_16 добавилось... видимо 2 байта в конце. По структуре Ctrl никаких замечаний не увидел. Добавил uint8_t в конец Ctrl. Получил замечание, что добавило padding. Делаю вывод - ничего не бойся, не проси...  Сам Кейл придет и принесет.
|
|
|
|
|
Dec 20 2013, 11:14
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 24-11-07
Пользователь №: 32 633

|
Цитата(ViKo @ Dec 20 2013, 15:08)  enum занимают по 32 бита! Неоправданная роскошь. Каждый из элементов enum - это int. Так что если машинное слово 32-х разрядное, то всё верно.
--------------------
Если друг оказался вдруг и не друг и не враг, а - JTAG.
|
|
|
|
|
Dec 20 2013, 11:44
|

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

|
Цитата(PheeL @ Dec 20 2013, 14:14)  Каждый из элементов enum - это int. Так что если машинное слово 32-х разрядное, то всё верно. Да, верно. Просто я об этом не задумывался. Да оно и нашлось всего в одном месте. Там и не сам enum стоял, а производный тип - typedef enum {...} ... Заменю на uint16_t и сэкономлю 4 байта! Что любопытно. Имею в структуре 2 байта, в первом - битовые поля, во втором - uint8_t (вообще, reserv, для выше сказанного выравнивания). Так вот, такую 2-байтовую структуру Keil размещает в суперструктуре, не выравнивая по 2-байтовой границе. Как и написано по вышеприведенной ссылке, структура выравнивается по границе ее наибольшего члена.
|
|
|
|
Сообщений в этой теме
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 ViKo Всплыл вопрос, кажется, подойдет в эту тему.
Созда... Dec 20 2013, 09:45 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 Сергей Борщ Цитата(ViKo @ Dec 20 2013, 11:45) В конце... Dec 24 2013, 16:06  AHTOXA Цитата(Сергей Борщ @ Dec 24 2013, 22:06) ... Dec 24 2013, 18:52 ViKo Почитал здесь - http://www.keil.com/support/man/do... Dec 20 2013, 10:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|