Ada编译器选择了错误的重载函数

Ada编译器选择了错误的重载函数,ada,gnat,Ada,Gnat,我正在使用avr ada来编译我的程序。我想将一个无符号的_16变量右移两次。 Interfaces.Shift_Right重载并提供未签名_8和未签名_16 当我编译时,我得到错误“预期的类型接口。未签名的_8”,“发现的类型接口。未签名的_16”。我试图指定输入为无符号的_16,但它不起作用。如何指定正确的函数 与AVR;使用AVR; 采用AVR.MCU; 使用AVR.Timer0; 用AVR.ADC; 有接口; 使用接口; 程序闪烁指示灯亮起 adc_结果_10:无符号_16:=0; ad

我正在使用avr ada来编译我的程序。我想将一个无符号的_16变量右移两次。 Interfaces.Shift_Right重载并提供未签名_8和未签名_16

当我编译时,我得到错误“预期的类型接口。未签名的_8”,“发现的类型接口。未签名的_16”。我试图指定输入为无符号的_16,但它不起作用。如何指定正确的函数

与AVR;使用AVR; 采用AVR.MCU; 使用AVR.Timer0; 用AVR.ADC; 有接口; 使用接口; 程序闪烁指示灯亮起 adc_结果_10:无符号_16:=0; adc_结果_8:无符号_8:=0; 开始 -将OC0A引脚设置为输出,这是输出切换所必需的 MCU.DDRD_位:=其他=>DD_输出; -将所有引脚设置为低位 MCU.PortD:=1600; -清除寄存器 MCU.TCCR0B:=1600; -初始化计时器以清除比较时的计时器,缩放输入 -时钟,并设置一个值以比较计时器。 Timer0.Init\u CTC Timer0.Scale\u乘以1024,溢出=>1; -在比较匹配时切换OC0A引脚 定时器0.Set_输出_比较_模式_切换; -初始化模数转换器 ADC.InitADC.Scale_乘以_64,Ref=>ADC.Is_Vcc; 永远循环 adc_结果_10:=adc.Convert_10bitCh=>0; adc_结果_10:=移位_右无符号_16'adc_结果_10,2;-' adc_结果_8:=无符号_8adc_结果_10; Timer0.Set_溢出_Atadc_结果_10; 端环; 末端闪烁发光二极管; 该行:

Timer0.Set_Overflow_At(adc_result_10);
应该是:

Timer0.Set_Overflow_At(adc_result_8);

我没有仔细查看错误消息中的行号。哎呀。

如果你不确定调用哪个函数,因为它重载了,你可以通过重命名来构造一个唯一的名称

function My16_Shift_Right (Item : in Unsigned_16; Amount : Natural) return Unsigned_16 
    renames Interfaces.Shift_Right;
然后测试您对程序的思考方式。

您是称为右移还是右移?请更新您的问题,以显示说明问题的完整小程序。在Linux上使用GNAT编译时不会出错,参考的是pastebin上的一个示例,而不是问题中的代码。