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