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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Приведение типа указателя на элемент структуры
_Pasha
сообщение Oct 17 2012, 18:56
Сообщение #31


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ViKo @ Oct 17 2012, 21:47) *
Это если один бит задавать. А по началу можно весь порт установить в нужное состояние.

wacko.gif Да хоть 100! Из 16-ти

Сообщение отредактировал _Pasha - Oct 17 2012, 18:57
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 17 2012, 18:56
Сообщение #32


Универсальный солдатик
******

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



Цитата(AHTOXA @ Oct 17 2012, 21:52) *
Вообще-то для этого есть ODR sm.gif

Точно! Что-то я упустил его из виду! Вот спасибо! sm.gif Пойду поправлю нафиг. Еще один шаг к совершенству.
А он у них (индусов) - тоже, 32-х разрядный! sm.gif
Кстати, если про BSRR в Ref Manual написано "These bits are write-only and can be accessed in word, half-word or byte mode", то про доступ к ODR - молчок. Можно ли туда послать 16 битовое число?

Про IDR написано конкретно: These bits are read-only and can be accessed in word mode only.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 17 2012, 18:59
Сообщение #33


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(_Pasha @ Oct 18 2012, 00:50) *
Вообще-то подозрения в выравнивании - не мои. Если MrYuran сталкивался, думаю, он поделится.

А в чём тогда "правильность" кода с union-ами?
Цитата(_Pasha @ Oct 18 2012, 00:50) *
Хотя, странно -fpack-struct=8 должен бы, как представляется...

Как я понял, -fpack-struct[=x] может только сильнее упаковать структуру. Проредить её может __attribute__ ((aligned (x))). Но его нужно явно указывать для члена структуры, случайно так не сделать.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 19:17
Сообщение #34


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AHTOXA @ Oct 17 2012, 21:59) *
А в чём тогда "правильность" кода с union-ами?

В данном случае - чисто йуридически
Цитата
warning: #1441-D: nonstandard cast on lvalue

Где оно выползет боком - фантазии не хватает представить.
Для АРМов сумасшедшие компиляторы а-ля CodeVision для АВРок - существуют? sm.gif
Если бы были - там бы и повылезло.

Сообщение отредактировал _Pasha - Oct 17 2012, 19:20
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 17 2012, 19:20
Сообщение #35


Универсальный солдатик
******

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



Цитата(_Pasha @ Oct 17 2012, 22:17) *
В данном случае - чисто йуридически
Где оно выползет боком - фантазии не хватает представить.

Нигде. Только сон будет менее спокойным.
P.S. Видно по результатам компиляции - все нормально.
Go to the top of the page
 
+Quote Post
Дмитриос
сообщение Oct 17 2012, 20:22
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 22-04-10
Пользователь №: 56 826



Цитата(_Pasha @ Oct 17 2012, 20:21) *
Я тут давеча психанул и наваял по означенному выше принципу. Ессно, только структуры, без всяких функций сомнительного сервиса. Но у проекта, который сейчас пилю, уже поезд ушел, тестинг откладывается.

Простите а вот под какой контроллер вы так сделали?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 20:39
Сообщение #37


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Дмитриос @ Oct 17 2012, 23:22) *
Простите а вот под какой контроллер вы так сделали?

STM32f100
Но, сделал - и пожалел. Надо сразу базу данных заводить и оттуда генерить. Писанина - плохой стиль.
Go to the top of the page
 
+Quote Post
Дмитриос
сообщение Oct 17 2012, 20:53
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 22-04-10
Пользователь №: 56 826



Цитата(_Pasha @ Oct 18 2012, 00:39) *
STM32f100
Но, сделал - и пожалел. Надо сразу базу данных заводить и оттуда генерить. Писанина - плохой стиль.

А разве производитель CMSIS ные либы со структурами не создаёт для регистров данного контроллера или у Вас свои какие-то структуры?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 21:31
Сообщение #39


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Дмитриос @ Oct 17 2012, 23:53) *
А разве производитель CMSIS ные либы со структурами не создаёт для регистров данного контроллера или у Вас свои какие-то структуры?

Они обходят стороной битовые поля, имея ввиду, что применение их в общеупотребительном смысле неэффективно. Я так думаю, зря.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 18 2012, 03:39
Сообщение #40


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(_Pasha @ Oct 18 2012, 01:17) *
В данном случае - чисто йуридически

Да нет же, я не об этом! sm.gif Там ViKo просто не то не к тому привёл.
Я вот о чём. Чем ваш вариант
Код
typedef struct
{
  __IO uint32_t DR;
  union
{
  __IO uint8_t  reg8bit;
  uint32_t IDR_space;
} IDR;
  __IO uint32_t CR;
} CRC_TypeDef;

лучше индуистского варианта
Код
typedef struct
{
  __IO uint32_t DR;
  __IO uint8_t  reg8bit;
  __IO uint8_t  spacer;
  __IO uint16_t  spacer2;
  __IO uint32_t CR;
} CRC_TypeDef;

?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 18 2012, 05:12
Сообщение #41


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(_Pasha @ Oct 17 2012, 22:50) *
Вообще-то подозрения в выравнивании - не мои. Если MrYuran сталкивался, думаю, он поделится.

Сталкивался, не то слово.
MSPGCC образца 2008 года и iostructures.h
Причем, там явно было указано __attribute__ (("packed")) под каждой структурой, однако ж..
После серии необъяснимых чудес пришлось лезть в листинг и сверять адреса регистров.
Помогло только -fpack-struct, когда все структуры принудительно упаковывались.
После того все переписал на макросы Волкова.
Конечно, не так красиво, зато работает железно.

Хотя, сейчас поглядел...
Код
#if defined(__MSP430_HAS_PORT0__)
struct port0_t {
  ioregister_t    in;    /* Input */
  ioregister_t    out;    /* Output */
  ioregister_t    dir;    /* Direction */
  ioregister_t    ifg;    /* Interrupt Flag */
  ioregister_t    ies;    /* Interrupt Edge Select */
  ioregister_t    ie;    /* Interrupt Enable */
};

__MSP430_EXTERN__ struct port0_t port0 asm("0x0010");
#endif


Здесь почему-то упаковки нет.. Странно..
Это в корне меняет дело, а я на компилятор грешил.
Но суть то этого не меняется. Автоматически выровненная структура "прореживается" и все адреса сползают.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 18 2012, 06:14
Сообщение #42


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MrYuran @ Oct 18 2012, 11:12) *
Это в корне меняет дело
...
Но суть то этого не меняется.

Жжоте biggrin.gif
Тем не менее. test.c:
Код
typedef struct
{
    unsigned char a;
    unsigned char b;
}str;

char zzz[1 - 2*(sizeof(str) != 2)];


gcc -c test.c - порядок.
avr-gcc -c test.c - порядок.
arm-kgp-gcc -c test.c - порядок.
arm-none-eabi-gcc -c test.c - порядок.
msp430-gcc -c test.c - порядок.

Что надо сделать, чтобы "проредило"?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 18 2012, 06:25
Сообщение #43


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Oct 18 2012, 10:14) *
Что надо сделать, чтобы "проредило"?

Я не знаю, что надо сделать, но точно знаю теперь, чего не надо..
Не надо использовать такие структуры без принудительной упаковки, во избежание.
Мне совершенно было не смешно, когда port1.out.pin3 = 1 махал битами в регистре dir вместо out (а это ещё надо было найти)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 18 2012, 06:55
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(AHTOXA @ Oct 18 2012, 10:14) *
Что надо сделать, чтобы "проредило"?

Вставить #pragma pack(n) или указать транслятору -fpack-struct=n cо значением n отличным от 1.
К сожалению, в документации на gcc нигде нет упоминания: какое значение n (величина выравнивания) принято "по-умолчанию"...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 18 2012, 07:44
Сообщение #45


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AHTOXA @ Oct 18 2012, 06:39) *
Да нет же, я не об этом! sm.gif Там ViKo просто не то не к тому привёл.

Дык я это "не то не к тому" унаследовал, пытаясь сказать, что сабжевое приведение - лишняя суета и потенциальный источник проблем. Ну не может быть, чтобы хаки и нормальные построения вели себя везде одинаково!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:48
Рейтинг@Mail.ru


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