maxims 发表于 2014-10-2 00:20:15

非arduino编程问题求助

#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 = pField;
      }
      else
      {
            pFields = "";
      }
      pString = NULL; //parse next
    }
    if (strcmp("init", pFields) == 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个参数是怎么来的?
为何经常调用函数失败?一直卡在这里,偶尔能调用成功,屏幕有反应。

Super169 发表于 2014-10-2 12:36:35

你已有源碼了, 源碼本身就是最好最清楚的說明, 只有幾句的, 看看也不花時間吧.

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

有關 pFileds 的作用, 看這兩句吧:
pField = strtok(pString, delimiter);
:
pFields = pField;


numFields 就更簡單了:

for (uint32_t i=0; i<numFields; i++)


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

maxims 发表于 2014-10-2 14:19:27

Super169 发表于 2014-10-2 12:36 static/image/common/back.gif
你已有源碼了, 源碼本身就是最好最清楚的說明, 只有幾句的, 看看也不花時間吧.

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

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

我看这个函数写的是先调用了,然后在函数里边再生成的

Super169 发表于 2014-10-3 15:46:43

maxims 发表于 2014-10-2 14:19 static/image/common/back.gif
谢谢你的回复,不过有一点我不能理解。
函数的参数,难道不是在调用的时候就指定进去的吗?



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

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

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

maxims 发表于 2014-10-3 17:47:04

Super169 发表于 2014-10-3 15:46 static/image/common/back.gif
>函数的参数,难道不是在调用的时候就指定进去的吗?

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

好吧~虽然还不是很理解,但是,非常感谢你的耐心解答~:$
页: [1]
查看完整版本: 非arduino编程问题求助