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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Не работает с float, mega16
vet
сообщение May 3 2006, 09:15
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(Serg_greS @ May 3 2006, 12:07) *
Подскажите почему не работает такая конструкция:
gc=(temp*0.5);
или
gc=(temp*(float)0.5);
тогда как
gc=(temp/2);
работает?
Потому что temp - целое.
Почитайте учебник по Си Кернигана-Ритчи или подобный, там хорошо изложено про преобразования типов в арифметике.

Применительно к данной конкретной ситуации - сделайте, как я советовал парой постов ранее. То есть, gc=((float)temp*0.5);


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
topkin
сообщение May 3 2006, 10:03
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 21-12-05
Из: Москва
Пользователь №: 12 476



gc - какой тип данных?
Go to the top of the page
 
+Quote Post
Serg_greS
сообщение May 3 2006, 13:14
Сообщение #18


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922



2 vet
Цитата
gc=((float)temp*0.5);

так тоже не работает в железке
не работает даже так:
float gc=0.0;
...
gc=((float)temp*(float)0.5); или gc=((float)temp*0.5);
temp=(unsigned int)gc;
long2char(temp);
...

, а в симуляторе AVR Studio пожалуйста любой вариант правильно исполняется.


2 topkin
Цитата
gc - какой тип данных?

даже перебрав все варианты в AVR Studio все работает, в железке нет.
Go to the top of the page
 
+Quote Post
WHALE
сообщение May 3 2006, 16:26
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Имхо,что-то с выводом на ALC.У тебя динамическая индикация,а работа с флоат жрет намного больше
времени.Поковыряй код там

Сообщение отредактировал WHALE - May 3 2006, 16:35


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Old1
сообщение May 3 2006, 17:46
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Serg_greS @ May 3 2006, 16:14) *
даже перебрав все варианты в AVR Studio все работает, в железке нет.

Может быть дело в оптимизации? Когда для AVRStudio проект компилировали, был включен профиль debug и настройки оптимизации по умолчанию? т.е без оптимизации? А потом переключаемся в release, автоматически устанавливается максимальный уровень оптимизации по размеру, компилим hex-файл и ... не работает... Такое бывает... Попробуйте при создании файла для заливки в контроллер отключить оптимизацию.
Go to the top of the page
 
+Quote Post
Serg_greS
сообщение May 4 2006, 04:03
Сообщение #21


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922



2 WHALE
Цитата
Имхо,что-то с выводом на ALC.У тебя динамическая индикация,а работа с флоат жрет намного больше
времени.Поковыряй код там

ALC - это имеется в виду АЛУ?
и насчет индикации: пробовал запрещать все прерывания перед началом вычислений, а после вычисления разрешать (т.к. индикация осуществляется из прерывания), все равно не помогает. Таже ситуация в AVR Studio работает и работает правильно, а в железке нет.


2 Old1
Цитата
Может быть дело в оптимизации? Когда для AVRStudio проект компилировали, был включен профиль debug и настройки оптимизации по умолчанию? т.е без оптимизации? А потом переключаемся в release, автоматически устанавливается максимальный уровень оптимизации по размеру, компилим hex-файл и ... не работает... Такое бывает... Попробуйте при создании файла для заливки в контроллер отключить оптимизацию.


Так как раз без оптимизаций всяких и компиллирую в Debug варианте.

Может это какая то особенность IAR`а v4.12 в evaluation варианте???? - косячная работа с float в реальном железе???

Сообщение отредактировал Serg_greS - May 4 2006, 04:04
Go to the top of the page
 
+Quote Post
otrog
сообщение May 4 2006, 05:48
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(Serg_greS @ May 4 2006, 08:03) *
Так как раз без оптимизаций всяких и компиллирую в Debug варианте.

А шьете тоже Debug вариант? blink.gif
Помоему надо шить Release и все заработает. cool.gif


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Old1
сообщение May 4 2006, 07:55
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Serg_greS @ May 4 2006, 07:03) *
2 WHALE
Цитата
Имхо,что-то с выводом на ALC.У тебя динамическая индикация,а работа с флоат жрет намного больше
времени.Поковыряй код там

ALC - это имеется в виду АЛУ?
и насчет индикации: пробовал запрещать все прерывания перед началом вычислений, а после вычисления разрешать (т.к. индикация осуществляется из прерывания), все равно не помогает. Таже ситуация в AVR Studio работает и работает правильно, а в железке нет.


2 Old1
Цитата
Может быть дело в оптимизации? Когда для AVRStudio проект компилировали, был включен профиль debug и настройки оптимизации по умолчанию? т.е без оптимизации? А потом переключаемся в release, автоматически устанавливается максимальный уровень оптимизации по размеру, компилим hex-файл и ... не работает... Такое бывает... Попробуйте при создании файла для заливки в контроллер отключить оптимизацию.


Так как раз без оптимизаций всяких и компиллирую в Debug варианте.

Может это какая то особенность IAR`а v4.12 в evaluation варианте???? - косячная работа с float в реальном железе???

Я ради интереса запустил код в JTAGICE+M16 (правда без оптимизации), так как ни странно код выполняется: формула вычисляется и с log() и c pow() , массив print[] заполняется, перекодировка работает, перекодированные данные в PORTC выбрасываются, разряды в PORTB двигаются, все это компилирую в том же IAR 4.12 и код гоняю в C-SPY... Проверьте все ли в порядке с динамической индикацией:временно отключите вычисление формул и запишите в переменную gc число (правдоподобное), если работает, проверьте вычисляется ли формула: на свободный пин контроллеоа повесьте светодиод и зажигайте/гасите его после вычисления формулы, или просто дрыгайте этим пином, а смотрите осциллографом (заодно и время вычисления увидите)...
Go to the top of the page
 
+Quote Post
Serg_greS
сообщение May 4 2006, 10:59
Сообщение #24


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922



2 Old1
Цитата
Я ради интереса запустил код в JTAGICE+M16

Добавил светодиод на PORTD7, зажигаю его на 5 сек после init() и на время вычислений + ~0.6 сек. Так вот какая интересная штука получается: если в gc записать число и даже умножить его там на 0.5 все отображается, но только такое впечатление, что это выражение вычисляет компилятор, а в проц зашивается константа. А если вычислять gc=(temp*0.5); или gc=(di*0.5); или gc=((float)temp*0.5); или gc=(unsigned int)((float)temp*0.5);
то светодиод не загорается даже после init(); (как будто проц висит и даже не проходит инициализация)

Может у меня какая-то мега битая?
ATMEGA16
16PI
0539J

Old1 не могли бы Вы прислать свой .hex файл, который работает у вас

Сообщение отредактировал Serg_greS - May 4 2006, 11:00
Go to the top of the page
 
+Quote Post
Old1
сообщение May 4 2006, 19:50
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Serg_greS @ May 4 2006, 13:59) *
...
Добавил светодиод на PORTD7, зажигаю его на 5 сек после init() и на время вычислений + ~0.6 сек. Так вот какая интересная штука получается: если в gc записать число и даже умножить его там на 0.5 все отображается, но только такое впечатление, что это выражение вычисляет компилятор, а в проц зашивается константа.

Так оно и есть.
Цитата
А если вычислять gc=(temp*0.5); или gc=(di*0.5); или gc=((float)temp*0.5); или gc=(unsigned int)((float)temp*0.5);
то светодиод не загорается даже после init(); (как будто проц висит и даже не проходит инициализация)
Может у меня какая-то мега битая?
ATMEGA16
16PI
0539J

Маловероятно...
Цитата
Old1 не могли бы Вы прислать свой .hex файл, который работает у вас

Нет проблем, завтра на работе скомпилирую hex и прикреплю к посту. Я код гонял в ИАРовском C-SPY+ JTAGICE, там используется UBROF формат (если я правильно понял )...
Go to the top of the page
 
+Quote Post
Old1
сообщение May 5 2006, 07:26
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



2 Serg_greS
Цитата(Old1 @ May 4 2006, 22:50) *
Нет проблем, завтра на работе скомпилирую hex и прикреплю к посту...

Вот выкладываю файл с прошивкой, и на всякий случай исходник, который компилировал. Прошивайте. Для информации, основные настройки проекта: cpu - mega16; memory model - small; CSTACK - 0x80; RSTACK - 32; language- C;optimizations- high/size; output format - intel-extended. FUSы - заводские.
Прикрепленные файлы
Прикрепленный файл  hex_c.rar ( 5.35 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
Serg_greS
сообщение May 5 2006, 08:40
Сообщение #27


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922



Цитата
Вот выкладываю файл с прошивкой, и на всякий случай исходник, который компилировал.


Спасибо что откликнулись, но только похоже что напрасно
Не работает sad.gif sad.gif sad.gif
молчит не дышит.
А Jtag в фузах у меня выключен, т.к. он на порте С и светится только часть сегментов при использовании gc=temp;,
все остальные восстановил по умолчанию (у меня стоял внутренний генератор на 8МГц. Пробовал также и Jtag включить (т.е. все фузы по умолчанию)) - эффект тотже.
Пробовал откомпиллировать присланный исходник с теми же параметрами проекта, не работает, но с чудесами
у Вас hex кончается адресом 668, у меня d20, т.е. больше на n-е количество байт. Уже не знаю на что и думать wacko.gif . Тупик какой-то, или проц всетаки с брачком.
Go to the top of the page
 
+Quote Post
Old1
сообщение May 5 2006, 09:29
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Serg_greS @ May 5 2006, 11:40) *
Цитата
Вот выкладываю файл с прошивкой, и на всякий случай исходник, который компилировал.


Спасибо что откликнулись, но только похоже что напрасно
Не работает sad.gif sad.gif sad.gif
молчит не дышит.
А Jtag в фузах у меня выключен, т.к. он на порте С и светится только часть сегментов при использовании gc=temp;,
все остальные восстановил по умолчанию (у меня стоял внутренний генератор на 8МГц. Пробовал также и Jtag включить (т.е. все фузы по умолчанию)) - эффект тотже.
Пробовал откомпиллировать присланный исходник с теми же параметрами проекта, не работает, но с чудесами
у Вас hex кончается адресом 668, у меня d20, т.е. больше на n-е количество байт. Уже не знаю на что и думать wacko.gif . Тупик какой-то, или проц всетаки с брачком.

Странно все это...
Что за адрес 668? В моем hex последний адрес вообще-то 0хCDD... Чем прошиваете контроллер? При прошивке верификация проходит без проблем? После прошивки пробовали читать флеш и сравнивать с исходным файлом?...
Go to the top of the page
 
+Quote Post
Serg_greS
сообщение May 5 2006, 12:47
Сообщение #29


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922



Цитата
Чем прошиваете

прошиваю с помощью http://avr.nikolaew.org/progr.htm
верификация проходит без проблем

Сообщение отредактировал Serg_greS - May 5 2006, 12:48
Go to the top of the page
 
+Quote Post
Old1
сообщение May 5 2006, 18:42
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(Serg_greS @ May 5 2006, 15:47) *
Цитата
Чем прошиваете

прошиваю с помощью http://avr.nikolaew.org/progr.htm
верификация проходит без проблем

Появилась мысль: если программирование и верификация FLASH проходит без проблем, код в симуляторе работает (и не в симуляторе у меня - тоже), у вас в железке работает,но только до тех пор пока в коде не появляются вычисления с плавающей точкой (при которых требуется больше оперативной памяти), то может быть в вашем контроллере какая либо область SRAM битая. Чтобы проверить ИМХО самый простой вариант взять другую М16 (если она есть), прошить и сравнить результаты, если же ее в наличии нет, тогда ради спортивного интереса и в целях самообразования стоит написать прогу для самотестирования SRAM (что-то вроде: записал байт в ячейку SRAM, прочитал, сравнил, и так по возможности проверить всю SRAM), залить ее в контроллер и посмотреть, что будет. Тут на форуме не так давно даже тема обсуждалась по поводу способов самотестирования AVR, поищите ознакомьтесь, может пригодится.
Go to the top of the page
 
+Quote Post

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

 


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


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