|
В этом коде компилятор ругается на помеченные звездочкой строчки. Первая ошибка - "error: parse error before "AdcVoltageAverage"". Вторая не ошибка а предупреждение: "warning: integer overflow in expression". Предупреждение не понятно тем, что переполнения быть не может, так как KdVMiddle меньше 65535, вот объявления:
#define OnMiddleValue 180
#define OffValve 240
#define KdVMiddle OffValve*OnMiddleValue
uint16_t AdcVoltageAverage;
Компилирую avr-gcc (GCC) 3.4.3.
Вот сам код:
-----------------------------------------------------------
INTERRUPT (SIG_ADC)
{
uint8_t i;
uint16_t Time,Min,Max;
AdcInterim[ShareSecond]=ADCL+(ADCH<<8);
E-mail:
info@telesys.ru
++ShareSecond;
if (ShareSecond>5)
{
ShareSecond=0;
if (SystemFlags.AdcVoltage==1)
{
AdcVoltageAverage=0;
Min=AdcInterim[0];
Max=Min;
for (i=0;i<6;i++)
{
Time=AdcInterim[i]
* AdcVoltageAverage+=Time;
здесь выдается "error: parse error before "AdcVoltageAverage""
if (Time
}
AdcVoltageAverage=AdcVoltageAverage/6;
Time=Max-Min;
Time=(100*Time)/AdcVoltageAverage;
if (SystemFlags.ValveOn==1)
{
if (AdcVoltageAverage>MaxVoltageValue)
{
ErrorFlags.LargeVoltageOn=1;
}
else
{
ErrorFlags.LargeVoltageOn=0;
if (SystemFlags.ValveFull==1)
{
Time=KdVFull/AdcVoltageAverage;
OnFull=(uint8_t)Time;
OCR0B=OnFull;
}
else
{
* Time=KdVMiddle/AdcVoltageAverage;
здесь выдается "warning: integer overflow in expression"
OnMiddle=(uint8_t)Time;
OCR0B=OnMiddle;
}
}
}
else
{
if (AdcVoltageAverage
ErrorFlags.SmallVoltageOff=1;
}
else
{
ErrorFlags.SmallVoltageOff=0;
}
}
AdcVoltageNew=AdcAdd;
SystemFlags.AdcVoltage=0;
ADMUX|=(1<
else
{
AdcCurrentNew=AdcAdd;
SystemFlags.AdcVoltage=1;
ADMUX&= ~(1<
AdcAdd=0;
SystemFlags.ReadyAdc=1;
}
}
Ответы