2012-09-12 21 views
1

我目前正在玩CSR 1000 chip,我想分配內存。我試着用malloc但是編譯器告訴我:CSR1000分配內存

未定義的參考`malloc的」

我認爲是因爲gcc-nostdlib參數運行

所以,請能有人與CSR uEnergy SDK經驗,告訴我爲什麼我無法分配內存,我該怎麼做呢?

+1

編寫你自己的'malloc'實現? –

回答

1

如果有一個與該芯片綁定的SDK爲內存分配提供基本例程,則使用這些例程,或者您可以編寫自己的分配器或使用現有的分配器(帶有一些小部件)。

作爲一種快速解決方案,您可以使用修改的鏈接描述文件或使用gcc'section'屬性在內存中標記區域(更多here),然後在您的malloc分配器中使用它作爲堆競技場。

一個非常簡單的分配器不會保留任何會計信息,如標題/頁腳,而是將一個區域線性地分配到另一個區域(在這種情況下,釋放本質上將是一個無操作),這不會讓你走遠但你將能夠運行簡單的程序。

您可能想要更復雜的東西,也可以考慮實現某種內存池或任何標準分配算法。

Dennis Ritchie和Brian Kernighan編寫的經典着作The C Programming Language提供了一個簡單的內存分配器,如果我重新調用正確的話。你可能想看看這個。

+0

好吧,所以實際上說,我只是開始我的「用戶內存」(我確實有這個定義),只是添加我需要的區域並保存新的「結束」 –

0

添加#include <malloc.h>到您的文件

+0

此頭文件似乎不可用。我包括stdlib,但顯然這些方法不可用 –

0

的頭我有三個月與此芯片的經驗。

malloc函數位於標準C庫中,該庫通常可用於桌面軟件開發或嵌入式Linux。但是這是一個小型且資源有限的嵌入式芯片。沒有標準的C庫。

如果您瀏覽uEnergy SDK安裝目錄,如下所示:C:\ uEnergy_SDK-2.0.0 \ doc \ reference \ html \ index.html。點擊頂部的模塊標籤。您會發現,在「C標準庫API」部分下,CSR提供了一些模仿標準C庫子集的功能。不幸的是,沒有像malloc這樣的方法。

一般來說,當您使用小型嵌入式系統時,通常沒有動態內存分配。但是,對於通常由事件驅動的RF應用程序,通常會提供一個簡單的動態內存分配功能,以便操作系統可以將傳入的數據包交給您的應用程序。我使用了TI的CC2430及其Zigbee堆棧。它們提供函數osal_mem_alloc和osal_mem_free,它們模擬malloc並在標準C庫中免費。

從我使用這兩款芯片的經驗來看,我發現CSR與TI相比,更像是iOS和Android。你不知道他們使用的MCU是什麼,除非他們告訴你它是一個16位的RISC。

我懷疑他們在內部有動態內存分配,但你的應用程序不能使用這些功能。RF數據包由AppProcessLmEvent函數中的操作系統交給您,從那裏您通過p_event_data指針獲取數據。您不必將其釋放,因爲一旦您完成處理該事件,操作系統將爲您執行此操作。

所以回到你的問題,你可以分配內存,所以你只需要保留一塊內存作爲全局數組並在其上工作。

希望這會有所幫助。