簡體   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