123
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: nightmare, Huntswarrior, Aleks_Crow, {{TNT}} 
Форум » Мастерская » Начинающим робототехникам » sqrt() вешает NXT (Написал простенькую процедурку на NXC, которая повесила блок)
sqrt() вешает NXT
Отправлено 25.11.2012 - 20:231
Начальная группа
3 сообщений
Мужчина
Процедурка(кстати была функцией раньше, стала процедурой для упрощения понимания и поиска, где же именно зависает программа) делает следующее, приведу код с комментариями:

/*
Входные аргументы:
int cur_xpos, int cur_ypos - текущие координаты робота
int xpos, int ypos - координаты, куда надо переместиться

Что выполняет процедура?
Она вычисляет длину пути( length ), который надо проехать из текущей точки в заданную
*/
void GetLength(int xpos, int ypos, int cur_xpos, int cur_ypos)
{
float length=0;
int side_x=0, side_y=0;

side_x = xpos - cur_xpos;
side_y = ypos - cur_ypos;
float value = side_x*side_x + side_y*side_y;
/**/
length = sqrt(value);

// ClearScreen();
// NumOut(0,LCD_LINE2,length);
// Wait(100);
// return length;
}

task main()
{
int xpos = 10, ypos = 10;
int cur_xpos = 0, cur_ypos = 0;
while (1) GetLength(xpos, ypos, cur_xpos, cur_ypos);

}

Добавлено (25.11.2012, 20:23)
---------------------------------------------
кстати, вот эта процедура работает:

void Find_sqrt()
{
float c=6.25;

ClearScreen();
TextOut(0, LCD_LINE2, " test-program");

TextOut(0, LCD_LINE4, " Trying to eval");

c = sqrt( c );
NumOut(0, LCD_LINE6, c);
Wait(1000);
}

Добавлено (25.11.2012, 20:23)
---------------------------------------------
буду благодарен, если кто-нибудь сумеет помочь разобраться.


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 25.11.2012 - 20:372
Администраторы
3318 сообщений
Мужчина
Quote (Travers)
c = sqrt©;


- первый раз такое вижу в коде... Что это за копирайт тут ? )


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 25.11.2012 - 20:423
Начальная группа
3 сообщений
Мужчина
biggrin а это так (_с_) отобразилось(в программе без подчеркиваний)


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 25.11.2012 - 21:064
Администраторы
3318 сообщений
Мужчина
Travers, попробуйте поставить задержку, чтобы была пауза перед очередным вычислением корня.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 25.11.2012 - 21:495
Начальная группа
3 сообщений
Мужчина
void proc0(int x1, int y1, int x0, int y0)
{
string output;
/*
int x1 = 3;
int x0 = 0;
int y1 = 4;
int y0 = 0;
*/
int side_x = x1 - x0;
int side_y = y1 - y0;
float square_length = side_x*side_x + side_y*side_y;
float length;
length = sqrt(square_length);
output = NumToStr(length);
TextOut(0, LCD_LINE5, output, false);
}

task main() {
//GetLength(3, 4, 0, 0);
float val = 0;
string output;
//val = Sq(625);
output = NumToStr(val);
TextOut(0, LCD_LINE3, output, true);

proc0(38,4,0,0);
Wait(10000);
}

Вот это работает... не пойму почему... но так или иначе проблема решена.


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 25.11.2012 - 21:526
Администраторы
3318 сообщений
Мужчина
Quote (Travers)
не пойму почему...


Потому что тот дохлый микроконтроллер, который стоит в этой пластиковой коробке не справляется с твоей задачей. Ты его заставляешь каждую миллисекунду производить гиганские расчеты и тем самым он просто напрочь виснет не справляясь. Уберете задержку - он снова сдохнет. Проверьте и убедитесь в этом kind


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Форум » Мастерская » Начинающим робототехникам » sqrt() вешает NXT (Написал простенькую процедурку на NXC, которая повесила блок)
Страница 1 из 11
Поиск: