Предупреждение об ошибке ограничения с использованием 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). Много.)

Другие вопросы по тегам