打印

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

[复制链接]
1161|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
外方爱|  楼主 | 2017-2-10 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 == '\n') {
            *c = '\0';
            break;
        }
        c++;
    }
    *argv = strtok(cmd, " ");
    while(*argv++ && argc < max_argc) {
        *argv = strtok(NULL, " ");
        argc++;
    }
    return argc;

相关帖子

沙发
backlugin| | 2017-2-10 22:12 | 只看该作者
这个还真没有看明白。

使用特权

评论回复
板凳
backlugin| | 2017-2-10 22:13 | 只看该作者
这个是分割指令吗?

使用特权

评论回复
地板
外方爱|  楼主 | 2017-2-13 09:43 | 只看该作者
backlugin 发表于 2017-2-10 22:13
这个是分割指令吗?

对  但具体的每一步是干嘛的 有的地方就看不懂了

使用特权

评论回复
5
外方爱|  楼主 | 2017-2-13 14:24 | 只看该作者

使用特权

评论回复
6
dirtwillfly| | 2017-2-13 15:04 | 只看该作者

用fifo方式接收一个字符串

使用特权

评论回复
7
外方爱|  楼主 | 2017-2-13 15:14 | 只看该作者
dirtwillfly 发表于 2017-2-13 15:04
用fifo方式接收一个字符串

if (((c - cmd) >= (sizeof(cmd)-1)) ||
            *c == '\n') {
            *c = '\0';
            break;
        }

这段是什么意思

使用特权

评论回复
8
外方爱|  楼主 | 2017-2-13 15:14 | 只看该作者
dirtwillfly 发表于 2017-2-13 15:04
用fifo方式接收一个字符串

if (((c - cmd) >= (sizeof(cmd)-1)) ||
            *c == '\n') {
            *c = '\0';
            break;
        }
这段是什么意思

使用特权

评论回复
9
dirtwillfly| | 2017-2-13 15:23 | 只看该作者
外方爱 发表于 2017-2-13 15:14
if (((c - cmd) >= (sizeof(cmd)-1)) ||
            *c == '\n') {
            *c = '\0';

看收到的字符是不是结束符号或者长度是不是到了

使用特权

评论回复
10
外方爱|  楼主 | 2017-2-13 15:38 | 只看该作者
dirtwillfly 发表于 2017-2-13 15:23
看收到的字符是不是结束符号或者长度是不是到了

多谢

使用特权

评论回复
11
aw50420181750| | 2017-2-13 17:43 | 只看该作者
本帖最后由 aw50420181750 于 2017-2-14 09:13 编辑

昨天没仔细看. c初始值与cmd相同,队列里读1个数据后加一个地址,同时对比c指向的内容.
等于用指针c做数组的增量变量.闲的蛋疼绕口.

使用特权

评论回复
12
suzhanhua| | 2017-2-13 20:51 | 只看该作者
外方爱 发表于 2017-2-13 09:43
对  但具体的每一步是干嘛的 有的地方就看不懂了

这是在哪里用到的代码?

使用特权

评论回复
13
suzhanhua| | 2017-2-13 20:53 | 只看该作者
backlugin 发表于 2017-2-10 22:13
这个是分割指令吗?

这个一般不是在main函数里面才能出现的么?

使用特权

评论回复
14
外方爱|  楼主 | 2017-2-14 09:26 | 只看该作者
aw50420181750 发表于 2017-2-13 17:43
昨天没仔细看. c初始值与cmd相同,队列里读1个数据后加一个地址,同时对比c指向的内容.
等于用指针c做数组 ...

这样不对? 还是有BUG?有更好的方法么

使用特权

评论回复
15
aw50420181750| | 2017-2-14 09:54 | 只看该作者
本帖最后由 aw50420181750 于 2017-2-14 09:58 编辑
外方爱 发表于 2017-2-14 09:26
这样不对? 还是有BUG?有更好的方法么

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

指针引用也许会快点,但快那一点if (((c - cmd) >= (sizeof(cmd)-1)) 这一句要多加一次减法计算.综合下来我看没啥优势.

使用特权

评论回复
16
houjiakai| | 2017-2-14 21:45 | 只看该作者
这个代码是做什么用的?

使用特权

评论回复
17
houjiakai| | 2017-2-14 21:48 | 只看该作者
返回的不是字符串的数值吗?

使用特权

评论回复
18
angerbird| | 2017-2-14 22:59 | 只看该作者
这个是做字符串的检测的

使用特权

评论回复
19
拉克丝| | 2017-2-18 14:33 | 只看该作者
用指针c做数组的增量变量

使用特权

评论回复
20
chenci2013| | 2017-2-18 20:34 | 只看该作者
这个返回值不是字符串数量么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

141

帖子

1

粉丝