реклама на сайте
подробности

 
 
> Две проблемы с PIC18F452, Не запускается даже кварц.
torik
сообщение Jun 23 2009, 07:07
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Давно уже не работал с пиками, многое позабыл...

Во-первых:
В режиме Debug, после програмирования выдает ошибку:
Цитата
ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information.


В хелпе ни слова о том как с ней бороться. Какие причины могут приводить к этому?

Во-вторых:
Установил компилятор HI-TECH PICC-18 PRO COMPILER (Microchip PIC micro) V9.61PL1.
У меня такое подозрение, что что-то либо с ним не так (а это маловероятно, т.к. люди пользуются), либо я что-то делаю не так. Программа, скомпилированная этим компилятором, не работает. Не запускается даже генератор. При этом на старом компиляторе все работает!

Полагаю, первая и вторая проблемы взаимосвязаны. Прошу спецов помочь решить эти вопросы...


Забыл совсем: отладчик - шайба ICD2, програмируется/читается нормально. Только не работает... smile.gif


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
xemul
сообщение Jun 23 2009, 08:19
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(torik @ Jun 23 2009, 11:07) *
Давно уже не работал с пиками, многое позабыл...

Во-первых:
В режиме Debug, после програмирования выдает ошибку:

В хелпе ни слова о том как с ней бороться. Какие причины могут приводить к этому?

Вы же сами написАли "Не запускается даже кварц".
Цитата
Во-вторых:
Установил компилятор HI-TECH PICC-18 PRO COMPILER (Microchip PIC micro) V9.61PL1.
У меня такое подозрение, что что-то либо с ним не так (а это маловероятно, т.к. люди пользуются), либо я что-то делаю не так. Программа, скомпилированная этим компилятором, не работает. Не запускается даже генератор. При этом на старом компиляторе все работает!

У Вас правильное подозрение. Поставьте STD, и попустит. (у меня есть предположение, что в хваленом ominiscient кодогенераторе Про версий что-то недолечивается)
Go to the top of the page
 
+Quote Post
torik
сообщение Jun 23 2009, 10:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Кварц, как оказалось, действительно не запускался по физической причине. Компилятор тут не виноват (я думал сперва о конф. битах...). Кондеры вместо 22 пФ были запаяны 0.1мкФ, вот и не запускался. Пойди догадайся.

Цитата
У Вас правильное подозрение. Поставьте STD, и попустит. (у меня есть предположение, что в хваленом ominiscient кодогенераторе Про версий что-то недолечивается)

Аналогичный эффект наблюдал на STD для 16-ых пиков: на старом работало (PICC 8.05), на новом - нет. Может быть есть еще предположения?

Пока все работает, но как проявится еще не известно.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
xemul
сообщение Jun 23 2009, 12:28
Сообщение #4



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(torik @ Jun 23 2009, 14:11) *
Аналогичный эффект наблюдал на STD для 16-ых пиков: на старом работало (PICC 8.05), на новом - нет. Может быть есть еще предположения?

~ в 8.5 поменялся формат масок для CONFIG (раньше они |, теперь &). Ну и OSCCAL при работе от внутреннего RC стал автоматом прописываться в стартапе. Других особенностей при переходе на новые версии не припомню. В последних даже INDF в хидерах не забывают описыватьsmile.gif.
ПРО иногда пробую для сравнения. Мелкие проекты собираются и даже (иногдаsmile.gif) работают. Но при использовании ~ более половины GPR обычно начинаются чудеса - локальные переменные исчезают (в мапе никаких упоминаний, в листинге куски кода просто отсутствуют), глобальные в стартапе инитятся кусками,... Иногда напрягает наплевательское отношение компилятора к пожеланиям bankN (чтобы использовать одну банку под быстрый кольцевой буфер, пришлось всё выписывать на асме). Хотя в целом оптимизатор в про явно разумнее.
Go to the top of the page
 
+Quote Post
torik
сообщение Jun 23 2009, 12:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Я, похоже, запарю сегодня окончательно всех. Ну хотя бы не буду плодить дополнительную тему.

Смотрим действия компилятора по команде:
Код
        LATB <<= 1;

В дизассемблере получаем:
Код
BCF 0xfd8, 0, ACCESS
RLCF 0xf8a, F, ACCESS


Мне бы надо сделать так, чтобы компилятор не делал сброс бита C. На СИ, как я понимаю, такое невозможно. Поправьте, если ошибаюсь.

Выход, вроде как очевидный - сделать ассемблерную вставку:
Код
        asm("rlcf _LATB,f");

Результат в дизассемблере плачевный:
Код
RLCF 0x8a, F, BANKED

А на:
asm("rlcf _LATB,f,ACCESS");

компилятор ругается. Ээээ.... В чем дело?

Соответственно получаем нерабочий код, надо перед ним делать
Код
BSR |= 0x0f;
, вручну банк переключать....


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
Stas
сообщение Jun 23 2009, 13:07
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751



Из мануала на НТ С:
Right shifts of unsigned integral values always clear the most significant bit of the result.
Left shifts (< < operator), signed or unsigned, always clear the least significant bit of the
result.
Go to the top of the page
 
+Quote Post
xemul
сообщение Jun 23 2009, 13:27
Сообщение #7



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(torik @ Jun 23 2009, 16:31) *
Мне бы надо сделать так, чтобы компилятор не делал сброс бита C. На СИ, как я понимаю, такое невозможно. Поправьте, если ошибаюсь.
А на:
Код
asm("rlcf _LATB,f,ACCESS");

компилятор ругается. Ээээ.... В чем дело?

Угу, еще одна заморока, учитывая, что на inline компилятор чихает. Невозможно, приходилось плодить различные костыли.
На явное
Код
asm("rlcf _LATB,f,0");

компилятор тоже огорчается?
Это Вы единичку гоняете по LATB?
Go to the top of the page
 
+Quote Post
torik
сообщение Jun 23 2009, 13:39
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Цитата
На явное
Код
asm("rlcf _LATB,f,0");

компилятор тоже огорчается?
Это Вы единичку гоняете по LATB?


Ага, ругается. Единичку гоняю по LATB, вообще данные из LATB выдвигаю через LATB7 максимально быстро...
Пока выкрутился через установку банка вручную.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
xemul
сообщение Jun 23 2009, 13:56
Сообщение #9



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(torik @ Jun 23 2009, 17:39) *
Единичку гоняю по LATB, вообще данные из LATB выдвигаю через LATB7 максимально быстро...
Пока выкрутился через установку банка вручную.

Если регистр просто гоняете по кругу (независимо от ...), то, чтобы банки не дергать, можно как-нить так
Код
LATB <<= 1; if(CARRY) LATB |= 1;
Go to the top of the page
 
+Quote Post
torik
сообщение Jun 24 2009, 06:31
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Не, я не гоняю по кругу, а "выдвигаю" данные 7 бит. И нужно как раз убрать лишнюю команду обнуления CARY. Вобщем-то это получается только на асме. Хотелось выяснить, может у HTPIC есть какой-либо способ это сделать, все-таки это не СИ для компа...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016