极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10677|回复: 4

非arduino编程问题求助

[复制链接]
发表于 2014-10-2 00:20:15 | 显示全部楼层 |阅读模式
#define NFIELDS (11)

//主函数调用下面这个函数
ParseCommands(buf, pFields, NFIELDS, ","); //buf是串口进来的数据,字符串格式

//函数
void ParseCommands(char* Buffer, char** pFields, uint32_t numFields, char* delimiter)
{
    char* pString = Buffer;
    char* pField;
    for (uint32_t i=0; i<numFields; i++)
   {
        pField = strtok(pString, delimiter);
        if (pField != NULL)
       {
            pFields[i] = pField;
        }
        else
        {
            pFields[i] = "";
        }
        pString = NULL; //parse next
    }
    if (strcmp("init", pFields[0]) == 0)//如果关键字为init
   {
        ILI9340_Display tft = ILI9340_Display(D11,D12,D13,D10,D9,D8);//初始化定义引脚
        tft.DispInit();//执行初始化过程
        tft.FillScreen(ILI9340_CYAN);//初始化后填充某颜色
    }


大概就是这样的,主函数调用ParseCommands(buf, pFields, NFIELDS, ",")的时候,除了串口进来的buf和“,”参数之外,其他2个参数是怎么来的?
为何经常调用函数失败?一直卡在这里,偶尔能调用成功,屏幕有反应。

回复

使用道具 举报

发表于 2014-10-2 12:36:35 | 显示全部楼层
你已有源碼了, 源碼本身就是最好最清楚的說明, 只有幾句的, 看看也不花時間吧.

> 除了串口进来的buf和“,”参数之外,其他2个参数是怎么来的?

有關 pFileds 的作用, 看這兩句吧:
  1. pField = strtok(pString, delimiter);
  2. :
  3. pFields[i] = pField;
复制代码



numFields 就更簡單了:

  1. for (uint32_t i=0; i<numFields; i++)
复制代码



调用函数失败的原因, 要看看你把什麼東西放進去, garbage in garbage out.
屏幕是否有反应, 有可能是分拆出了問題, 也有可能是屏幕的問題.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-2 14:19:27 | 显示全部楼层
Super169 发表于 2014-10-2 12:36
你已有源碼了, 源碼本身就是最好最清楚的說明, 只有幾句的, 看看也不花時間吧.

> 除了串口进来的buf和“ ...

谢谢你的回复,不过有一点我不能理解。
函数的参数,难道不是在调用的时候就指定进去的吗?

我看这个函数写的是先调用了,然后在函数里边再生成的
回复 支持 反对

使用道具 举报

发表于 2014-10-3 15:46:43 | 显示全部楼层
maxims 发表于 2014-10-2 14:19
谢谢你的回复,不过有一点我不能理解。
函数的参数,难道不是在调用的时候就指定进去的吗?

>  函数的参数,难道不是在调用的时候就指定进去的吗?

你的例子中, pFields 雖然是參數之一, 但它的作用是提供一個回傳的點, 而非要提供任何資料.

或者你可以看成是 pass by reference 的一個例子.  但這個有點複雜, 因為它是一個 char**, 而非一個直接的 pointer, 因為它要回傳多個 char array (或者你可以看成是幾個 string, 因為每個 string 也是 char array), 而每個 string 都是由 strtok 生成的.

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-3 17:47:04 | 显示全部楼层
Super169 发表于 2014-10-3 15:46
>  函数的参数,难道不是在调用的时候就指定进去的吗?

你的例子中, pFields 雖然是參數之一, 但它的作 ...

好吧~虽然还不是很理解,但是,非常感谢你的耐心解答~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 23:54 , Processed in 0.041389 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表