1

デバイスを列挙として登録しようとしています。レジスタからの読み取りには 2 つの値があります -> 0 は完了を意味し、1 は保留中を意味します。同様に、レジスタへの書き込みには 2 つの値があります -> 0 はアクションがなく、1 はリセットを行います。だから、私は次のコードを書いた

   type Soft_Reset is (Done, Pending, No_Action, Reset);
   for Soft_Reset use
     (Done      => 0,
      Pending   => 1,
      No_Action => 0,
      Reset     => 1);

しかし、これはエラーをスローします

gcc-4.6 -c -g -gnatg -ggdb -I- -gnatA /home/sid/tmp/device.adb
device.ads:93:20: enumeration value for "No_Action" not ordered
gnatmake: "/home/sid/tmp/device.adb" compilation error

列挙型の値が重複する可能性はありますか?

4

3 に答える 3

4

別のオプションは、値の名前を変更することです。列挙値は、関数として名前を変更できます。

type Soft_Reset is (Done, Pending);
for Soft_Reset use
     (Done      => 0,
      Pending   => 1);

function No_Action return Soft_Reset renames Done;
function Reset return Soft_Reset renames Pending;
于 2013-08-28T17:32:56.827 に答える