Отговори на тема  [ 27 мнения ]  Отиди на страница 1, 2  Следваща
PIC18F442 бъг 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение PIC18F442 бъг
Днес се сблъсках с един бъг на тоя процесор, дето изкочи доста изненадващо. Ще си споделя опита, дано някой да му е полезен (ех защо на мен нямаше кой да ми го каже).

Значи с тоя процесор имаме устройства, няколко хиляди разпиляни из целия свят. Всички устройства минават сериозно функционално тестване при пройзводството. До днес проблема не беше изкочил, нито при тестовете, нито клиент не е изпищял.

Както знаете PIC18 има стек, който има възможност при препълване или преизпразване да генерира Reset. Тъй като устройствата предполагат висока степен на сигурност, програмата трябва да улавя всякакви "fault" състояния и блокира устройството като единственото което прави след това е да бичи код на грешка. Тъй че всякакви проблеми излизат веднага и се набиват в очи. Та това и стана. Колеги ми обясняват че след последния ъпдейт на фирмуера (писан от мен), някой платки при първоначално подаване на захранването при тест, дават грешка еди кой си номер. Като върнат стария софтуер сичко било ок. А да му.... майката, почвам аз да копам.....

Интересното е че програмата гърми при аутотест процедура (прави си тест при всяко включване). Да ама аз там не съм сменял нищо по кода. Рових, рових и накрая установих че имам ресет заради проблем със стека. Ситуацията се появява едно към 10-20 опита при първоначално пускане. Бре ровене, псуване, що стария код работи, новия не. Там дето се дъни промени нема.

Реших да видя дали нема некоя нова ерата. Е имаше. 80173c.pdf , страница 2, точка 5. Много остроумно обяснение от страна на Микрочип, нищо не можеш разбра. Аз поне схванах следното - "Незнаем кога и защо, ама в много редки ситуации при много малко приложения, първата инструкция след ресет не се изпълнява". Бре мама му стара.

Загледах се в кода генериран он MPLABC18 (повечето компилатори творят същото):
Код:
0000    EF40     GOTO 0xc80
  0002    F006     NOP
  0004    0012     RETURN 0


Е сещате се какво става ако прескочиш първата инструкция.

Вкарах един NOP отначало (както любезно съветват Микрочип) и нещата заспаха (засега). Няма повече стек рисети.

Интересното е че бъга наистина се прояви "незнам как и незнам що". Толкова устройства - тестове, чудесии. Предполагам, че като съм правил промени в кода, той е станал по голям и това е провокирало болеста. А даже и болно се появява пак доста рядко - обяснение никакво. Интересното е че на например 10 платки с процесори еднаква ревизия на 6 въобще не ще да избие, на 3 се появи по веднъж на ужасно много пускания, а на една излизаше 1 към 10 пъти. Нея ми пратиха да тормозя та го сгащих. Така поне се надявам

Ако някой го интересува мога да му кажа как да изнасили MPLABC18 да вкара въпросния NOP.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Мар 13, 2007 8:51 pm
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
@Цецо, (10х)<<1000!
Какво имаш предвид да изнасилиш компилатора да ти заобикаля ератите? В Хайтек има такава директива на компилатора и винаги си ми е включена, проблема е че уъркараундва само известните бъгове :).

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Сря Мар 14, 2007 9:49 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Ами микрочипския има за някой бъгове, ама специално за тоя не съм видял, та се наложи да го принудя, стана относително лесно.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Мар 14, 2007 10:51 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Сря Яну 25, 2006 12:47 pm
Мнения: 305
Местоположение: Varna
Мнение 
е казвай де...


Сря Мар 14, 2007 11:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Ами аз лично го "изнасилих" по следния начин.

Startup библиотеките са съответно c018.o, c018i.o и c018z.o в зависимост как искате да ви се инициализират статичните променливи (без инициализация, със инициализация или нулиране). Коя точно се ползва се указва във линкерския файл включен в проекта.

За да вкарате въпросния NOP трябва да се прекомпилират сорсовете. Намират се в mcc18/src/traditional/startup. Там сорсовете съдържат нещо от сорта:

Код:
#pragma code _entry_scn=0x000000
void
_entry (void)
{
_asm goto _startup _endasm

}


Променяте го на нещо от сорта:

Код:
#pragma code _entry_scn=0x000000
void
_entry (void)
{
_asm
        nop
        goto _startup
_endasm
}


След това в предходната директория (../src/traditional) има фаил makestartup.bat който рекомпилира стартъп кода. Компилира и трите наведнъж имайте го предвид. Освен това изисква валиден път до бинарните файлове на компилатора (аз понеже пътища нямам, редактирах bat файла). След като ги компилира, компилатора вече ще ползва новите object файлове за startup кода с вмъкнатия nop.

Аз лично подходих малко по гъвкаво, предвид това, че неискам nop-а да се ръга във всеки проект за всеки процесор, а само за който аз си реша. Вместо всеки път да слагам и махам нопове и да прекомпилрам, аз си компилирах един c018.o с нопове и го слагам в директорията на проекта. MPLAB по default първо търси необходимите му файлове там. Така ако го има тоя файл ще се компилира с nop. Иначе по старо му.

Тоя подход може да се ползва за всяка от вградените библиотеки в която нещо не ви харесва.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Мар 15, 2007 10:52 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
подобно нещо го дъвкахме един път http://www.mcu-bg.com/mcu_site/viewtopic.php?p=30359&highlight=%F0%E5%F1%E5%F2#30359
е, за друг "член" на фамилията, ама явно заболяването е на епидемична основа


Чет Мар 15, 2007 12:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Е тя епидемията е ясна. Аз реших да опиша конкретния бъг и борбата с него, белким спестя ядове на някой.

Друг е въпроса колко от хората работят на принципа "ератите са за балъците", "щом работи сега начи е добре" и пр. Ама и това го нищихме.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Мар 15, 2007 12:45 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Ное 22, 2004 11:24 pm
Мнения: 1923
Местоположение: Габрово
Мнение 
Хм...
Този проблем го има и при други 18-ки... :?


Аз наскоро се сблъсках с друг проблем с PIC18F1320. В даташита пише че CCP модула може да се използва да сравнява с таймер 1 или таймер 3.

Да но... Пускам си го с таймер 3 и няма прекъсване по ССР. Таймера брои (проверявах го - прекъсването по препълване работи) всичките конфигурационни байтове са както пише в даташита и... няма compare.

С таймер 1 CCP модула си работи както трябва.


Пон Мар 19, 2007 2:25 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Ами ако го няма в ератата и си сигурен че е бъг, драсни им едно писъмце. Може да спестиш нерви на някой друг...

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Мар 19, 2007 2:30 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
ваййй, на работата имаме някои неща с 18ки, ще им сложа ноп да съм рахат.


Пон Мар 19, 2007 7:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
PIC18F4550, когато няма кондензатор на MCLR към маса, а само резистор към +VCC, от 10-тина включвания към USB, на 1-2 се самоизтриват първите 100-тина байта от програмната памет :oops: , или пък се записват с някакви глупости. В самия програмен код няма функция която да презаписва програмната памет. Решението е 100nF на MCLR към GND или да се заключи кодът в началото на програмната памет :)

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пон Мар 19, 2007 8:50 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
еее, това вече с кондензатора към маса изби рибата! винаги ли се наблюдава, или на едно устройство ти се е случвало?


Пон Мар 19, 2007 9:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
zaphod написа:
еее, това вече с кондензатора към маса изби рибата! винаги ли се наблюдава, или на едно устройство ти се е случвало?

От 9 устройства на 9 ! Установих, че не си прави хубав RESET без кондензатора и влиза в режим на програмиране, въпреки, че не би трябвало да влезне в режим на програмиране... Не съм се задълбавал много-много, но след като сложих кондензаторите всичко се оправи. Може би при включване към USB порта на MCLR се генерира някакво напрежение над 5V с много стръмен фронт и професора се лъже и влиза в режим програмиране. За друго не се сещам.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пон Мар 19, 2007 11:57 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
утре ше трия сол на главата на нашия жичкажия. викам му да сложа кондензатор на ресета, оня вика йок - можело да не се ресетне пика. убу, не сложих. е, верно не ми се е програмирал до сега сам, ама кой знае. я кажи, какви вътрешни ресети са ти пуснати - таймера за ресет пуснат ли е? да не става при включването някъв импулс, който да отива чак то над 12 волта...


Вто Мар 20, 2007 12:28 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Това със самопрограмирането е странно, щото даже и да го вкараш в режим на програмиране чрез Vpp пина, пак си трябват определен набор команди по ICSP. Ама то вече нищо не ме учудва.

Хубаво си е да има теми с бъгове. Не само за микрочип.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Мар 20, 2007 10:36 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 27 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни