Hi! Нужна бы срочная помощь - может кто сталкивался или подскажет что и где проверить:
Вообще-то, есть float деления и умножения как в ISR, так и в фоновых процедурах (AT89S53). Глюки какие-то странные, даже не могу однозначно определить. Начинает лезть мусор на LCD, сбоят символы, программа ыообще куда-то улетает. И все сильно зависит от случая - то может работать долго и устойчиво, то совершенно безобидное редактирование текста вообще вводит программу в режим постоянно перезапуска. Похоже, что это связано с float - убираю расчеты (везде не могу) - становится лучше, но не совсем. Может, компилятор что-то c RAM не то делает? DATA у меня полная моими переменными, IDATA - также, но для стека место вроде есть.
Program Size: data=204.5 xdata=0 code=10120 TYPE BASE LENGTH RELOCATION SEGMENT NAME -----------------------------------------------------
- * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" DATA 0008H 0011H UNIT _DATA_GROUP_ IDATA 0019H 0006H UNIT _IDATA_GROUP_ BL51 BANKED LINKER/LOCATER V5.01 001FH 0001H *** GAP *** DATA 0020H 0002H BIT_ADDR ?BA?HYGROMETER BIT 0022H.0 0000H.5 UNIT ?BI?HYGROMETER 0022H.5 0000H.3 *** GAP *** DATA 0023H 003FH UNIT ?DT?HYGROMETER IDATA 0062H 006BH UNIT ?ID?HYGROMETER IDATA 00CDH 0001H UNIT ?STACK
Стека вроде должно хватать (как точно узнать?), все умножения/деления reentrant. Но даже окружение фоновых расчетов запретами прерываний не помогает. И в LCD (24х2) уже все перерыл и скопом пересмотрел, непонято что глючит (работаю по анализу готовности) - то символы проглотит, то изменит, то такие коды получит, что совсем экран очистит навеки.
Куда копать и что проверить?