|
Проблема в том, что на дисплей выводится число ноль, когда использую следующий тестовый фрагмент:
SP_Flt_ptr = &Steam_SP;
ftoa( *SP_Flt_ptr, 3, ptr_Displ );
Если же делать так:
SP_Flt = Steam_SP;
ftoa( SP_Flt, 3, ptr_Displ );
то все нормально.
Но даже если так:
SP_Flt_ptr = &Steam_SP;
SP_Flt = *SP_Flt_ptr;
ftoa( SP_Flt, 3, ptr_Displ );
Все равно не работает.
В первом и последнем примере компилятор генерит вызов следующей процедуры:
__EEPROMRDD:
ADIW R26,2
RCALL __EEPROMRDW
MOV R23,R31
MOV R22,R30
SBIW R26,2
__EEPROMRDW:
ADIW R26,1
RCALL __EEPROMRDB
MOV R31,R30
SBIW R26,1
__EEPROMRDB:
SBIC EECR,EEWE
RJMP __EEPROMRDB
PUSH R31
IN R31,SREG
CLI
OUT EEARL,R26
OUT EEARH,R27
SBI EECR,EERE
IN R30,EEDR
OUT SREG,R31
POP R31
RET
Вроде бы все нормально. Берется четыре байта из EEPROM и складется в r30, r31, r23, r22. По идее должно работать. Если кто сталкивался с такой проблемой, или может попробовать, то не откажите в любезности.
Спасибо!
E-mail: info@telesys.ru