Re: Začátečnický dotaz na C - variant ve struktuře

Petr Labaj labaj na volny.cz
Středa Listopad 12 22:26:52 CET 2014


Jestli vím co dělam? Opravuji vymyšlenost firmy STM.
Jejích definice:

typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
x     __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
x     __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;

Potřebuju:

typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
x    __IO uint32_t BSRR;    /*!< GPIO port bit set/reset register,  Address offset: 0x18      */
  __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;

Ty podstatné řádky jsou označené 'x' na začátku.
Z důvodu kompatibility se stávajícím SW musí fungovat jak zápis do 16bit registru
BSRRL a BSRRH, ale i do 32bit registru BSRR.

PL

********************************

From: "Miroslav Mraz" <mraz na seznam.cz>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Wednesday, November 12, 2014 10:15 PM
Subject: Re: Začátečnický dotaz na C - variant ve struktuře


typedef union {
   struct {
          u16_t mavatko;
          u16_t zavazek;
   };
   u32_t obusek;
} maj;

   maj prvni_maj;

   prvni_maj.mavatko = 1;        // zapise 1 do 16bitu
   prvni_maj.obusek  = 2;        // zapise 2 do 32 bitu

Víte jistě co děláte ?

Mrazík

Dne 12.11.2014 v 21:37 Petr Labaj napsal(a):
> Aha, takže ne alias ve struktuře, ale alias (v tomto případě union) struktur.
>
> Ale pak bych předpokládám k tomu musel přístupovat:
> maj.m1.obusek = 1;
>
> Já bych potřeboval:
> prvni_maj.mavatko = 1;        // zapise 1 do 16bitu
> prvni_maj.obusek = 2;          // zapise 2 do 32 bitu
>
> Díky.
> PL
>
>
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list