void draw_string(uint8_t font_id, uint16_t x, uint16_t y, char *str)
{
gfx_point2d_t pos;
gfx_rect_t rect;
int i, nchar,n,m;
pos.x = x;
pos.y = y;
rect.width = 24;
rect.height = 24;
i = 0;
while (str[i] != 0) {
nchar = str[i];
pos.x+=12;
for(n=0;n<16;n++){
for(m=0;m<16;m++){
if(n*16+m==nchar){
//pos.x = i*24;
rect.x =m*24;
rect.y =n*24;
gfx_set_colorrop(0xcc);//api функции
gfx_sprite(font_id, &rect, &pos);//api спрайта,рубит rect'ом ресует в pos
}
}
}
i++;
}
}
пришлось писать такую функцию,ну как видно много циклов-меньше скорость,как "ускороить" её?(пока на скорость не влияет)
//целый корень....
int isqrt(unsigned x) {
unsigned m, y, b;
m = 0x40000000;
y = 0;
while(m != 0) { // Do 16 times.
b = y | m;
y = y >> 1;
if (x >= b) { x = x - b; y = y | m; }
m = m >> 2;
}
return y;
}
float fsqrt(unsigned float x){//дробный корень с 3 числами после знака...
int p=isqrt(x*100000);
float n=(1.0*x)/(p*p);
int s=isqrt(n*1000000);
float m=1.0*p*(s/1000.0);
return m/1000.0;
}
а эта считает корень без сопра(сопроцессора),как видно много делений на большие числа и умножение,а пользоваться смещением не умею.. подкинте идеи.