|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:41 am
| Автор |
Съобщение |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 PIC18F442 бъг
Днес се сблъсках с един бъг на тоя процесор, дето изкочи доста изненадващо. Ще си споделя опита, дано някой да му е полезен (ех защо на мен нямаше кой да ми го каже).
Значи с тоя процесор имаме устройства, няколко хиляди разпиляни из целия свят. Всички устройства минават сериозно функционално тестване при пройзводството. До днес проблема не беше изкочил, нито при тестовете, нито клиент не е изпищял.
Както знаете PIC18 има стек, който има възможност при препълване или преизпразване да генерира Reset. Тъй като устройствата предполагат висока степен на сигурност, програмата трябва да улавя всякакви "fault" състояния и блокира устройството като единственото което прави след това е да бичи код на грешка. Тъй че всякакви проблеми излизат веднага и се набиват в очи. Та това и стана. Колеги ми обясняват че след последния ъпдейт на фирмуера (писан от мен), някой платки при първоначално подаване на захранването при тест, дават грешка еди кой си номер. Като върнат стария софтуер сичко било ок. А да му.... майката, почвам аз да копам.....
Интересното е че програмата гърми при аутотест процедура (прави си тест при всяко включване). Да ама аз там не съм сменял нищо по кода. Рових, рових и накрая установих че имам ресет заради проблем със стека. Ситуацията се появява едно към 10-20 опита при първоначално пускане. Бре ровене, псуване, що стария код работи, новия не. Там дето се дъни промени нема.
Реших да видя дали нема некоя нова ерата. Е имаше. 80173c.pdf , страница 2, точка 5. Много остроумно обяснение от страна на Микрочип, нищо не можеш разбра. Аз поне схванах следното - "Незнаем кога и защо, ама в много редки ситуации при много малко приложения, първата инструкция след ресет не се изпълнява". Бре мама му стара.
Загледах се в кода генериран он MPLABC18 (повечето компилатори творят същото):
Е сещате се какво става ако прескочиш първата инструкция.
Вкарах един NOP отначало (както любезно съветват Микрочип) и нещата заспаха (засега). Няма повече стек рисети.
Интересното е че бъга наистина се прояви "незнам как и незнам що". Толкова устройства - тестове, чудесии. Предполагам, че като съм правил промени в кода, той е станал по голям и това е провокирало болеста. А даже и болно се появява пак доста рядко - обяснение никакво. Интересното е че на например 10 платки с процесори еднаква ревизия на 6 въобще не ще да избие, на 3 се появи по веднъж на ужасно много пускания, а на една излизаше 1 към 10 пъти. Нея ми пратиха да тормозя та го сгащих. Така поне се надявам
Ако някой го интересува мога да му кажа как да изнасили MPLABC18 да вкара въпросния NOP.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Мар 13, 2007 8:51 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
@Цецо, (10х)<<1000!
Какво имаш предвид да изнасилиш компилатора да ти заобикаля ератите? В Хайтек има такава директива на компилатора и винаги си ми е включена, проблема е че уъркараундва само известните бъгове  .
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Сря Мар 14, 2007 9:49 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами микрочипския има за някой бъгове, ама специално за тоя не съм видял, та се наложи да го принудя, стана относително лесно.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Сря Мар 14, 2007 10:51 am |
|
 |
|
bkulev
Ранг: Популярен
Регистриран на: Сря Яну 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. Там сорсовете съдържат нещо от сорта:
Променяте го на нещо от сорта:
След това в предходната директория (../src/traditional) има фаил makestartup.bat който рекомпилира стартъп кода. Компилира и трите наведнъж имайте го предвид. Освен това изисква валиден път до бинарните файлове на компилатора (аз понеже пътища нямам, редактирах bat файла). След като ги компилира, компилатора вече ще ползва новите object файлове за startup кода с вмъкнатия nop.
Аз лично подходих малко по гъвкаво, предвид това, че неискам nop-а да се ръга във всеки проект за всеки процесор, а само за който аз си реша. Вместо всеки път да слагам и махам нопове и да прекомпилрам, аз си компилирах един c018.o с нопове и го слагам в директорията на проекта. MPLAB по default първо търси необходимите му файлове там. Така ако го има тоя файл ще се компилира с nop. Иначе по старо му.
Тоя подход може да се ползва за всяка от вградените библиотеки в която нещо не ви харесва.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Мар 15, 2007 10:52 am |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 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 |
|
 |
|
Tisho
Ранг: Форумен бог
Регистриран на: Пон Ное 22, 2004 11:24 pm Мнения: 1923 Местоположение: Габрово
|
Хм...
Този проблем го има и при други 18-ки...
Аз наскоро се сблъсках с друг проблем с PIC18F1320. В даташита пише че CCP модула може да се използва да сравнява с таймер 1 или таймер 3.
Да но... Пускам си го с таймер 3 и няма прекъсване по ССР. Таймера брои (проверявах го - прекъсването по препълване работи) всичките конфигурационни байтове са както пише в даташита и... няма compare.
С таймер 1 CCP модула си работи както трябва.
|
| Пон Мар 19, 2007 2:25 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами ако го няма в ератата и си сигурен че е бъг, драсни им едно писъмце. Може да спестиш нерви на някой друг...
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Мар 19, 2007 2:30 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 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-тина байта от програмната памет  , или пък се записват с някакви глупости. В самия програмен код няма функция която да презаписва програмната памет. Решението е 100nF на MCLR към GND или да се заключи кодът в началото на програмната памет 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пон Мар 19, 2007 8:50 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
еее, това вече с кондензатора към маса изби рибата! винаги ли се наблюдава, или на едно устройство ти се е случвало?
|
| Пон Мар 19, 2007 9:34 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
От 9 устройства на 9 ! Установих, че не си прави хубав RESET без кондензатора и влиза в режим на програмиране, въпреки, че не би трябвало да влезне в режим на програмиране... Не съм се задълбавал много-много, но след като сложих кондензаторите всичко се оправи. Може би при включване към USB порта на MCLR се генерира някакво напрежение над 5V с много стръмен фронт и професора се лъже и влиза в режим програмиране. За друго не се сещам.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пон Мар 19, 2007 11:57 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 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 |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 5 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|