- 论坛徽章:
- 0
|
20可用积分
这是我程序的部分代码:
- while (1) {
- remaining = sizeof(buffer) - bufpos;
- if ( (len = read(fd, buffer + bufpos, remaining)) > 0) {
- bufpos += len;
- pos = 0;
- while ( (bufpos - pos) >= LENGTH) {
- cnt = data_parse(buffer + pos, display, win, gc);
-
- pos += cnt;
- }
-
- if (pos < bufpos) {
- memmove(buffer, buffer + pos, bufpos - pos);
-
- bufpos -= pos;
- } else {
- bufpos = 0;
- }
- }
- }
复制代码
data_parse部分:
- int
- data_parse(unsigned char *data, Display *display, Window win, GC gc)
- {
- int loop, bad;
- int x, y, p;
- int new_x, new_y, new_p;
- bad = 0;
-
- for (loop = 0; loop < LENGTH; loop++) {
- if ( ((loop == 0) && !(data[loop] & 0x80)) || ((loop != 0) && (data[loop] & 0x80))) {
- bad = 1;
- if ( (loop != 0) && (data[loop] & 0x80))
- return loop;
- }
- }
- if (bad)
- return LENGTH;
- if ( !(data[0] & 1)) {
- old_x = -1;
- old_y = -1;
- return LENGTH;
- }
- x = (data[1] << 7) + data[2];
- y = (data[3] << 7) + data[4];
- p = (data[5] << 7) + data[6];
- if (x > 6144 || y > 8192 || p > 1024)
- return LENGTH;
- new_x = x_table[x];
- new_y = y_table[y];
- new_p = p_table[p];
- if (old_x < 0 || old_y < 0) {
- old_x = new_x;
- old_y = new_y;
- }
- XSetLineAttributes(display, gc, ebook_p, LineSolid, CapRound, JoinRound);
- XDrawLine(display, win, gc, old_x, old_y, new_x, new_y);
- XFlush(display);
- old_x = new_x;
- old_y = new_y;
- return LENGTH;
- }
复制代码
这是个手写板的部分代码,这个程序从串口读数据,然后分析,得出X,Y坐标,再在屏幕上划出来,不过这个程序使X占CPU达到80%以上,有什么办法降低这个占用率吗? |
|