C 程序:未从 main 调用函数
C program : function not being called from main
我正在使用 Renesas High-performance Embedded Workshop 在 C 语言中对 Renesas 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" 之后停止了 运行 - 当我此时查看反汇编程序(调试器的一部分)中的程序计数器时,它被卡在了指令,标记为“???”。
在此先感谢您的帮助,我已经为这个问题绞尽脑汁好几个小时了。
问题如下:
void connectWiFi(String id, int auth, String psk)
{
printf("log 0.1\n");
char cwTemp2[10];
...
}
您没有指定...包含什么,但您之前已经定义了
typedef char String[5000];
所以,因为 connectWiFi
调用之前的行被执行,但 connectWiFi
函数的第一行没有被执行,所以看起来 ...
包含 String
导致堆栈溢出的声明。
在堆栈有限的微控制器系统上尤其如此space。
解决方案是不要从堆栈中分配这么大的字符串。也应避免从堆中分配如此大的字符串,因为微控制器的内存有限。最好准确分配您需要的字节数。
我正在使用 Renesas High-performance Embedded Workshop 在 C 语言中对 Renesas 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" 之后停止了 运行 - 当我此时查看反汇编程序(调试器的一部分)中的程序计数器时,它被卡在了指令,标记为“???”。
在此先感谢您的帮助,我已经为这个问题绞尽脑汁好几个小时了。
问题如下:
void connectWiFi(String id, int auth, String psk)
{
printf("log 0.1\n");
char cwTemp2[10];
...
}
您没有指定...包含什么,但您之前已经定义了
typedef char String[5000];
所以,因为 connectWiFi
调用之前的行被执行,但 connectWiFi
函数的第一行没有被执行,所以看起来 ...
包含 String
导致堆栈溢出的声明。
在堆栈有限的微控制器系统上尤其如此space。
解决方案是不要从堆栈中分配这么大的字符串。也应避免从堆中分配如此大的字符串,因为微控制器的内存有限。最好准确分配您需要的字节数。