Чтение чисел с плавающей точкой из EEPROM, через указатель, в Code Vision AVR.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ДМ 20 июня 2004 г. 22:33

Проблема в том, что на дисплей выводится число ноль, когда использую следующий тестовый фрагмент:
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