各位,谁能帮我分析分析这段代码的功能

2019-07-18 16:16发布

char get_cmd(char *argv[], char max_argc)
{
    static char cmd[MAX_CMD_LENGTH+1];
    char *c = cmd, argc = 0;
    while (1) {
        if (__kfifo_out(&recvfifo, c, 1) == 0) {
            if (!TIMERA_STARTED)
                LPM4;   // enter low power mode 4
            continue;
        }
        if (((c - cmd) >= (sizeof(cmd)-1)) ||
            *c == ' ') {
            *c = '';
            break;
        }
        c++;
    }
    *argv = strtok(cmd, " ");
    while(*argv++ && argc < max_argc) {
        *argv = strtok(NULL, " ");
        argc++;
    }
    return argc;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
外方爱
1楼-- · 2019-07-20 09:44
aw50420181750 发表于 2017-2-13 17:43
昨天没仔细看. c初始值与cmd相同,队列里读1个数据后加一个地址,同时对比c指向的内容.
等于用指针c做数组 ...

这样不对? 还是有BUG?有更好的方法么
aw50420181750
2楼-- · 2019-07-20 14:03
本帖最后由 aw50420181750 于 2017-2-14 09:58 编辑
外方爱 发表于 2017-2-14 09:26
这样不对? 还是有BUG?有更好的方法么

指针地址加减可以这么用,但没有直接用数组下标的方式直观.
如:直接用cmd做函参传递给读队列函数,用c做变量来统计读了几个数据.
立即数的++或--都是单指令,具体我也没测试速度会有多大差距.

指针引用也许会快点,但快那一点if (((c - cmd) >= (sizeof(cmd)-1)) 这一句要多加一次减法计算.综合下来我看没啥优势.
houjiakai
3楼-- · 2019-07-20 16:15
 精彩回答 2  元偷偷看……
houjiakai
4楼-- · 2019-07-20 21:16
返回的不是字符串的数值吗?
angerbird
5楼-- · 2019-07-21 00:50
这个是做字符串的检测的
拉克丝
6楼-- · 2019-07-21 04:54
用指针c做数组的增量变量

一周热门 更多>