C程序:不从main调用函数

时间:2015-03-24 12:49:42

标签: c windows function embedded

我使用瑞萨高性能嵌入式工作室在C中编程瑞萨RX63N微控制器。我面临的问题是函数connectWiFi()没有从main执行。以下是函数的原型:

typedef char String[5000];
void connectWiFi(String id, int auth, String psk);

功能体是:

void connectWiFi(String id, int  auth, String psk)
{
    printf("log 0.1\n");
    char cwTemp2[10];
    String one,two,three;
    ...

}

我从main调用函数如下

void main(void)
{
    initPhant("data.sparkfun.com", "Public_Key", "Private_Key");
    xB_begin(XBEE_BAUD);//uart initialization
    // Set up WiFi network
    printf("Testing network\n");
    // connectWiFi will attempt to connect to the given SSID, 
//using encryption mode "encrypt", and the passphrase string given.
    printf("log0\n");
    connectWiFi("abcd", 2, "qwerty");
    // Once connected, print out our IP address
    printf("Connected!\n");
....
}

如您所见,我正在使用printf()调用来记录执行的进度。但是调试器控制台只打印这些:

Testing network
log0

未打印下一个printf()语句。因此我相信执行永远不会达到功能。 另一个奇怪的事情是代码实际上在打印“log0”后停止运行 - 当我在此时查看dissambler(调试器的一部分)中的程序计数器时,它所停留的指令被标记为“?? ?”。

在此先感谢您的帮助,我已经解决了这个问题几个小时了。

1 个答案:

答案 0 :(得分:4)

问题如下:

void connectWiFi(String id, int  auth, String psk)
{
    printf("log 0.1\n");
    char cwTemp2[10];
    ...

}

您没有指定......包含但您之前已定义的

typedef char String[5000];

因此,因为connectWiFi调用之前的行已执行,但connectWiFi函数的第一行未执行,看起来...包含String声明导致堆栈溢出。

这尤其适用于堆栈空间有限的微控制器系统。

解决方案是不从堆栈中分配如此大的字符串。由于微控制器的内存有限,因此也应该避免从堆中分配如此大的字符串。最好准确分配所需的字节数。