|
Две проблемы с PIC18F452, Не запускается даже кварц. |
|
|
|
Jun 23 2009, 07:07
|

Гуру
     
Группа: Свой
Сообщений: 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, програмируется/читается нормально. Только не работает...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
 |
Ответов
(1 - 9)
|
Jun 23 2009, 08:19
|
    
Группа: Свой
Сообщений: 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 кодогенераторе Про версий что-то недолечивается)
|
|
|
|
|
Jun 23 2009, 10:11
|

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

|
Кварц, как оказалось, действительно не запускался по физической причине. Компилятор тут не виноват (я думал сперва о конф. битах...). Кондеры вместо 22 пФ были запаяны 0.1мкФ, вот и не запускался. Пойди догадайся. Цитата У Вас правильное подозрение. Поставьте STD, и попустит. (у меня есть предположение, что в хваленом ominiscient кодогенераторе Про версий что-то недолечивается) Аналогичный эффект наблюдал на STD для 16-ых пиков: на старом работало (PICC 8.05), на новом - нет. Может быть есть еще предположения? Пока все работает, но как проявится еще не известно.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Jun 23 2009, 12:28
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(torik @ Jun 23 2009, 14:11)  Аналогичный эффект наблюдал на STD для 16-ых пиков: на старом работало (PICC 8.05), на новом - нет. Может быть есть еще предположения? ~ в 8.5 поменялся формат масок для CONFIG (раньше они |, теперь &). Ну и OSCCAL при работе от внутреннего RC стал автоматом прописываться в стартапе. Других особенностей при переходе на новые версии не припомню. В последних даже INDF в хидерах не забывают описывать  . ПРО иногда пробую для сравнения. Мелкие проекты собираются и даже (иногда  ) работают. Но при использовании ~ более половины GPR обычно начинаются чудеса - локальные переменные исчезают (в мапе никаких упоминаний, в листинге куски кода просто отсутствуют), глобальные в стартапе инитятся кусками,... Иногда напрягает наплевательское отношение компилятора к пожеланиям bankN (чтобы использовать одну банку под быстрый кольцевой буфер, пришлось всё выписывать на асме). Хотя в целом оптимизатор в про явно разумнее.
|
|
|
|
|
Jun 23 2009, 12:31
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 23 2009, 13:27
|
    
Группа: Свой
Сообщений: 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?
|
|
|
|
|
Jun 23 2009, 13:56
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(torik @ Jun 23 2009, 17:39)  Единичку гоняю по LATB, вообще данные из LATB выдвигаю через LATB7 максимально быстро... Пока выкрутился через установку банка вручную. Если регистр просто гоняете по кругу (независимо от ...), то, чтобы банки не дергать, можно как-нить так Код LATB <<= 1; if(CARRY) LATB |= 1;
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|