Начальная группа
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) --------------------------------------------- буду благодарен, если кто-нибудь сумеет помочь разобраться.
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (Travers) c = sqrt©;
- первый раз такое вижу в коде... Что это за копирайт тут ? )
|
|
|
|
|
Начальная группа
3 сообщений
Мужчина
|
а это так (_с_) отобразилось(в программе без подчеркиваний)
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Travers, попробуйте поставить задержку, чтобы была пауза перед очередным вычислением корня.
|
|
|
|
|
Начальная группа
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); }
Вот это работает... не пойму почему... но так или иначе проблема решена.
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (Travers) не пойму почему...
Потому что тот дохлый микроконтроллер, который стоит в этой пластиковой коробке не справляется с твоей задачей. Ты его заставляешь каждую миллисекунду производить гиганские расчеты и тем самым он просто напрочь виснет не справляясь. Уберете задержку - он снова сдохнет. Проверьте и убедитесь в этом
|
|
|
|
|