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

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


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

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



Цитата(MrYuran @ Oct 17 2012, 15:54) *
А неважно.
Выровняет по границе машинного слова (16/32/64) - и все ваши RESERVED превратятся в дополнительные 16/32/64р "дыры"

Не выравняет. sm.gif Потому что имеется следующий код.
Код
typedef struct {
  __I uint8_t RCR;    //<! Revision Code Register,            0x00
  __I uint8_t DBSR;    //<! Dislpay Buffer Size Register,        0x01
  __I uint8_t CRR;    //<! Configuration Readback Register,        0x02
} ReadOnlyConf_t;    //<! Read-Only Configuration Registers

typedef struct {
  __IO uint8_t MCCR;    //<! Memory Clock Configuration Register,    0x04
  __IO uint8_t PCCR;    //<! Pixel Clock Configuration Register,    0x05
} ClockConf_t;        //<! Clock Configuration Registers
...

#define DPYCTRL_BASE    ((uint32_t)0x6C000000)    //<! Dysplay base address
#define S1DREGS_BASE    DPYCTRL_BASE        //<! S1D13706 registers base

#define READONLYCONF_BASE    S1DREGS_BASE
#define CLOCKCONF_BASE        S1DREGS_BASE + 0x04
#define LOOKUPTABLE_BASE    S1DREGS_BASE + 0x08
...
#define READONLYCONF    ((ReadOnlyConf_t *) READONLYCONF_BASE)
#define CLOCKCONF    ((ClockConf_t *) CLOCKCONF_BASE)
#define LOOKUPTABLE    ((LookUpTable_t *) LOKUPTABLE_BASE)
...

А дальше - обращения по указателям...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 15:18
Сообщение #17


;
******

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



Цитата(ViKo @ Oct 17 2012, 14:36) *
Для того и вводятся резервные места, ну, как в stm32xxx.h

Не надо брать пример с индуистского кода. Правильный ответ(причем, всегда)
Код
typedef struct
{
  __IO uint32_t DR;         /*!< CRC Data register,             Address offset: 0x00 */
  union
{
  __IO uint8_t  reg8bit;        /*!< CRC Independent data register, Address offset: 0x04 */
  uint32_t IDR_space;
} IDR;
  __IO uint32_t CR;         /*!< CRC Control register,          Address offset: 0x08 */
} CRC_TypeDef;


Почему у них идеологически не так? Патамушо эти хедеры не для того, чтобы ими пользоваться! sm.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 17 2012, 15:44
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(_Pasha @ Oct 17 2012, 18:18) *
Патамушо эти хедеры не для того, чтобы ими пользоваться! sm.gif

Интересно, а чем же пользоваться?
Самому хидеры на процы делать?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 16:21
Сообщение #19


;
******

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



Цитата(_Артём_ @ Oct 17 2012, 18:44) *
Интересно, а чем же пользоваться?
Самому хидеры на процы делать?

Я тут давеча психанул и наваял по означенному выше принципу. Ессно, только структуры, без всяких функций сомнительного сервиса. Но у проекта, который сейчас пилю, уже поезд ушел, тестинг откладывается.
Странно, но LPC такой ненависти не вызывают. Очень странно... sm.gif
Вообще, я там сильно повыделывался - дал битовым полям осмысленные имена... там по-хорошему надо двуязычие, тоже на основе union{}- с сохранением мнемоники и с сохранением смысла... этот момент разрулю - будет тыщи три строк.
И вроде бы взять да и сделать базу в libreoffice base, чтоб генерило то,что надо... блин, лень забадала.

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


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

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



А в каком случае может не сработать индуистский вариант? Я что-то с наскока не смог добиться, чтобы размер структуры
Код
typedef struct
{
  uint32_t DR;
  uint8_t  IDR;
  uint8_t  spacer;
  uint16_t  spacer2;
  uint32_t CR;
} CRCpeDef;

был не 12. Пробовал все мыслимые варианты -fpack-struct=1, 2, 4, 8, 16.


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


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Ух как у меня все это перекликается... и с volatile, и со структурами
Тоже бодаюсь. Чуть позже выложу, если позволите, в этой теме, ибо оооочень похоже
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 17 2012, 17:31
Сообщение #22


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

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



Цитата(_Pasha @ Oct 17 2012, 18:18) *
Не надо брать пример с индуистского кода. Правильный ответ(причем, всегда)
...

Я тоже кинулся было править stm32f2xx.h, когда увидел, что не могу одной командой установить и сбросить биты в порту. Из-за
Код
...
  __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
  __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  // __IO uint32_t BSRR;        // GPIO port bit set/reset: 0xRRRRSSSS, Address offset: 0x18
...
} GPIO_TypeDef;

Причем, BSRRL отвечает за установку бита, а BSRRH - за сброс.
Но при пользовании объединениями в имени регистра появляется дополнительное обозначение, которого не хочу.
Поэтому приведение типа указателя для меня более приемлемо.

А насчет библиотеки - функциями не пользуюсь.
А насчет определения битов - #define меня устраивают.
Главное, чтобы код не разбухал.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 17 2012, 17:47
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Итак, добавляю sm.gif
есть две области в ARM968E-S
в первой висит 16-битный супресс USB, во второй - NOR Flash

Читается/пишется в первую область только по/из фиксированным адресам
Во вторую - и так, и с инкрементом

оптимизация компилятора в Time и O3

Шины. 1-я с супрессом - 16бит, 2-я - 32 бит

Что-то фигню наблюдаю

Первая область объявлена как
Код
#define        FX2_FIFO2            (*(volatile unsigned int *)(FX2_BASE_ADDR + (0x00UL<<2)))
#define        FX2_FIFO4            (*(volatile unsigned int *)(FX2_BASE_ADDR + (0x02UL<<2)))


вторая - также через volatile, но в своем диапазоне

Доступ к памяти осцилл показывает и, судя по тестам, точно как и надо

А вот данные - не пойми чего
Для пересылки и сокращения доступа к той и другой области памяти попробовал сделать union с тремя полями - U16, U16 и U32
Например, чтение из первой области - в две U16 подряд, потом из U32 - в другую область запись

Шаманство sm.gif Не работает
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 18:22
Сообщение #24


;
******

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



Цитата(ViKo @ Oct 17 2012, 20:31) *
Я тоже кинулся было править stm32f2xx.h, когда увидел, что не могу одной командой установить и сбросить биты в порту. Из-за[кусь]
Поэтому приведение типа указателя для меня более приемлемо.


Не пойму, кто заремил BSRR, милое дело ©
Код
Inline void pin_set_by_msk(const GPIO_typedef *port, const uint16_t msk, const bool state)
{
  port->BSRR = state?(msk):(msk<<16);
}

компиляется в минимум,- жаль, редко, когда в две-это при интенсивных операциях -инструкции

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


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

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



Цитата(_Pasha @ Oct 17 2012, 21:22) *
Не пойму, кто заремил BSRR, милое дело ©

Я же и закомментировал. Сам приписал, сам убрал. Когда возникла дилемма - или писать всегда по 32 бита, или писать, когда надо, по 16-битов. В-общем, надо было иметь и ту, и другую возможность. А union ... уже говорил ... А *(uint32_t *) &GPIOB.BSRRL - то шо надо!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 17 2012, 18:35
Сообщение #26


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

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



Цитата(_Pasha @ Oct 18 2012, 00:22) *
Не пойму, кто заремил BSRR, милое дело ©

Дык, индусы, кто ж ещёsm.gif Причём битовые маски оставили как для 32-битного BSRR. (Это для F2xx.)
Я всё же такого не стерпел, и переписал это определение.
_Pasha, так в каком случае индуистский подход с ручными отступами в структурах может привести к неправильному результату? Или здесь речь чисто об эстетике? sm.gif


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


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Админы, я так понимаю, здесь свой колхоз sm.gif
я это все отправлю а "ARM, 32bit", здесь уберите, мешает всем
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 17 2012, 18:47
Сообщение #28


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

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



Цитата(_Pasha @ Oct 17 2012, 21:22) *
port->BSRR = state?(msk):(msk<<16);
...
компиляется в минимум,- жаль, редко, когда в две-это при интенсивных операциях -инструкции

Это если один бит задавать. А по началу можно весь порт установить в нужное состояние.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 17 2012, 18:50
Сообщение #29


;
******

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



Цитата(AHTOXA @ Oct 17 2012, 21:35) *
_Pasha, так в каком случае индуистский подход с ручными отступами в структурах может привести к неправильному результату? Или здесь речь чисто об эстетике? sm.gif

Вообще-то подозрения в выравнивании - не мои. Если MrYuran сталкивался, думаю, он поделится.
Хотя, странно -fpack-struct=8 должен бы, как представляется...
Я только выразил недоумение по поводу головоломок там, где их быть не должно, при передвижении на круглых колесах, тсз.sm.gif

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


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

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



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

Вообще-то для этого есть ODR sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


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


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