malloc 函式在keil中使用應注意什麼

2021-08-03 08:14:16 字數 498 閱讀 4259

在keil 中使用malloc()函式經常會遇到不正常的情況,通常表現為不能正確分配記憶體

空間,或者只能分配很小的空間。

出現這個問題的原因大概有三個:

1、所用的arm

晶元本身記憶體已經被其**占用,所餘空間不夠malloc分配。

解決辦法:a、釋放其他**浪費的ram空間;b、擴容。

2、未進行堆的初始化:在keil中使用malloc

函式時,必需要對heap進行初始化,否則不能正常使用malloc。

解決辦法:a、使用keil自帶的啟動**,該彙編啟動**本身已經完成了對heap的初始化;(我們通常建立的工程都是使用keil自帶的啟動**,或者在該基礎上修改的**,所以這個問題基本上不用考慮)

b、自己編寫heap初始化彙編**,該初始化**必須放在呼叫c**之前,最好放在啟動**中。

3、堆空間太小。

解決辦法:在堆初始化**中,將堆大小增加,一般0x400大小足夠,如果不夠的話,可根據實際除錯情況進行增加。

在頻繁呼叫的底層函式中使用malloc的影響分析

近來,測試中發現乙個問題,ipcam會自動重啟。經過定位,是增加了乙個外部i2c timer作為看門狗引起的。看了ex wdt keep alive的code後發現,呼叫了乙個i2c writebytes 函式,這個func中呼叫了兩次malloc申請記憶體,並且,對malloc分配的 指標未作nu...

在keil中使用bdata型可位定址全域性變數

使用keil開發51微控制器下位機程式,希望使用dbata型全域性變數。首先了解一下51的片內ram.51微控制器中,片內ram分為data,bdata,和idata,data指前面0x00 0x7f 128個位元組。idata指的是0 0xff 這256個位元組儲存區。前128個位元組同data完...

keil中使用 變引數巨集 VA ARGS

本文說的 va args 就是乙個可變引數巨集,與printf中可變引數的巨集定義乙個道理,是新c99規範中增加的。va args 詳情內容 va args 它是乙個可變引數的巨集,就是將左邊巨集中 的內容原樣抄寫在右邊 va args 所在的位置。要注意的是,printf 的輸出格式是括號內左邊是...