Код
//------------------------------------------------------------------------
// Ожидание готовности канала АЦП
//------------------------------------------------------------------------
//static
void WaitForReady(stADCStatus *ADC)
{
GetRealTime(&RealTime);
if((RealTime - ADC->StartTime) > ADC_CALIBR_DELAY)
ADC->Phase = adcStartUp;
}
//----------------------------------------------------------------------
// Калибровка АЦП по нулю
//----------------------------------------------------------------------
void ADC_ZeroCal(stADCStatus *ADC)
{
if((ReadRegister(erMode) & 0x3) == 1)
{
Calibrate(adcFullCal, ADC->CurrentChannel);
ADC->Phase = adcFullCal;
}
else
WaitForReady(ADC);
}
// Ожидание готовности канала АЦП
//------------------------------------------------------------------------
//static
void WaitForReady(stADCStatus *ADC)
{
GetRealTime(&RealTime);
if((RealTime - ADC->StartTime) > ADC_CALIBR_DELAY)
ADC->Phase = adcStartUp;
}
//----------------------------------------------------------------------
// Калибровка АЦП по нулю
//----------------------------------------------------------------------
void ADC_ZeroCal(stADCStatus *ADC)
{
if((ReadRegister(erMode) & 0x3) == 1)
{
Calibrate(adcFullCal, ADC->CurrentChannel);
ADC->Phase = adcFullCal;
}
else
WaitForReady(ADC);
}
Ошибка возникает в строке WaitForReady(ADC);
Непонятно, почему нельзя взять входной указатель на структуру и перекинуть его в вызываемую функцию.
Можно, конечно, заинлайнить эти несчастные 3 строчки по месту, но как-то неэстетично...
Да и с глюком нужно разобраться
Новые подробности:
заинлайнил, ничего не изменилось.
Опытным путём локализовал:
if((RealTime - ADC->StartTime) > ADC_CALIBR_DELAY)
Вот на это ругается.
StartTime - unsigned long
В чём дело? Всегда раньше работало...
#########
В общем, с помощью костылей и какой-то матери...
Код
void WaitForReady(stADCStatus *ADC)
{
unsigned long temp = ADC->StartTime;
GetRealTime(&RealTime);
if((RealTime - temp) > ADC_CALIBR_DELAY)
ADC->Phase = adcStartUp;
}
{
unsigned long temp = ADC->StartTime;
GetRealTime(&RealTime);
if((RealTime - temp) > ADC_CALIBR_DELAY)
ADC->Phase = adcStartUp;
}
всё заработало. Что это было, в упор не понимаю.