Отговори на тема  [ 13 мнения ] 
Директива за запълване на свободната памет за PIC...?? 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение Директива за запълване на свободната памет за PIC...??
Някъде чето,че за да се избегнат нежелани преходи към празни клетки от паметта е добре да се използва тази директива и да се запълнят нейзползваните :

FILL (GOTO RESET), (MAXRAM - $) ;

Само,че асемблера нещо ме оплюва и не я приема !! Синтаксиса ли е грешен или нещо друго ??
Някой знае ли повече по въпроса ??

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Сря Ное 30, 2005 12:58 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Mmmm Много зависи какво искаш да постигнеш.

Значи най-добре е празните клетки (програмна памет) да се запълват с "GOTO $" < така че WDT-то да се задейства и да ти ресетне пика , защото така , а не по твоя начин (защото един RESET от WDT ще върне стойностите по определен начин , след това,ти си имаш инит и прочие. :)

Така другият вариант е с nop-ове.

3-тият вариант вече е според това , че може да хванаш някаква функционалсност от тази работа.

Примерно всичко да се запълни с GOTO PICERROR

PICERROR е някъде си в програмната памет и по определн от теб начин ще те уведоми при проверка от твоя страна , че пика не знайно защо е ходил на адреси , където няма нищо ;) :)

пп: не забравяйте , че това си е моето мнение и то може да подлежи на коментар , а може да и има и грешки, но е уникално :lol: :lol: :lol: 8) :oops:

:) :P

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Сря Ное 30, 2005 1:54 am
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение Re: Директива за запълване на свободната памет за PIC...??
WDW написа:
FILL (GOTO RESET), (MAXRAM - $) ;


Защо MAXRAM - нали ще пълниш програмната памет, или аз нещо не съм разбрал?
Един глас в полза на NOP-овете - при запълване на флаша с нули не могат да ти драснат там дъмпер, с който да ти източат програмата при заключен чип.


Сря Ное 30, 2005 10:29 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Не ти трябва да пълниш всичко с нопове,
при препрограмиране първо всичко се трие тоест става на 0x3FFF
което отговаря на събиране на регистър W с 0xFF

в последните няколко байта може да сложиш дребна процедура
за избор на страница 1 и банка 0 и гото към ресет вектора.
Позабравил съм асемблера ама нещо такова ще е:

bcf status,6
bcf status,5 ;Bank0
pagesel $0 ;че не се знае в коя страница си
goto $0 ;ресет вектор


Сря Ное 30, 2005 6:06 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение 
Dimiter написа:
Не ти трябва да пълниш всичко с нопове,
при препрограмиране първо всичко се трие тоест става на 0x3FFF
което отговаря на събиране на регистър W с 0xFF

в последните няколко байта може да сложиш дребна процедура
за избор на страница 1 и банка 0 и гото към ресет вектора.
Позабравил съм асемблера ама нещо такова ще е:

bcf status,6
bcf status,5 ;Bank0
pagesel $0 ;че не се знае в коя страница си
goto $0 ;ресет вектор


Я малко по-подробно, че не ти хващам замисъла !! :roll:

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Чет Дек 01, 2005 12:32 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Всъщност няма значение,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


Чет Дек 01, 2005 3:13 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение 
Значи може да се разчита на кучето безпрекословно ?? И няма нужда от процедури по запълване на празни клетки и т.н.??
Възникна преди време спор, какво ще стане когато WDT зацикли в момента на ресет на проца ??

Та в тоя ред на мисли, аз когато съм си включил предделителя на TMR0, в този случай не мога да го ползвам за кучето ?? И ако съм го активирал трябва максимум на всеки 18mS (по спецификацията на Микрочип) да го нулирам ?? Инак ще почне да хапе? Е да де , ама аз имам процеси чиито интервал ми е по-дълъг от 18mS и нямам време да го нулирам!
Какво да правя в тоя случай ?

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Пет Дек 02, 2005 12:22 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Хмм не можеш ли в самя процес да го нулираш, това е една команда все пак ....


Пет Дек 02, 2005 12:45 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение 
ToHu написа:
Хмм не можеш ли в самя процес да го нулираш, това е една команда все пак ....

Една команда, но една микросекунда !!! И като е в цикъла трябва и нея да я мисля !

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Съб Дек 03, 2005 12:31 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Сложи 20мгхц кварц е няма да е 1микросекунда 200 нано.
"какво ще стане когато WDT зацикли в момента на ресет на проца ??"
На кучето може да се разчита защото е хардуерен брояч, все едно CD4040 да зацикли!?
Пиши с две думи за какво толкова критично във времето става дума може да се сетя нещо.


Съб Дек 03, 2005 6:17 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Ами .... прв е димитър, ако не ти стига производителност по висока естота, кварцовете са с една цена ...... а 18 мс не са никак малко време, все пак ако имаш цикъл дето да зцикли 18 мс .... все ми се струва в него ще намериш 1 us да нулираш кварца. Това е полезно нещо, не ми се е случвало да забива или нещо подобно.


Нед Дек 04, 2005 6:23 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Окт 26, 2005 12:36 am
Мнения: 353
Мнение 
Не съм се задълбавал да мисля по въпроса, до сега не съм ползвал кучето !
Но там дето имам времеви интервали и съм смятал разни времена !Та ако вмъкна командата и вместо да умножавам по две , ще трябва по три uS !!Oт там ще ми избягат времената !!!
А иначе имах и критични кодове от към време и просто нямаше къде да вмъкна 1 команда!
Оправдано ли е използването му и то с конкретни примери ??

_________________
Сичкото що е транзистор за илядо и пестотин волта се е BU ...


Пон Дек 05, 2005 2:50 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
Естествено, всяко по сериозно нещо трябва да го ползва, дали вградения или външен няма значение, но след като имасх вграден защо да мъчиш външен. Това те сасява от всякакви проблеми, непредвидена ситуация в която си зациклил, въпреки че това с ерешава с добре написан код ...... ако отиде случайно на грешен адрес .. това не ми се е случвало но .... е възможност, запълването на празната памет с преход към ресет те спасява, но ако прехода е към част от програмата която обаче точно в тази ситуация никога неможеш д аизлезеш от нея, примерно имаш while които цака ниакакво субите, да ама това субитие става само при определени условия, и влизаш там само като знаеш че ще възникне .... а като го нема и си отвисяваш там и нищо не те спасява, примерно по незнайн прични но си решил да напрвавиш четенето от ADC не на прекъсване а с полиране, и незнайно защо си направил цикъл от който не излизаш докато не ти се вдигне флага че ADC e прочело, да но ако влезе там по погрешка ADC може и да не е пуснато да чете тй че ти никога няма д аизлежеш, ето то това те спасява WDT сле n ms ще те ресетне и няма да виси там контролера а ще продължи да работи ... верно ако управляваш нещо критично може да се окаже че за тия 18 мс вече няма какво да управляваш но ...... в таквиа случаи и алгоритъма трябва мого добре да се обмисли, примерно аз whil не го обичам много но пък ако позлвма и е критично слагам флаг който преди да вляза в while го вдигам и условието за while включва и тоя флаг, и ако не е вдигнат си излизам автоматично .... но при всички условия wdt си върши прекрасна работа.


Пон Дек 05, 2005 3:01 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

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


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

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