C语言用read读取串口信息,按每字节读取和一次性读取一定长度效率上有区别吗?
答案:2 悬赏:50 手机版
解决时间 2021-03-07 23:11
- 提问者网友:温柔港
- 2021-03-07 02:56
C语言用read读取串口信息,按一个字节一个字节的读取和一次性读取一定长度效率上有区别吗?如果有的话相差多大?
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-03-07 03:53
肯定有区别的,而且相差还比较大。
因为read是用户态程序,然后每read一次都对应一次系统调用 (从用户态切换到内核态,再切回到用户态),其实耗时最多的就是状态切换。
如果一次性读取5个字节,那么就只有一次系统调用(两个状态切换),
如果一次读一字节,需要读5次,就有5次系统调用 (10个状态切换)。
具体相差多大,跟实际的环境有关,测试的话要大量的数据才能看出来。
因为read是用户态程序,然后每read一次都对应一次系统调用 (从用户态切换到内核态,再切回到用户态),其实耗时最多的就是状态切换。
如果一次性读取5个字节,那么就只有一次系统调用(两个状态切换),
如果一次读一字节,需要读5次,就有5次系统调用 (10个状态切换)。
具体相差多大,跟实际的环境有关,测试的话要大量的数据才能看出来。
全部回答
- 1楼网友:佘樂
- 2021-03-07 05:19
给你个思路,直接给你编的话可能对不上你的代码。 自己再定义一个数组temp1,给一个for循环,类似于 for(i = 1; i < 5; i ++){ temp1[i - 1] = temp[i]; } 这样temp1[]中就存储了你的后四个字节,之后再将这个temp1的元素一个一个转换为十六进制输出就好,比如说 for(pos = 0;pos < 4; pos ++) printf("%f ",(float)temp1[pos]); printf("\n");
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯