IAR編譯靜態和非靜態函式的問題

2021-09-26 22:46:47 字數 728 閱讀 4612

# iar編譯static函式和非函式的問題
static

void

dn_fsm_cancelevent

(void

)

static

void

dn_reply_gettime()

生成的組合語言

dn_reply_gettime:

0x57e8: 0xb580 push

dn_fsm_cancelevent();

0x57ea: 0xf7ff 0xfc93 bl dn_fsm_cancelevent ; 0x5114

乙個跳轉語句,簡單明瞭,進入被呼叫函式

**一樣,只是dn_reply_gettime前面沒有static限定編譯出來的**變成了:

bkpt;

ldc2 …

一執行ldc2就出hardware fault: cfsr.nocp

the processor has escalated a configurable-priority exception to hardfault.

先定義為非static函式,出這個錯。當我把它改為static,然後再刪除static之後,居然又和static一樣了。再也無法復現剛才的問題了┭┮﹏┭┮

靜態函式和非靜態函式的區別(靜態方法和非靜態方法)

首先,靜態函式 只有當程式結束的時候才從記憶體消失,生命週期長。而非靜態則是動態載入到記憶體,不需要的時候就從記憶體消失。而呼叫類中的靜態函式,無需建立物件就可以呼叫了,因為當類初始化的時候,就已經載入了靜態函式,所以靜態函式要比物件載入的早,物件只有被建立的時候才會在堆記憶體中建立空間。另外,靜態...

靜態函式與非靜態函式的區別

靜態成員函式和非靜態成員函式的根本區別在於有無this指標。非靜態函式由物件名或者物件指標 呼叫,呼叫時編譯器會向函式傳遞this指標 靜態成員函式則由類名 或者物件名呼叫 非靜態函式中有this指標,靜態函式中沒有this指標,不能訪問物件的成員函式,成員函式有this指標,const修飾this...

非靜態函式,非靜態變數與靜態函式,靜態變數

一 函式 函式的引入可以減少程式的目標 實現程式 的共享。但是,函式呼叫也需要一些時間和空間方面的開銷,因為呼叫函式實際上將程式執行流程轉移到被調函式中,被調函式的程式 執行完後,再返回到呼叫的地方。這種呼叫操作要求呼叫前保護現場並記憶執行的位址,返回後恢復現場,並按原來儲存的位址繼續執行。對於較長...