Frédéric Praca
2015-06-16 20:54:51 UTC
Bonjour les gens,
dans le cadre de certains développement bas-niveau, j'ai été confronté à
la création records représentant les registres d'un processeur.
Mon problème est le suivant.
Dans certains cas, il y a des "trous" :)
En clair, certains registres contiennent des zones réservées dans
lesquelles on n'intervient pas. Exemple :
type GPIO_Register is record
MODER : MODER_IOs := (others => GPIO.Mode_AN);
OTYPER : OTYPER_IOs := (others => GPIO.Type_PP);
RESERVED : Bits_16 := 16#0000#; -- Always 0
OSPEEDR : OSPEEDR_IOs := (others => GPIO.Speed_4MHz);
PUPDR : PUPDR_IOs := (others => GPIO.No_Pull);
IDR : Inputs := (others => False);
RESERVED_IDR : Bits_16 := 12#0000#;
ODR : Outputs := (others => False);
RESERVED_ODR : Bits_16 := 16#0000#;
BSRR : Word := 16#0000#;
LCKR : LCKn := (others => False);
LCKK : Boolean := False;
AFRL : Bits_8x4 := (others => GPIO.AF_USART1);
AFRH : Bits_8x4 := (others => GPIO.AF_USART1);
end record;
N'y a-t-il pas un meilleur moyen de faire sachant que l'utilisation de
clauses de représentation spécifiant des zones plus grandes que
nécessaires retourne un warning de type "unused bits" ?
Merci de vos éclaircissements
Fred
dans le cadre de certains développement bas-niveau, j'ai été confronté à
la création records représentant les registres d'un processeur.
Mon problème est le suivant.
Dans certains cas, il y a des "trous" :)
En clair, certains registres contiennent des zones réservées dans
lesquelles on n'intervient pas. Exemple :
type GPIO_Register is record
MODER : MODER_IOs := (others => GPIO.Mode_AN);
OTYPER : OTYPER_IOs := (others => GPIO.Type_PP);
RESERVED : Bits_16 := 16#0000#; -- Always 0
OSPEEDR : OSPEEDR_IOs := (others => GPIO.Speed_4MHz);
PUPDR : PUPDR_IOs := (others => GPIO.No_Pull);
IDR : Inputs := (others => False);
RESERVED_IDR : Bits_16 := 12#0000#;
ODR : Outputs := (others => False);
RESERVED_ODR : Bits_16 := 16#0000#;
BSRR : Word := 16#0000#;
LCKR : LCKn := (others => False);
LCKK : Boolean := False;
AFRL : Bits_8x4 := (others => GPIO.AF_USART1);
AFRH : Bits_8x4 := (others => GPIO.AF_USART1);
end record;
N'y a-t-il pas un meilleur moyen de faire sachant que l'utilisation de
clauses de représentation spécifiant des zones plus grandes que
nécessaires retourne un warning de type "unused bits" ?
Merci de vos éclaircissements
Fred