|
мплаб и пик |
|
|
|
Jul 18 2008, 13:48
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Столкнулся с весьма забавным явлением. фрагмент программы MOVF PCL,W,ACCESS ;загрузка pclatu,pclath MOVLW 2 ADDWF PCL,F,ACCESS RETLW 0x3f ;0 RETLW 0x06 ;1 RETLW 0x5b ;2 RETLW 0x4f ;3 И ТОЖЕ САМОЕ но MOVF PCL,F,ACCESS в мплабе оба варианта прекрасно работают,но на реальном железе PIC18F452 вариант с буквой F не работает
|
|
|
|
|
 |
Ответов
|
Jul 24 2008, 12:56
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 23 2008, 19:39)  Похоже, здесь собака зарыта. Завтра проверю. Где ваш код? Нет не здесь. Я пргнал ваш текст,все прекрасно и с W и F однако я не останрвился на этом и продолжил. org 0x0100 test call german bra test ORG 600H german movf PCL,f,ACCESS;table address и тоже самое но с W!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! movlw 2 addwf PCL,f,ACCESS table retlw 0x3f retlw 0x06 retlw 0x5b retlw 0x4f и всё враз стало нехорошо. Если у вас не получится придется использовать мой текст. Но если я не ошибся это не мелкий недочет мплаба,а очередной глюк контроллера.
|
|
|
|
|
Jul 24 2008, 14:20
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 24 2008, 11:56)  Но если я не ошибся это не мелкий недочет мплаба,а очередной глюк контроллера. Ваш код работает в железе с W, и не работает с F. Похоже, это глюк разработчика (:-). Судите сами, переход осуществляется на адрес 0х0008 сразу после выполнения команды movf PCL,f,ACCESS. Вы неправомочно используете movf PCL,f,ACCESS, поскольку регистр PCL несколько раз модифицируется в теле самой команды за время выполнения этой команды, и контроллеру не понятно, какую модификацию загружать в PCL(:-). Похожие глюки были в аврках, там нельзя было использовать загрузку в косвенный регистр, используя косвенную адресацию этого регистра. Типа LD YL,Y+. Также и здесь, но там написали об этом, а здесь ещё нет, или написали, но мелкими буковками, и в таком месте, что концов не найдёшь.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 24 2008, 15:10
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 24 2008, 17:20)  Ваш код работает в железе с W, и не работает с F. Похоже, это глюк разработчика (:-). Судите сами, переход осуществляется на адрес 0х0008 сразу после выполнения команды movf PCL,f,ACCESS. Вы неправомочно используете movf PCL,f,ACCESS, поскольку регистр PCL несколько раз модифицируется в теле самой команды за время выполнения этой команды, и контроллеру не понятно, какую модификацию загружать в PCL(:-).
Похожие глюки были в аврках, там нельзя было использовать загрузку в косвенный регистр, используя косвенную адресацию этого регистра. Типа LD YL,Y+. Также и здесь, но там написали об этом, а здесь ещё нет, или написали, но мелкими буковками, и в таком месте, что концов не найдёшь. По поводу неправомочности я с вами полностью согласен,однако вызывает недоумение следующий момент и не один: 1 в мплабе всё прекрасно,что очень плохо и ,что является явным глюком 2 при некоторых условиях все работает,а это ещё хуже,чем если бы всё не работало.
|
|
|
|
|
Jul 24 2008, 15:41
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 24 2008, 14:10)  По поводу неправомочности я с вами полностью согласен, однако вызывает недоумение следующий момент и не один: 1 в мплабе всё прекрасно, что очень плохо и что является явным глюком 2 при некоторых условиях все работает. Одно я знаю, а ещё при каких условиях работает? Вот здесь Вычисляемый GOTO на pic18f45j10 есть пара вариантов, как помочь горю.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 24 2008, 16:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 24 2008, 18:41)  Одно я знаю, а ещё при каких условиях работает? Вот здесь Вычисляемый GOTO на pic18f45j10 есть пара вариантов, как помочь горю. Я тоже одно и второе искать не хочу,из за этих 2 глюков я несколько раз проиграл в шашки. и потратил много времени на поиск.Однако,согласитесь,что выражение MOVF PCL,F,ACCESS весьма изящно но не работает movff PCL,любой свободный регистр; и вот оно счастье так ещё компактнее и безопасно. И всеPCLAT ЗАГРУЖЕНЫ ADDWF WREG,W,ACCESS ; W*2 так удваивать W компактнее
|
|
|
|
|
Jul 24 2008, 21:45
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 24 2008, 15:17)  Я тоже одно и второе искать не хочу, из за этих 2 глюков я несколько раз проиграл в шашки и потратил много времени на поиск. Однако, согласитесь, что выражение MOVF PCL,F,ACCESS весьма изящно, но не работает проиграли вы потому, что противник был сильнее, а глюк был ваш собственный, не нужно было модифицировать PCL, это закон. Изящество было бы, если бы работало. Цитата(Евгений Германович @ Jul 24 2008, 15:17)  movff PCL,любой свободный регистр; и вот оно счастье Германыч, это куда надо прикладывать? Вы б сразу писали поконкретнее, а то возникают непонятки и приходится переспрашивать. Цитата(Евгений Германович @ Jul 24 2008, 15:17)  ADDWF WREG,W,ACCESS ; W*2 так удваивать W компактнее Не пойму, зачем вы тут про удвоение говорите, куда с ним?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 25 2008, 13:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 25 2008, 00:45)  проиграли вы потому, что противник был сильнее, а глюк был ваш собственный, не нужно было модифицировать PCL, это закон. Изящество было бы, если бы работало.
Германыч, это куда надо прикладывать? Вы б сразу писали поконкретнее, а то возникают непонятки и приходится переспрашивать.
Не пойму, зачем вы тут про удвоение говорите, куда с ним? Но сегодня я выиграл и с разгромным счетом 6:0.Глюк не мой -Если предоставляется возможность творить подобную команду то надо и контролировать её.А мплаб молчал. Про приложение ADDWF WREG,W,ACCESS ; W*2 именно сюда MOVFF PCL,любой свободный регистр ADDWF PCL,F,ACCESS RETLW 0x3f ;0 RETLW 0x06 ;1 или BRA ...... BRA ....... так компактнее это по результатам просмотра вашей ссылки. movlw HIGH table movwf PCLATH ;msb of table это ваш код.Вопрос а как быть с PCLATU вы его не грузите???
|
|
|
|
|
Jul 25 2008, 14:54
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 25 2008, 12:29)  Но сегодня я выиграл и с разгромным счетом 6:0. Глюк не мой. Если предоставляется возможность творить подобную команду то надо и контролировать её. А мплаб молчал Таких творцов мульёны. Мало ли кто что сотворит, индусы не могут всего предусмотреть. А вы должны понимать, что творите...Следующий раз проиграете, скажете, жена не дала, я ни при чём, так что ли? Цитата(Евгений Германович @ Jul 25 2008, 12:29)  Про приложение ADDWF WREG,W,ACCESS ; W*2 именно сюда MOVFF PCL,любой свободный регистр ADDWF PCL,F,ACCESS или BRA ...... BRA ....... так компактнее это по результатам просмотра вашей ссылки А у меня вроде нет такого, в смысле удвоения WREG. А следующая команда "MOVFF PCL,любой свободный регистр" мне вообще противопоказана, поскольку изменятся значения в PCLATH, которые я перед этим установил, и я не попаду на таблицу BRA BRA BRA, которая у меня находится на другой странице. Цитата(Евгений Германович @ Jul 25 2008, 12:29)  movlw HIGH table movwf PCLATH ;msb of table это ваш код. Вопрос а как быть с PCLATU вы его не грузите? А смысл? В процессоре флеши 32КБ, так что PCLATU всё время 0.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 25 2008, 16:00
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 25 2008, 17:54)  Таких творцов мульёны. Мало ли кто что сотворит, индусы не могут всего предусмотреть. А вы должны понимать, что творите...Следующий раз проиграете, скажете, жена не дала, я ни при чём, так что ли?
А у меня вроде нет такого, в смысле удвоения WREG. А следующая команда "MOVFF PCL,любой свободный регистр" мне вообще противопоказана, поскольку изменятся значения в PCLATH, которые я перед этим установил, и я не попаду на таблицу BRA BRA BRA, которая у меня находится на другой странице.
А смысл? В процессоре флеши 32КБ, так что PCLATU всё время 0. movf k,w addwf k,w Это с вашей ссылки 2 команды эквивалентны одной моей ADDWF WREG,W,ACCESS, делают то же самое. Без удвоения ничего не получиться ибо младший бит счетчика команд всегда равен 0 то все нечетные W превратятся в четные  и сама BRA имеет длину 2 байта Если бы творцы схемотехники приложили немного мозга,то всё было бы нормально.Ведь в вашем варианте все работало.Этот глюк элементарное расп......ство и больше ничего.Кстати если его использовать,то можно создавать немодифицируемую программу.Прикиньте незначительное перемещение кода приводит к катастрофическим последствиям. Хотя вынужден признать и мне повезло,если бы я уложил всё рядом а потом переместил.... Психологическая подготовка в шашках весьма важна. А смысл? В процессоре флеши 32КБ, так что PCLATU всё время 0. Не боитесь???А вдруг ещё гадость вылезет или будете переносить программу на проц с немерянной памятью  А следующая команда "MOVFF PCL,любой свободный регистр" мне вообще противопоказана, поскольку изменятся значения в PCLATH, которые я перед этим установил, и я не попаду на таблицу BRA BRA BRA, которая у меня находится на другой странице. Применение MOVFF PCL,любой свободный регистр позволяет отказаться от ручной установки PCLATH иPCLATU и куда бы вы не двинули подобнй фрагмент загрузка регистров выполнится корректно и компактно. Я бы на вашем месте не расслаблялся -памяти 32Кб но счетчик команд адресует все мегабайты,прикиньте что будет если случайно в PCLATU окажется 1.Вот вам и второй Чернобыль.
|
|
|
|
|
Jul 25 2008, 23:21
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 25 2008, 15:00)  movf k,w addwf k,w Это с вашей ссылки 2 команды эквивалентны одной моей ADDWF WREG,W,ACCESS, делают то же самое Не, вы не прониклись, как мои две команды работают. Первая у меня посылает содержимое регистра k в w, не меняя значения k, а вторая удваивает значение. Если использовать вашу команду, то надо сначала заслать содержимое регистра k в w, а потом удваивать, в результате будет две команды, так что ваш вариант ничем не лучше моего. Цитата(Евгений Германович @ Jul 25 2008, 15:00)  Психологическая подготовка в шашках весьма важна Кто б спорил. По мне так лучше играть в шахматы, шашки всё-таки примитивная игра. Хотя 100-клеточные ничего так себе. Цитата(Евгений Германович @ Jul 25 2008, 15:00)  Не боитесь? А вдруг ещё гадость вылезет или будете переносить программу на проц с немерянной памятью. Я бы на вашем месте не расслаблялся - памяти 32Кб, но счетчик команд адресует все мегабайты, прикиньте что будет если случайно в PCLATU окажется 1. Вот вам и второй Чернобыль. Я не боюсь, я пишу только безглючные программы. Как в PCLATU может оказаться 1, если я не использую команды с PCLATU? Цитата(Евгений Германович @ Jul 25 2008, 15:00)  Применение MOVFF PCL,любой свободный регистр позволяет отказаться от ручной установки PCLATH и PCLATU и куда бы вы не двинули подобный фрагмент загрузка регистров выполнится корректно и компактно Вы невнимательно смотрели мой фрагмент. Мне надо на одной странице установить в PCLATH номер другой страницы, так что ваша команда MOVFF PCL,ххх мне всё испортит.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 26 2008, 07:45
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 26 2008, 02:21)  Не, вы не прониклись, как мои две команды работают. Первая у меня посылает содержимое регистра k в w, не меняя значения k, а вторая удваивает значение. Если использовать вашу команду, то надо сначала заслать содержимое регистра k в w, а потом удваивать, в результате будет две команды, так что ваш вариант ничем не лучше моего.
Кто б спорил. По мне так лучше играть в шахматы, шашки всё-таки примитивная игра. Хотя 100-клеточные ничего так себе.
Я не боюсь, я пишу только безглючные программы. Как в PCLATU может оказаться 1, если я не использую команды с PCLATU?
Вы невнимательно смотрели мой фрагмент. Мне надо на одной странице установить в PCLATH номер другой страницы, так что ваша команда MOVFF PCL,ххх мне всё испортит. А зачем сначала класть в рег к а затем тащить в W это расточительство. Не понимаю шахматы,там нельзя рубить по 6 штук. Как в PCLATU может оказаться 1, если я не использую команды с PCLATU? От вас это может не зависить.У меня был случай самопроизвольной записи(под дейсствием помехи) в память. Я не боюсь, я пишу только безглючные программы. Этого нам знать не дано. Я смотрел внимательно и не заметил того о чем вы говорите.
|
|
|
|
Сообщений в этой теме
Евгений Германович мплаб и пик Jul 18 2008, 13:48 vanner Ничего забавного в этом явлении нет, такой вычисля... Jul 21 2008, 06:08 =GM= Цитата(Евгений Германович @ Jul 18 2008, 12... Jul 21 2008, 11:01 Евгений Германович Цитата(=GM= @ Jul 21 2008, 14:01) Первая ... Jul 21 2008, 12:33  =GM= Ещё раз, фрагмент работает, а первая строчка вашег... Jul 21 2008, 13:27   Евгений Германович Цитата(=GM= @ Jul 21 2008, 16:27) Ещё раз... Jul 21 2008, 14:21    =GM= Проверил все варианты: 0, 2, 4 и 6, полёт нормальн... Jul 21 2008, 14:27     Евгений Германович Цитата(=GM= @ Jul 21 2008, 17:27) Провери... Jul 21 2008, 15:10      =GM= pic18f45k20 штатная плата, pic18LF45j10 в макете и... Jul 21 2008, 15:38 Евгений Германович Здравствуйте.П 4.4 гласит "значение регистров... Jul 22 2008, 12:12 =GM= Прошу пардону, я был неправ, на моём проце всё име... Jul 22 2008, 14:55  Евгений Германович Цитата(=GM= @ Jul 22 2008, 17:55) Прошу п... Jul 22 2008, 15:50   =GM= Цитата(Евгений Германович @ Jul 22 2008, 14... Jul 23 2008, 10:01    Евгений Германович Цитата(=GM= @ Jul 23 2008, 13:01) Отличия... Jul 23 2008, 12:41     =GM= Цитата(Евгений Германович @ Jul 23 2008, 11... Jul 23 2008, 15:17             =GM= Евгений Германович А зачем сначала класть в рег k,... Jul 28 2008, 08:42              Евгений Германович Цитата(=GM= @ Jul 28 2008, 11:42) Евгений... Jul 28 2008, 10:30               =GM= Цитата(Евгений Германович @ Jul 28 2008, 09... Jul 28 2008, 11:16                Евгений Германович Цитата(=GM= @ Jul 28 2008, 14:16) Ага, то... Jul 28 2008, 11:40                 =GM= Цитата(Евгений Германович @ Jul 28 2008, 10... Jul 28 2008, 14:52
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|