Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

може ли пик да греши?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2831
Страница 1 от 1

Автор:  nik [ Чет Авг 31, 2006 5:39 am ]
Заглавие:  може ли пик да греши?

програмата беше така:
signed32bit = signed8bit;
след компилатора:
03A0: MOVFF 26,00
03A4: CLRF 01
03A6: CLRF 02
03A8: CLRF 03
03AA: BTFSS 26.7
03AC: BRA 03B4
03AE: DECF 01,F
03B0: DECF 02,F
03B2: DECF 03,F
03B4: MOVFF 03,D3
03B8: MOVFF 02,D2
03BC: MOVFF 01,D1
03C0: MOVFF 00,D0

всичко работи 6 но се наложи малка поправка
signed32bit = signed16bit;

03A0: MOVFF 31,00
03A4: MOVFF 32,01
03A8: CLRF 02
03AA: CLRF 03
03AC: BTFSS 32.7
03AE: BRA 03B4
03B0: DECF 02,F
03B2: DECF 03,F
03B4: MOVFF 03,D3
03B8: MOVFF 02,D2
03BC: MOVFF 01,D1
03C0: MOVFF 00,D0

и тогава започнаха мъките
първо обвиних компилатора че e омазал работите но като се зачетах в асемблера се оказа че всичко е ок, може да не е оптималния вариант но сметката е наред и като пусна процесора работи но от време на време греши, като най честата грешка е когато signed16bit прави преход от 0 към -1, тогава при -1 (0xffff) на signed32bit се присвоява 0x00ffffff,а би следвало да е 0xffffffff.греши по няколко пъти в минута без закономерност. тази е една от многото сметки които се правят при прекъсване от таймер през 500микросекунди(няма други прекъсвания пойнтери или нещо друго което да пипа променливите или по адресите им), но греши единствено и само тук
написах на два последователни реда
signed32bit1 = signed16bit;
signed32bit2 = signed16bit;
отново греши, но ту на единия ред ту на другия без някаква закономерност, пробвах да сменя адреса от който започва кода, адреса на който са променливите, времето по кето се прави пресмятането, нов процесор (18ф4431), премахване на почти целия код, откачане на всички ненужни пинове, захранването е стабилно филтрирано с кондензатори както е по книгите
тогава ми хрумна да върна пак старото signed32bit = signed8bit и всичко заработи нормално

някой знае ли какво става?!?!?!?!?!?

Автор:  Gogo [ Чет Авг 31, 2006 7:35 am ]
Заглавие: 

С кой компилатор?

Автор:  zaphod [ Чет Авг 31, 2006 8:21 am ]
Заглавие: 

как засичаш ситуацията когато става грешката? кода изглежда наред, определено не е от компилатора. сигурен ли си че омазването не става някъде след присвояването? според мене, сложи някакъв асерт веднага след присвояването, който проверява еднаквостта на двата старши байта, освен разбира се ако не правиш точно така за да уловиш грешката. ако асерта мине, а въпреки това грешката се появи, значи омазването е по-късно някъде.
пробвал ли си на друг чип от същия тип? аз съм случвал един път на хардуерна грешка, така че нищо не е изключено.

Автор:  nik [ Чет Авг 31, 2006 9:02 am ]
Заглавие: 

:evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil:
мамка им пиклюфци
защо слагат единия 16 битов брояч с буфер за четене на двата байта едновременно а другия пак 16 бита без буфер?!?
ама трябва да се наспи човек че да се сети ...........

Автор:  Gogo [ Чет Авг 31, 2006 10:31 am ]
Заглавие: 

nik написа:
защо слагат единия 16 битов брояч с буфер за четене на двата байта едновременно а другия пак 16 бита без буфер?!?
Ако става въпрос за таймерите, не съм срещал още такъв пик! Дай пример, при кой пик е така?
Това за буфера има ли общо с гореописания проблем?

Автор:  nik [ Чет Авг 31, 2006 10:45 am ]
Заглавие: 

18f4431
в пдф-а хубаво са показали как да си четеш таймер 5 ама нищо не казват за брояча на QE модула

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/