Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 03.08.2008, 11:49   #1
WildFrog
Junior Member
 
Регистрация: 03.08.2008
Возраст: 36
Сообщений: 3
Вес репутации: 103/0
WildFrog will become famous soon enoughWildFrog will become famous soon enough
Отправить сообщение для WildFrog с помощью ICQ
Post Не работает умножение переменных в PIC18F2520!!!

Доброе время суток всем!!!
Вообщем, проблема в следующем:

если делать так (опускаю все лишнее):

unsigned long freq_set;
unsigned long code = 23600;
double delta = 582.067;

main()
{
freq_set = (unsigned long) (code*delta); //расчет частоты синтезатора
send_word(freq_set,4); //функция посылки данных по самодельному SPI
}

то, все работает в Протеусе, работает пошаговая проверка в MPLABе (все значения получают правильными после умножения переменных, изменяется значение на портах), но после прошивки настоящей пикухи происходит ерунда, осциллографом вижу клок SPI, стробы....а вот сами данные абсолютно не верные (вывожу на порт B).

Если же сделать так:
main()
{
freq_set = (unsigned long) (23600l*582.067); //расчет частоты синтезатора
send_word(freq_set,4); //функция посылки данных по самодельному SPI
}

или так

main()
{
send_word(0x019DF301,4); //функция посылки данных по самодельному SPI
}
То все работает отлично, то есть данные нормально передаются в функцию и порт замечательно работает...

Функция void send_word(unsigned long, char);
Прошиваю ChipProg +!!

Получается, что в пикухе не работает умножение переменных!!!! Может быть кто знает что с этим делать?!??!?
WildFrog вне форума   Ответить с цитированием
Старый 03.08.2008, 22:25   #2
Kbc
Junior Member
 
Регистрация: 01.03.2007
Возраст: 40
Сообщений: 25
Вес репутации: 108/49
Kbc will become famous soon enoughKbc will become famous soon enough
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Цитата:
Сообщение от WildFrog Посмотреть сообщение
Получается, что в пикухе не работает умножение переменных!!!!
Так не бывает.
Какой компилятор?
Kbc вне форума   Ответить с цитированием
Старый 04.08.2008, 06:15   #3
WildFrog
Junior Member
 
Регистрация: 03.08.2008
Возраст: 36
Сообщений: 3
Вес репутации: 103/0
WildFrog will become famous soon enoughWildFrog will become famous soon enough
Отправить сообщение для WildFrog с помощью ICQ
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Пишу MPLAB 7.60 с установленным HT-PIC'ом
WildFrog вне форума   Ответить с цитированием
Старый 04.08.2008, 21:57   #4
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию "Железо" и симулятор это две большие разницы.

Цитата:
Сообщение от WildFrog Посмотреть сообщение
Доброе время суток всем!!!
Вообщем, проблема в следующем:

если делать так (опускаю все лишнее):

unsigned long freq_set;
unsigned long code = 23600;
double delta = 582.067;

main()
{
freq_set = (unsigned long) (code*delta); //расчет частоты синтезатора
send_word(freq_set,4); //функция посылки данных по самодельному SPI
}

то, все работает в Протеусе, работает пошаговая проверка в MPLABе (все значения получают правильными после умножения переменных, изменяется значение на портах), но после прошивки настоящей пикухи происходит ерунда, осциллографом вижу клок SPI, стробы....а вот сами данные абсолютно не верные (вывожу на порт B).

Если же сделать так:
main()
{
freq_set = (unsigned long) (23600l*582.067); //расчет частоты синтезатора
send_word(freq_set,4); //функция посылки данных по самодельному SPI
}

или так

main()
{
send_word(0x019DF301,4); //функция посылки данных по самодельному SPI
}
То все работает отлично, то есть данные нормально передаются в функцию и порт замечательно работает...

Функция void send_word(unsigned long, char);
Прошиваю ChipProg +!!

Получается, что в пикухе не работает умножение переменных!!!! Может быть кто знает что с этим делать?!??!?
Посмотрите сгенерированный код и проанализируйте его. Одна из причин неправильной работы программы может быть переполнение стека. Наверняка компилятор генерирует вызов функций приведения типов, операции умножения и т.п. Если к тому же еще и прерывания используются, то поведение программы может стать вообще непредсказуемым.
Bill вне форума   Ответить с цитированием
Старый 04.08.2008, 22:38   #5
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,936
Вес репутации: 5757/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию да, может и стек

Цитата:
Сообщение от Bill Посмотреть сообщение
Посмотрите сгенерированный код и проанализируйте его. Одна из причин неправильной работы программы может быть переполнение стека. Наверняка компилятор генерирует вызов функций приведения типов, операции умножения и т.п. Если к тому же еще и прерывания используются, то поведение программы может стать вообще непредсказуемым.
тем более в его вырожденных числовых примерах компилятор скорее всего умножение выполнит ещё на стадии трансляции
Greg вне форума   Ответить с цитированием
Старый 04.08.2008, 22:54   #6
tester
Super Moderator
 
Аватар для tester
 
Регистрация: 28.02.2007
Возраст: 43
Сообщений: 3,577
Вес репутации: 4386/126
tester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond reputetester has a reputation beyond repute
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Цитата:
Сообщение от WildFrog Посмотреть сообщение
Пишу MPLAB 7.60 с установленным HT-PIC'ом
Не поленился и проверил твой пример. На момент вызова функции send_word() переменная freq_set
= 13736704 (для 24-битных float)
= 13736782 (для 32-битных float)

Кстати, ключ -D32 у тебя стоит?

Прогони в симуляторе MPLab - все прескрасно работает.

MPLab 8.0, PICC18 9.60 std
tester вне форума   Ответить с цитированием
Старый 04.08.2008, 23:01   #7
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,936
Вес репутации: 5757/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Цитата:
Сообщение от tester Посмотреть сообщение

Прогони в симуляторе MPLab - все прескрасно работает.
так он и говорит, что в симуляторе всё работает, и в протеусе, и в мплабе. В живом камне не идёт
Greg вне форума   Ответить с цитированием
Старый 05.08.2008, 00:53   #8
bzx
Senior Member
 
Аватар для bzx
 
Регистрация: 25.02.2007
Адрес: St. Petersburg
Возраст: 46
Сообщений: 507
Вес репутации: 1159/64
bzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud of
Отправить сообщение для bzx с помощью ICQ Отправить сообщение для bzx с помощью Skype™
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Посмотри биты конфигурации (Configuration Bits)
bzx вне форума   Ответить с цитированием
Старый 05.08.2008, 06:04   #9
WildFrog
Junior Member
 
Регистрация: 03.08.2008
Возраст: 36
Сообщений: 3
Вес репутации: 103/0
WildFrog will become famous soon enoughWildFrog will become famous soon enough
Отправить сообщение для WildFrog с помощью ICQ
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Всем откликнувшимся огромное спасибо!!!
Вчера разобрался откуда ноги растут... В 2520 есть режим РАСШИРЕННЫЕ ИНСТРУКЦИИ, так вот это все и портило картину.. В МПЛАБе где то (так и не нашел)надо указывать, что используется этот режим. Помимо доп. команд еще меняется адресация, вот тут все и висло!! в конфигурации отключил XINST и все пошло!!!
Всем огромное спасибо!!!
WildFrog вне форума   Ответить с цитированием
Старый 05.08.2008, 08:32   #10
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ответ: да, может и стек

Цитата:
Сообщение от Greg Посмотреть сообщение
тем более в его вырожденных числовых примерах компилятор скорее всего умножение выполнит ещё на стадии трансляции
В этом-то все и дело. Свертка констант во время трансляции самый простой вид оптимизации, и практически любой компилятор это делает.
Bill вне форума   Ответить с цитированием
Старый 05.08.2008, 10:20   #11
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,936
Вес репутации: 5757/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Ответ: да, может и стек

Цитата:
Сообщение от Bill Посмотреть сообщение
В этом-то все и дело. Свертка констант во время трансляции самый простой вид оптимизации, и практически любой компилятор это делает.
помогает объявление переменных как volatile, ну и конечно анализ ассемблерного листинга
Greg вне форума   Ответить с цитированием
Старый 06.08.2008, 10:20   #12
Kbc
Junior Member
 
Регистрация: 01.03.2007
Возраст: 40
Сообщений: 25
Вес репутации: 108/49
Kbc will become famous soon enoughKbc will become famous soon enough
По умолчанию Ответ: Не работает умножение переменных в PIC18F2520!!!

Цитата:
Сообщение от WildFrog Посмотреть сообщение
В 2520 есть режим РАСШИРЕННЫЕ ИНСТРУКЦИИ, так вот это все и портило картину.. В МПЛАБе где то (так и не нашел)надо указывать, что используется этот режим. Помимо доп. команд еще меняется адресация, вот тут все и висло!! в конфигурации отключил XINST и все пошло!!!
Всем огромное спасибо!!!
Когда первый раз взял 2520 побаловаться, тоже дня два мучался, даже светодиод мыргал не с той частотой, которую задавал. Расширенные функции отключил - все нормализовалось. Я думал, что это конкретно CCS-а косяк...
Kbc вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по ICD2 (не работает :-(( ) backa Продукция MICROCHIP 31 14.01.2010 16:09
USB HID, пример от Microchip. Работает, но не через все USB-хабы... majorPAE Продукция MICROCHIP 22 14.04.2009 13:38
PIC18F8720 PORTA не работает на вход Ilyxa Продукция MICROCHIP 5 29.03.2007 17:37
функция на С не работает в нужном месте памяти maagalex Общетехнические вопросы 0 22.03.2007 23:26
не работает memcpypgm2ram в MCC18 ramonchik Продукция MICROCHIP 1 09.03.2007 14:49


Часовой пояс GMT +3, время: 06:30.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot