繁体   English   中英

C程序:函数未从主程序调用

[英]C program : function not being called from main

我正在使用瑞萨电子高性能嵌入式工作室用C语言编写瑞萨电子RX63N微控制器。 我面临的问题是未从main执行函数connectWiFi()。 以下是该函数的原型:

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(调试器的一部分)中的程序计数器时,它所停留的指令被标记为“ ??”。 ?”。

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

问题如下:

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

}

您未指定...包含的内容,但先前已定义

typedef char String[5000];

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

这在堆栈空间有限的微控制器系统上尤其可能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM