Я хотел бы знать, почему предупреждения об ошибках ограничения выводятся в Ada при использовании перечислений, как в примере ниже. Поскольку я использовал Enums, я могу заменить их для лучшей реализации.
type Uart_Instance_Type is (COM1, COM2, COM3);
for Uart_Instance_Type use
( COM1 => 16#0001# ,
COM2 => 16#0002# ,
COM3 => 16#0003#
);
type UART_Register_Type is record
SR : Half_Word; -- USART Status register
Reserved_0 : Half_Word;
DR : Half_Word; -- USART Data register
Reserved_1 : Half_Word;
BRR : Half_Word; -- USART Baud rate register
Reserved_2 : Half_Word;
end record
with volatile;
for UART_Register_Type use record
SR at 0 range 0 .. 15;
Reserved_0 at 2 range 0 .. 15;
DR at 4 range 0 .. 15;
Reserved_1 at 6 range 0 .. 15;
BRR at 8 range 0 .. 15;
Reserved_2 at 10 range 0 .. 15;
end record;
type UART_Register_Access is access all UART_Register_Type;
UARTs: array (Uart_Instance_Type range COM1 .. COM3) of aliased UART_Register_Access;
Приглашение компилятора в последней строке ("UARTs: ...)" показывает:
warning: "Constraint Error" may call Last_Chance_Handler
Есть ли лучшая реализация, чтобы избежать этих предупреждений при использовании Enums?
Заранее спасибо! :)
UART_Register_Access
? - person Holt   schedule 12.05.2015