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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> ГЛЮКИ КОМПИЛЯТОРОВ, предлагаю описывать здесь
_Bill
сообщение Feb 7 2007, 13:33
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Fortune @ Feb 7 2007, 11:50) *
Цитата(_Bill @ Feb 6 2007, 17:28) *

... И вообще, "глюк"-то в чем?


Ну началось все с того, что я подключил atmega128 к монитору bg320240 через sed1375 и сделал интерфейс связи с писюком через usart.
так вот, если обсчитываю по приведенной выше программе значение функции
в компьютере - получаю на экране чистый синус,
если пытаюсь обсчитать в контроллере, то выводится мусор, точнее та же синусоида,но грязная, и если выводить ее повторно, через некоторое время синус обрисовывается треугольником, случайные точки тоже имеются.Жаль не могу прислать скриншот, потому что девайс пока у меня не работает - надо монитор доставать.
Ну а разобраться тогда с проблемой у меня не хватило терпения, поэтому и жалуюсь
на компилятор, ибо за собой греха "успеть не нашел".

А как со временем? Вы же пытаетесь формировать сигнал в реальном времени, а вычисления с плавающей точкой времени требуют.
Go to the top of the page
 
+Quote Post
GDI
сообщение Feb 7 2007, 14:14
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



delay(250) убрать - вот и будет время


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 7 2007, 15:19
Сообщение #18


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(_Bill @ Feb 7 2007, 14:33) *
А как со временем? Вы же пытаетесь формировать сигнал в реальном времени, а вычисления с плавающей точкой времени требуют.

Что значит "времени требуют"? Немного не понимаю. Я вызвал функцию, она посчитала. Функция ведь не в фоне выполняется.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Feb 7 2007, 16:01
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Fortune @ Feb 7 2007, 15:19) *
Цитата(_Bill @ Feb 7 2007, 14:33) *

А как со временем? Вы же пытаетесь формировать сигнал в реальном времени, а вычисления с плавающей точкой времени требуют.

Что значит "времени требуют"? Немного не понимаю. Я вызвал функцию, она посчитала. Функция ведь не в фоне выполняется.

Сколько времени занимает вычисление sin для одной точки - 100 мкс, 1 мс, 5 мс?
Go to the top of the page
 
+Quote Post
DimG
сообщение Feb 7 2007, 16:06
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 4-04-06
Из: г. Омск
Пользователь №: 15 777



Почему никто не обратил внимание на вот это
Цитата(GDI @ Feb 6 2007, 17:30) *
Может потому что функция имеет следующее объявление
double sin(double);
А вы ей float скормить пытаетесь...

тогда полная запись выглядела бы так
y=(unsigned char)((40.0*sin((double)a))+100.0),
а еще лучше переменную объявить сразу как
double a;
Хотя, честно говоря совсем не уверен, что это все это поможет.
Но есть еще функция
Цитата
point(x,y,0x0a);

где ее объявление? Может все дело в ней?
Go to the top of the page
 
+Quote Post
ahulap
сообщение Feb 7 2007, 17:26
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



запись y=(40*sin(a))+100 верна, я проверил на нескольких числах - точно как в виндовом калькуляторе. IAR 4.11A, "Use 64-bit doubles" не установлена.
может опять переполнение стека?
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 7 2007, 18:18
Сообщение #22


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(_Bill @ Feb 7 2007, 17:01) *
Сколько времени занимает вычисление sin для одной точки - 100 мкс, 1 мс, 5 мс?


На этот вопрос ответить не могу, нет возможности запустить девайс,
но разве это так важно? меня по-моему не должно беспокоить время выполнения.


Цитата(ahulap @ Feb 7 2007, 18:26) *
запись y=(40*sin(a))+100 верна, я проверил на нескольких числах - точно как в виндовом калькуляторе. IAR 4.11A, "Use 64-bit doubles" не установлена.
может опять переполнение стека?


Проверил в проекте, Data stack 0x80 bytes, return address stack 0x80 - это немало, вроде

Ну я вообще к тому, может кто-то использовал IAR и функцию SIN в реальных разработках,
считает или нет?
Go to the top of the page
 
+Quote Post
GDI
сообщение Feb 7 2007, 18:38
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
меня по-моему не должно беспокоить время выполнения.

А зачем тогда delay(250) в цикле стоит? чтоб медленнее работало?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 8 2007, 10:16
Сообщение #24


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



[quote name='GDI' post='207730' date='Feb 7 2007, 19:38']
А зачем тогда delay(250) в цикле стоит? чтоб медленнее работало?
[/quote]

Ну я сначала думал, что SED1375 не успевает прорисовывать линию, поэтому вставил delay(250),
но оказалось это не так. delay(250)- всего-навсего пустой цикл.


[quote name='DimG' date='Feb 7 2007, 17:06' post='207619']
Но есть еще функция
point(x,y,0x0a);[/quote]
где ее объявление? Может все дело в ней?
[/quote]

Вряд ли. Потому что прямые линии рисуются этой функцией нормально
Go to the top of the page
 
+Quote Post
GDI
сообщение Feb 8 2007, 15:59
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Не плохо было бы посмотреть какие данные получаются на выходе функции sin, до и после преобразования типов float -> char

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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Fortune
сообщение Feb 8 2007, 16:10
Сообщение #26


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Цитата(GDI @ Feb 8 2007, 16:59) *
... предлагаю считать данный случай не глюком компилятора, а глюком программиста, не в обиду будет сказано...


Не факт, если дойдут руки, я еще раз проверю чей глюк...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 8 2007, 17:23
Сообщение #27


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Fortune @ Feb 8 2007, 15:10) *
Цитата(GDI @ Feb 8 2007, 16:59) *

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


Не факт, если дойдут руки, я еще раз проверю чей глюк...
Просмотрел обсуждение и не нашел упоминания - какой именно компилятор использовался. Он имеет симулятор? Вы можете написать простую программу, заполняющую массив из 36(100, 360) чисел типа float значением sin(i * 2 * M_PI / (sizeof(array)/sizeof(array[0])) и таким образом выяснить виновата функция sin или дальнейшая формула? Если функция не виновата, можно медитировать формулу. если виновата функция - будем "разбирать" ее.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ahulap
сообщение Feb 8 2007, 18:28
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Цитата(Fortune @ Feb 7 2007, 10:50) *
если пытаюсь обсчитать в контроллере, то выводится мусор, точнее та же синусоида,но грязная, и если выводить ее повторно, через некоторое время синус обрисовывается треугольником, случайные точки тоже имеются.

Не может эта функция давать разные результаты. А 128 байт стека (если не ошибаюсь) может и не хватить, особенно если есть локальные массивы или обработка внутри прерываний...
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Feb 8 2007, 21:02
Сообщение #29


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Fortune @ Feb 6 2007, 11:28) *
...
Предлагаю также сюда кидать описание глюков (багов, граблей) при работе с компиляторами...


не знаю глюк или нет..
но и в симуляторе от атмела, и в самих кристаллах - неправильно трактуются ведущие нули, при инициализации регистров (азм). Не проходила (дай бог памяти) инициализация регистров с ведущими нулями в 10сс.

с уважением
(круглый)
ЗЫ
НЕ проходила - это значит что в регистр заносился бред, а не значение которое грузилось. Да, и ышо... Прогон с выводом на ЖК подтвердил - это результат компиляции...
ЗЫ ЗЫ
Ну про баги у кейла под 51 серию - я не буду тут распространяться. smile.gif
Go to the top of the page
 
+Quote Post
ahulap
сообщение Feb 8 2007, 21:35
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Цитата(kolobok0 @ Feb 8 2007, 20:02) *
не знаю глюк или нет..
но и в симуляторе от атмела, и в самих кристаллах - неправильно трактуются ведущие нули, при инициализации регистров (азм). Не проходила (дай бог памяти) инициализация регистров с ведущими нулями в 10сс.

Ведущим нулем обозначается восьмиричная сс. Или не все так просто? smile.gif
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 - 14:35
Рейтинг@Mail.ru


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