Предупреждение об ошибке ограничения с использованием Enum в ADA
Я хотел бы знать, почему предупреждения об ошибках ограничения появляются в 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?
Заранее спасибо!:)
1 ответ
Я думаю, что вы должны компилировать для ограниченного времени выполнения (Ravenscar?), Поэтому любое исключение приведет к вызову Last_Chance_Handler
,
Я встречал много раздражающих предупреждений, подобных этому, и в конце концов проследил это до-gnatwa
("Включить всю информацию / предупреждения, отмеченные ниже знаком +"), что позволяет-gnatw.x
("Включить предупреждения для нелокального исключения").
Вы можете подавить предупреждения с помощью -gnatw.X
,
(Для информации, вы можете увидеть параметры командной строки, сказав gnatmake -h
(или же arm-eabi-gnatmake -h
). Много.)