| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Директива за запълване на свободната памет за PIC...?? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1361 |
Страница 1 от 1 |
| Автор: | WDW [ Сря Ное 30, 2005 12:58 am ] |
| Заглавие: | Директива за запълване на свободната памет за PIC...?? |
Някъде чето,че за да се избегнат нежелани преходи към празни клетки от паметта е добре да се използва тази директива и да се запълнят нейзползваните : FILL (GOTO RESET), (MAXRAM - $) ; Само,че асемблера нещо ме оплюва и не я приема !! Синтаксиса ли е грешен или нещо друго ?? Някой знае ли повече по въпроса ?? |
|
| Автор: | the_real_maniac [ Сря Ное 30, 2005 1:54 am ] |
| Заглавие: | |
Mmmm Много зависи какво искаш да постигнеш. Значи най-добре е празните клетки (програмна памет) да се запълват с "GOTO $" < така че WDT-то да се задейства и да ти ресетне пика , защото така , а не по твоя начин (защото един RESET от WDT ще върне стойностите по определен начин , след това,ти си имаш инит и прочие. Така другият вариант е с nop-ове. 3-тият вариант вече е според това , че може да хванаш някаква функционалсност от тази работа. Примерно всичко да се запълни с GOTO PICERROR PICERROR е някъде си в програмната памет и по определн от теб начин ще те уведоми при проверка от твоя страна , че пика не знайно защо е ходил на адреси , където няма нищо пп: не забравяйте , че това си е моето мнение и то може да подлежи на коментар , а може да и има и грешки, но е уникално |
|
| Автор: | evc [ Сря Ное 30, 2005 10:29 am ] | |||||||||
| Заглавие: | Re: Директива за запълване на свободната памет за PIC...?? | |||||||||
Защо MAXRAM - нали ще пълниш програмната памет, или аз нещо не съм разбрал? Един глас в полза на NOP-овете - при запълване на флаша с нули не могат да ти драснат там дъмпер, с който да ти източат програмата при заключен чип. |
||||||||||
| Автор: | Dimiter [ Сря Ное 30, 2005 6:06 pm ] |
| Заглавие: | |
Не ти трябва да пълниш всичко с нопове, при препрограмиране първо всичко се трие тоест става на 0x3FFF което отговаря на събиране на регистър W с 0xFF в последните няколко байта може да сложиш дребна процедура за избор на страница 1 и банка 0 и гото към ресет вектора. Позабравил съм асемблера ама нещо такова ще е: bcf status,6 bcf status,5 ;Bank0 pagesel $0 ;че не се знае в коя страница си goto $0 ;ресет вектор |
|
| Автор: | WDW [ Чет Дек 01, 2005 12:32 am ] | |||||||||
| Заглавие: | ||||||||||
Я малко по-подробно, че не ти хващам замисъла !! |
||||||||||
| Автор: | Dimiter [ Чет Дек 01, 2005 3:13 pm ] |
| Заглавие: | |
Всъщност няма значение,Watch Dog Timer-а си е точно за тая работа. Май пак търсим сложен подход към простите неща. В CCS компилатора има две ценни функции reset_cpu() и restart_cause() първата оправя всички бакии а втората ти казва причината за рестарта В повечето устройсва които правя залагам 1 софтуерен ресет през определено време +WDT като от restart_cause() разбирам причината за рестарта и реагирам рзлично според случая . Например ако детектнеш че ресета си е от тебе не е нужно де си инициализираш променливите наново и да загубиш някакви актуални данни. Ако е от Broun-Out или от Power-Up друга работа. това са 6-те възможни резултата от функцията,стигат за всичко. WDT_TIMEOUT MCLR_FROM_SLEEP MCLR_FROM_RUN WDT_FROM_SLEEP RESET_INSTRUCTION NORMAL_POWER_UP |
|
| Автор: | WDW [ Пет Дек 02, 2005 12:22 am ] |
| Заглавие: | |
Значи може да се разчита на кучето безпрекословно ?? И няма нужда от процедури по запълване на празни клетки и т.н.?? Възникна преди време спор, какво ще стане когато WDT зацикли в момента на ресет на проца ?? Та в тоя ред на мисли, аз когато съм си включил предделителя на TMR0, в този случай не мога да го ползвам за кучето ?? И ако съм го активирал трябва максимум на всеки 18mS (по спецификацията на Микрочип) да го нулирам ?? Инак ще почне да хапе? Е да де , ама аз имам процеси чиито интервал ми е по-дълъг от 18mS и нямам време да го нулирам! Какво да правя в тоя случай ? |
|
| Автор: | ToHu [ Пет Дек 02, 2005 12:45 am ] |
| Заглавие: | |
Хмм не можеш ли в самя процес да го нулираш, това е една команда все пак .... |
|
| Автор: | WDW [ Съб Дек 03, 2005 12:31 am ] | |||||||||
| Заглавие: | ||||||||||
Една команда, но една микросекунда !!! И като е в цикъла трябва и нея да я мисля ! |
||||||||||
| Автор: | Dimiter [ Съб Дек 03, 2005 6:17 pm ] |
| Заглавие: | |
Сложи 20мгхц кварц е няма да е 1микросекунда 200 нано. "какво ще стане когато WDT зацикли в момента на ресет на проца ??" На кучето може да се разчита защото е хардуерен брояч, все едно CD4040 да зацикли!? Пиши с две думи за какво толкова критично във времето става дума може да се сетя нещо. |
|
| Автор: | ToHu [ Нед Дек 04, 2005 6:23 am ] |
| Заглавие: | |
Ами .... прв е димитър, ако не ти стига производителност по висока естота, кварцовете са с една цена ...... а 18 мс не са никак малко време, все пак ако имаш цикъл дето да зцикли 18 мс .... все ми се струва в него ще намериш 1 us да нулираш кварца. Това е полезно нещо, не ми се е случвало да забива или нещо подобно. |
|
| Автор: | WDW [ Пон Дек 05, 2005 2:50 am ] |
| Заглавие: | |
Не съм се задълбавал да мисля по въпроса, до сега не съм ползвал кучето ! Но там дето имам времеви интервали и съм смятал разни времена !Та ако вмъкна командата и вместо да умножавам по две , ще трябва по три uS !!Oт там ще ми избягат времената !!! А иначе имах и критични кодове от към време и просто нямаше къде да вмъкна 1 команда! Оправдано ли е използването му и то с конкретни примери ?? |
|
| Автор: | ToHu [ Пон Дек 05, 2005 3:01 am ] |
| Заглавие: | |
Естествено, всяко по сериозно нещо трябва да го ползва, дали вградения или външен няма значение, но след като имасх вграден защо да мъчиш външен. Това те сасява от всякакви проблеми, непредвидена ситуация в която си зациклил, въпреки че това с ерешава с добре написан код ...... ако отиде случайно на грешен адрес .. това не ми се е случвало но .... е възможност, запълването на празната памет с преход към ресет те спасява, но ако прехода е към част от програмата която обаче точно в тази ситуация никога неможеш д аизлезеш от нея, примерно имаш while които цака ниакакво субите, да ама това субитие става само при определени условия, и влизаш там само като знаеш че ще възникне .... а като го нема и си отвисяваш там и нищо не те спасява, примерно по незнайн прични но си решил да напрвавиш четенето от ADC не на прекъсване а с полиране, и незнайно защо си направил цикъл от който не излизаш докато не ти се вдигне флага че ADC e прочело, да но ако влезе там по погрешка ADC може и да не е пуснато да чете тй че ти никога няма д аизлежеш, ето то това те спасява WDT сле n ms ще те ресетне и няма да виси там контролера а ще продължи да работи ... верно ако управляваш нещо критично може да се окаже че за тия 18 мс вече няма какво да управляваш но ...... в таквиа случаи и алгоритъма трябва мого добре да се обмисли, примерно аз whil не го обичам много но пък ако позлвма и е критично слагам флаг който преди да вляза в while го вдигам и условието за while включва и тоя флаг, и ако не е вдигнат си излизам автоматично .... но при всички условия wdt си върши прекрасна работа. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|