【发布时间】:2026-02-16 19:45:01
【问题描述】:
我正在使用 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”后实际上停止运行 - 当我此时查看 dissambler(调试器的一部分)中的程序计数器时,它被卡住的指令被标记为“?? ?”。
在此先感谢您的帮助,我已经为这个问题绞尽脑汁了好几个小时。
【问题讨论】:
-
如果这是 C,为什么要标记 C++? (语言及其“自然”解决方案可能非常不同)
-
String[5000] 似乎很大。会不会 connectWiFi 包含 String 局部变量并导致堆栈溢出?
-
如果您有 ICE(电路仿真器),请使用 Hew 调试器单步执行代码。您的代码看起来不错。您可以通过从函数中删除除
print之外的所有代码进行测试,并且可以逐渐添加更多代码。 -
typedef char String[5000];是您的发明还是来自工具包? -
@Sush:是的,这可能会造成问题:尝试将此 typedef 设置为更小的类型,例如
typedef char String[100];,看看它是否仍然挂在同一位置。
标签: c windows function embedded