|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 1:45 pm
|
Страница 1 от 1
|
[ 6 мнения ] |
|
| Автор |
Съобщение |
|
nik
Ранг: Форумен бог
Регистриран на: Сря Мар 22, 2006 3:25 am Мнения: 6418
|
 може ли пик да греши?
програмата беше така:
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 и всичко заработи нормално
някой знае ли какво става?!?!?!?!?!?
|
| Чет Авг 31, 2006 5:39 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
С кой компилатор?
|
| Чет Авг 31, 2006 7:35 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
как засичаш ситуацията когато става грешката? кода изглежда наред, определено не е от компилатора. сигурен ли си че омазването не става някъде след присвояването? според мене, сложи някакъв асерт веднага след присвояването, който проверява еднаквостта на двата старши байта, освен разбира се ако не правиш точно така за да уловиш грешката. ако асерта мине, а въпреки това грешката се появи, значи омазването е по-късно някъде.
пробвал ли си на друг чип от същия тип? аз съм случвал един път на хардуерна грешка, така че нищо не е изключено.
|
| Чет Авг 31, 2006 8:21 am |
|
 |
|
nik
Ранг: Форумен бог
Регистриран на: Сря Мар 22, 2006 3:25 am Мнения: 6418
|
|
| Чет Авг 31, 2006 9:02 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Ако става въпрос за таймерите, не съм срещал още такъв пик! Дай пример, при кой пик е така?
Това за буфера има ли общо с гореописания проблем?
|
| Чет Авг 31, 2006 10:31 am |
|
 |
|
nik
Ранг: Форумен бог
Регистриран на: Сря Мар 22, 2006 3:25 am Мнения: 6418
|
18f4431
в пдф-а хубаво са показали как да си четеш таймер 5 ама нищо не казват за брояча на QE модула
|
| Чет Авг 31, 2006 10:45 am |
|
|
|
Страница 1 от 1
|
[ 6 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 0 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|