Отговори на тема  [ 6 мнения ] 
Съобщениe:Crossing page boundary - ensure page bits are set. 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Окт 05, 2007 8:34 pm
Мнения: 76
Местоположение: Русе
Мнение Съобщениe:Crossing page boundary - ensure page bits are set.
Здравейте.
При компилирането на програмата( на която довчера проблема беше ацп на микроконтролера и благодарение на Вашата компетентна помощ успях да реша този проблем ) точно когато нещата потръгнаха, MPLAB изписа съобщението "Crossing page boundary -- ensure page bits are set." Доколкото успях да разбера с моя скромен английски става въпрос за пресичане на страница. Това съобщение ми го извежда за ред от програмата, на който има call ххххх(и за всички call хххххх) след него. От листинг файла се вижда, че става въпрос за адреси от програмната памет след 0х800. Подпрограмата която викам се намира в програмната памет преди 0х800. В datasheet-а доколкото разбрах се правят някакви гимнастики с PCLATH, но не успях да разбера как точно. Затова Ви моля за помощ. Микроконтролера е PIC16f88.
Благодаря Ви предварително!


Чет Юни 17, 2010 9:19 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
подобно на BANKSEL има PAGESEL.
само че освен за подпрограми важи и за преходи, ще отупаш някой и друг ден за да свикнеш да ги синхронизираш.
по лесно е на С


Чет Юни 17, 2010 10:21 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
С ГОТО и САЛЛ не би трявало да имаш проблеми при пресичането на страници - процесорът хардуерно си зарежда необходимите битове за избор на страници. Проблеми се появяват, когато имаш таблица, която пресича страници или ползваш изчислено гото - там трябва софтуерно да се правят врътки. Това само предупреждение ли е или съобщение за грешка? В смисъл, приключва ли компилирането, въпреки това съобщение? Ако да, значи програмата би трябвало да работи.
На мен например винаги ми се появява предупреждение, когато някъде правя обръщение към регистър, който не е в нулева страница на РАМ-а, ама програмата си работи.

_________________
Digitally yours: Optron


Пет Юни 18, 2010 8:30 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Юли 24, 2005 3:35 pm
Мнения: 62
Местоположение: Стара Загора
Мнение 
optron написа:
С ГОТО и САЛЛ не би трявало да имаш проблеми при пресичането на страници - процесорът хардуерно си зарежда необходимите битове за избор на страници. Проблеми се появяват, когато имаш таблица, която пресича страници или ползваш изчислено гото - там трябва софтуерно да се правят врътки.


Не е точно така.
Имах нещо написано по въпроса и ще го копна.

При PIC 16F8xx, 16F8x програмния брояч е 13 битов това позволява да се адресират 8192 думи от програмната памет (8к).При различните процесори физически в чипа е реализирана част от тази памет. Тези 8к програмна памет логически е разделена на страници от по 2к , които пък от своя страна са разделени на блокове от 256 думи. Тази логическа организация е наложена от архитектурата на процесора. При модифициране съдържанието на програмния брояч( промяна на хода на линейното изпълнение на програмата) т.е при извършване на изчислен преход, преход към даден адрес или извикване на подпрограма е необходимо да се зареди нова стойност в програмния брояч за всеки от изброените случаи това става по различен начин. При тези процесори целия програмния брояч не е директно програмно достъпен,достъпен е само неговия младши байт PCL, а промяната на старшия байт на брояч се осъществява чрез буфериращия регистър PCLATH. При прилагане на изчислен goto резултата получен от АЛУ е осем битов. Този резултат може да се запише в младшия байт на програмния брояч едновременно със самото записване на PCL в PCH се прехвърля стойността на PCLATH. При начално установяване на процесора в PCLATH се записва 0x00, така че без промяна на PCLATH може да се използва изчислен goto само в рамките на първия блок от 256 думи от програмната памет. За да се използва прехода за цялата програмна памет е необходимо да се следи за преминаването в друг блок и съответно да се коригират битовете от 0-4 на PCLATH педи записа в на PCL.
При изпълнение на инструкции goto или call в програмния брояч се зарежда отново само част от адреса само че в този случаи млад6ите 11 бита от адреса на прехода които се съдържат в кода на самата инструкция. Тъй като програмния брояч е 13 битов старшите два байта се прехвърлят в PCH от 4 и 3 бит на PCLATH. Ако не се променя PCLATH преходите и извикванията на подпрограмите могат да стават само в рамките на една страница от програмната памет т.е 2к тъй като толкова може да се адресира с 11бита. Ако трябва да се извърши преход към адрес от друга страница различна от 0 или да се стартира подпрограма трябва преди съответната инструкция да се избере правилната страница чрез PCLATH 3:4. Трябва да се има предвид че веднъж избрана друга страница тя остава избрана докато не се промени чрез PCLATH 3:4. Това е много важно за6тото примерно ако имаме следния случаи:
Програмата се изпълнява и конкретната инструкция за стартиране на подпрограма е на адрес < 0x800 т.е е от страница 0. Но подпрограмата е разположена на адрес >0x800 т.е е от страница 1 за да се стартира коректно преди CALL трябва да се зададе страница 1 (BSF PCLATH ,3). Но това не е достатъчно за коректното изпълнение на програмата защото след края на подпрограмата и RETURN автоматично ще се възстанови само състоянието на програмния брояч от стека но няма да се промени PCLATH. А това предпоставка за проблем. Главната програма ако извика следваща подпрограма която е от страница 0 CALL 0x100 примерно няма да се стартира тази подпрограма а ще се стартира такав с адрес 0x900 което би объркало хода на изпълнението тотално и от този момент процесора ше се държи напълно неадекватно на заложения алгоритъм. За да се избегне това трябва задължително преди CALL 0x100 да се избере страница 0. (BCF PCLATH ,3).

Точно това съобщение не е за пренебрегване това 4е програмата се компилира успе6но
въоб6те не значи че ще се държи адекватно от един момент може да се омаже тотално.
Писането на asm за даден процесор, позволява да се използват най пълноценно всичкия му ресурс но предполага познаването в детайли на неговата архитектура и особеност. На asm може да се изцеди всичко от един процесор до границите на възможността му но това е за сметка на труда при писането на програмата не е като да го драснеш на C и да не задълбаваш точно как се изпълнява.
Успех.


Съб Юни 19, 2010 2:00 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Мда, резонно, тъй като в мнемониката на ГОТО и САЛЛ има само 11 бита място за адрес (цялата инструкция е 14 бита).
А твоят код напуска ли първия блок от 2к? Ако да, значи това предупреждение е основателно. Провери си всички преходи дали са в рамките на първия блок, а също и подпрограмите, които се изпълняват да не напускат този блок и тогава няма да имаш никакви проблеми, без да ти се налага да играеш с битове 3 и 4 на РСЛАТН.
Не знам как стои въпросът ако една подпрограма лежи едновременно на две страници ... Дали хардуерът инкрементва целия програмен брояч ... ? Ако имаш такава подпрограма, според мен по-добре я попремести лекичко, да си влезе в една от страниците и по-нататък съобразявай въпросните битове.

_________________
Digitally yours: Optron


Нед Юни 20, 2010 1:00 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пет Окт 05, 2007 8:34 pm
Мнения: 76
Местоположение: Русе
Мнение 
Благодаря Ви за помощта, особено на todorov8001 за изчернпателния отговор! В крайна сметка се преборих с проца :D . От година и нещо въобще не съм програмирал и сега като ми се наложи да спретна тази малка програмка и се почувствах като начанаещ. Наистина това "прекосяване" на страници заедно с недобре обмислени прекъсвания обръщат каруцата.
OPTRON съветвам те да обръщаш внимание и на съобщенията защото са важни. На мен като ми изкара това съобщение за пресичане на страница компилирането си завършва успешно (уж!), програмата бачка, но когато трябва да се изпълни кода пресичащ страницата и става интересно :evil: .


Пон Юни 21, 2010 12:51 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

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


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

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