Отговори на тема  [ 11 мнения ] 
Проблем с C18 компилатора на microchip. 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Окт 12, 2006 3:52 pm
Мнения: 21
Местоположение: Varna
Мнение Проблем с C18 компилатора на microchip.
Здравейте.
Пиша една програмка за работа с ротационен енкодер, но тъпия C18 ми къса нервите.
Имам следния код - от прикачената картинка.
Когато сложа бреакпоинт на реда if(newrpg!=oldrpg), при стойности на newrpg=0x06 oldrpg=0x06, не изпълнява if частта, но в момента в който премахна бреик поинта от споменатия ред а оставя само в тялото на if-а се изпълнява if(newrpg!=oldrpg) при newrpg=0x06 oldrpg=0x06!!!
Аз ли греша нещо или тъпия компилатор си прави каквото си и иска???
Ползвам 3.01 на С18 и MPLAB 8.36.С18 е стара версия, защото само такава намерих пълна, т.е. да не е student edition.
EDIT:До някъде видях къде е проблема.След като преди прекъсване РС=0xF8, зарежда тази стойност в Стека, но след връщане от прекъсване зарежда някаква тотално различна стойност в РС!


Прикачени файлове:
problem2.JPG
problem2.JPG [ 62.68 KiB | Прегледано 2212 пъти ]
Съб Окт 03, 2009 12:09 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
кой процесор е това?

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


Съб Окт 03, 2009 10:04 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Окт 12, 2006 3:52 pm
Мнения: 21
Местоположение: Varna
Мнение 
Цецо написа:
кой процесор е това?

Дам забравих го това 18F452.


Съб Окт 03, 2009 10:20 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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

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


Съб Окт 03, 2009 5:08 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Авг 31, 2005 1:57 pm
Мнения: 1103
Мнение 
Как правиш симулацията с дебъгера или софтуерно с мплаба?

Ако е софтуерно как го правиш? Използваш Set PC at cursor или стартираш програмата отначало и чакаш да спре на брейк поинта?
Ако използваш Set PC at cursor то трябва да го сложиш на най-горния ред иначе променливите няма да са конфигурирани и ще имат случайна стойност и оттам може би идва проблема ти.


Съб Окт 03, 2009 7:52 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
В sonsivri.com има последната версия.


Съб Окт 03, 2009 11:23 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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

Затова ти казвам, виж си ревизията и внимателно изчети ератата. Имаха някакви ядове тия ядра, затова и ги спряха. Щото както го описваш, не ми мяза да е софтуерно. Другия вариант е в самото прекъсване да си помазваш стека, но предполагам това си го проверил.

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


Нед Окт 04, 2009 10:32 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
Цецо, вие тука групичката да не сте случайно шамани? Ами то почти нищо освен въпрос - нито сорс нито разяснение относно това дали е хардуерен дебъг или симулация и пускане парче по парче на подробности?! Само ще продължите да си изстисквате от пръстите кой каквото се сети и я стане така я не! Дано юнака се сети и даде всичко необходимо щото само приказки...


Последна промяна fan на Нед Окт 04, 2009 2:05 pm, променена общо 1 път



Нед Окт 04, 2009 1:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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

Ама аз там по-добре да не се бъркам, щото симулатора на МПЛАБ, ползвам единствено и само за мерене на времена... :)

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


Нед Окт 04, 2009 2:00 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Окт 12, 2006 3:52 pm
Мнения: 21
Местоположение: Varna
Мнение 
Правя симулацията софтуерно в MPLAB + PROTEUS VSM 7.3 .Всеки път стартирам от начало програмата и чакам да спре на бреик поинта.
Когато спра прекъсванията преди if(newrpg!=oldrpg) и ги пусна след това всичко е ОК, но при условие, че трябва да генерирам ШИМ сигнал на няколко изхода е невъзможно така да се работи.
Все си мисля, че когато настъпи прекъсване след изпълението на if(newrpg!=oldrpg) в Стека се записва адреса на следващата инстукция извлечена по време на ifa(т.е. тази която трябва да се изпълни ако не настъпи прекъсване), а съответно ако тя е необходимо да се прескочи на база резултат от сравнението се получава пободно нещо, поне аз така си го обяснявам, т.к. в С един ред не е един ред в асемблер.
Така или иначе ще започна отначало да мисля целия алгоритъм.Устройството трябва да генерира ШИМ с 25 степени на коефицента на запълване, честота 1KHz, в същото време да се управлява с RPG и да се визуализира инфо за всеки управляван канал на LCD с HD44780.
Ако премахна приоритета на прекъсванията дали нещо ще се промени според вас?


Нед Окт 04, 2009 11:31 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Ами най-простото е да изпробваш симулацията само в MPLAB, отделно можеш да пробваш да смениш процесора, за да провериш дали не е проблема в симулацията само на този процесор, можеш и да дадеш View/Dissambly Listing и да погледнеш около реда който те интересува какво точно се случва. Като компилираш задай на компилатора да не оптимизира нещата, т.е. задай debug опцията. Ако променливите които сравняваш са 8-битови можеш и да имаш проблеми, ако опцията enable integer promotion не е активна ( прочети хелпа за тази опция, там е обяснено в детайли какво се случва )

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


Пон Окт 05, 2009 6:02 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

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


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

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