Я использую avr-ada
для компиляции своей программы. Я хочу дважды сдвинуть вправо переменную unsigned_16
. Interfaces.Shift_Right
перегружен и обеспечивает как Unsigned_8
, так и Unisgned_16
.
Когда я компилирую, я получаю сообщение об ошибке «ожидаемый тип «Interfaces.Unsigned_8»», «найден тип «Interfaces.Unsigned_16»». Я пытался указать, что ввод является Unsigned_16
, но это не сработает. Как указать правильную функцию?
with AVR; use AVR;
with AVR.MCU;
with AVR.Timer0;
with AVR.ADC;
with Interfaces;
use Interfaces;
procedure Flash_Led is
adc_result_10 : Unsigned_16 := 0;
adc_result_8 : Unsigned_8 := 0;
begin
-- set OC0A pin as output, required for output toggling
MCU.DDRD_Bits := (others => DD_Output);
-- set all pins low
MCU.PortD := 16#00#;
-- clear register
MCU.TCCR0B := 16#00#;
-- initialize timer to Clear Timer on Compare, scale the input
-- clock and set a value to compare the timer against.
Timer0.Init_CTC (Timer0.Scale_By_1024, Overflow => 1);
-- Toggle the OC0(A)-Pin on compare match
Timer0.Set_Output_Compare_Mode_Toggle;
-- Initialize ADC
ADC.Init(ADC.Scale_By_64, Ref => ADC.Is_Vcc);
loop -- loop forever
adc_result_10 := ADC.Convert_10bit(Ch => 0);
adc_result_10 := Shift_Right(Unsigned_16'(adc_result_10), 2); --'
adc_result_8 := Unsigned_8(adc_result_10);
Timer0.Set_Overflow_At(adc_result_10);
end loop;
end Flash_Led;
Right_Shift
илиShift_Right
? Пожалуйста, обновите свой вопрос, чтобы показать (небольшую) полную программу, иллюстрирующую проблему. - person Keith Thompson   schedule 30.12.2014