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

 
 
> Математика в AvrStudio, Проблемы с программированием вычислений
Aiva
сообщение May 13 2009, 15:56
Сообщение #1


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

Группа: Участник
Сообщений: 126
Регистрация: 7-08-07
Пользователь №: 29 631



Здравствуйте.
Помогите, пожалуйста, советом, в каком месте описано как правильно организовывать переменные и проводить вычисления в Atmeg-ах.

Пишу программку для , в которой нужно проводить множество математических операций (в основном умножений, делений, сложений). Чо-то очень туго у меня получается. Компилятор выдает вовсе не то что прошу. Не могу уловить систему моих ошибок sad.gif.
Я раньше с IARом работал - там как-то проще было (правда и вычислений в тех задачах особых не было).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aiva
сообщение May 16 2009, 19:21
Сообщение #2


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

Группа: Участник
Сообщений: 126
Регистрация: 7-08-07
Пользователь №: 29 631



Хотя я методом тыка раздуплил проблемку, которая подвигнула меня на оформление данной темы, на будущее очень хочется услышать комментарии спецов smile.gif. С Вашего позволения привожу код примера моих проблем.

Итак некоторая функция должна рассчитывать пилу по заданному углу. Сперва я написал все формулы влоб:

Код
const unsigned int N0=0b10000000000000;
const unsigned int Nmax=0b11111111111111;
unsigned long  Wvariable2;

unsigned long sinus(unsigned int angle)
{
  if (angle<=90)
   { Wvariable2=N0+angle*Nmax/180;}
  if (angle>270)
   { Wvariable2 = (angle-270)*Nmax/180;}
  if ((angle>90)&(angle<=270))
   { Wvariable2 = Nmax-(angle-90)*Nmax/180;}
return Wvariable2;}


Вроде по разрядной сетке противоречий нет. Но ничего не получилось sad.gif
Далее я крутил крутил и интуитивно получил рабочий вариант:

Код
unsigned int sinus(unsigned int angle)
{
unsigned long  Wvariable2;
unsigned int Wv1;

      Wvariable2 = Nmax;
  if (angle<=90)
    {
      Wvariable2 *= angle;
      Wvariable2 = Wvariable2/180;
      Wvariable2 += N0;
      Wv1=Wvariable2;    
    }
  if (angle>270)
    {
      Wvariable2 *= (angle-270);
      Wv1= (Wvariable2/180);
    }
  if ((angle>90)&(angle<=270))
    {
      Wvariable2 *= (angle-90);
      Wvariable2 = Wvariable2/180;
      Wv1 = (Nmax-Wvariable2);
    }
return Wv1;}


Как же правильно решать подобные задачки ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Aiva   Математика в AvrStudio   May 13 2009, 15:56
- - defunct   Цитата(Aiva @ May 13 2009, 18:56) Я раньш...   May 13 2009, 18:22
- - IXFN50N80Q2   Хм. Ну ANSI C а вообще для начала отключите опимиз...   May 13 2009, 18:57
|- - Сергей Борщ   Цитата(Aiva @ May 13 2009, 18:56) Компиля...   May 13 2009, 20:41
|- - 777777   Цитата(IXFN50N80Q2 @ May 13 2009, 22:57) ...   May 15 2009, 09:04
|- - SysRq   Цитата(Aiva @ May 16 2009, 23:21) Как же ...   May 16 2009, 21:13
|- - _Diman_   Цитата(Aiva @ May 16 2009, 23:21) Код {...   May 17 2009, 14:53
|- - Сергей Борщ   Цитата(_Diman_ @ May 17 2009, 17:53) Инте...   May 17 2009, 15:16
|- - _Diman_   Цитата(Сергей Борщ @ May 17 2009, 19:16) ...   May 17 2009, 15:42
|- - Сергей Борщ   Цитата(_Diman_ @ May 17 2009, 18:42) Объя...   May 17 2009, 16:11
|- - _Diman_   Спасибо! Блин, я то думал что так тоже прави...   May 17 2009, 16:26
- - DpInRock   Цитатаif ((angle>90)&(angle<=270)) Чисто...   May 16 2009, 20:29
|- - 777777   Цитата(DpInRock @ May 17 2009, 00:29) Цит...   May 17 2009, 04:21
|- - Aiva   Цитата(777777 @ May 17 2009, 07:21) А что...   May 17 2009, 06:14
- - DpInRock   В данном случае работать должно и &.   May 16 2009, 21:21


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

 


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


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