首页 > 解决方案 > GCC和Arduino中的函数指针不同的行为

问题描述

在我的 C 程序中,我有一个命令解释器的框架。它在 Linux/GCC 上运行良好,但在 Arduino 中它不会返回预期的结果。

下面找到PC代码。我对 Arduino 进行了适当的更改,除了返回字符串外它都可以工作(请参见清单底部的第二行)。

PC上的C代码(工作):

#include <stdio.h>

char* help(char *s){
  char *helpString="This is the help string\n";
  return helpString;
}

typedef struct {
  const char* command;
  char* (*cmdExec)(char *s);
}S_COMMAND;


S_COMMAND cmdTable[]= {
   {"he", help}
};

int main(void){
    char *text;

    printf("\n%s\t",cmdTable[0].command); // returns "he"

    text = (cmdTable[0].cmdExec)("0");
    /* returns help string on PC as expected, but garbage on Arduino */

    printf("\n%s", text);
}

标签: cgccarduino

解决方案


感谢您的建议。我修改了如下代码(查看 Node.JS),现在在两个平台上都可以正常工作。

int help(char *req, char *res){
  strcpy(res, "This is the help string...\n");
  return 0;
}

typedef struct {
  char* command;
  int (*cmdExec)(char *request, char *result);
}S_COMMAND;

S_COMMAND cmdTable[]= {
  {"he", help}
};

int main(void){
    char text[20];

    cmdTable[0].cmdExec("0", text);
}

推荐阅读