棧利用率的獲取

2021-10-13 07:18:59 字數 2393 閱讀 5381

棧用於儲存變數, 隨著函式呼叫深度和變數的數量而變化. 設定小了會出現棧溢位, 設定大了會浪費.

rt-thread的統計方法是將執行緒棧都填充為』#』, 當需要的時候, 檢查是否被修改為其他值.

利用率 = 已使用 / 棧大小.

#if defined(arch_cpu_stack_grows_upward)

ptr =

(rt_uint8_t *

)thread->stack_addr + thread->stack_size -1;

while

(*ptr ==

'#')ptr --

;rt_kprintf

(" 0x%08x 0x%08x %02d%% 0x%08x %03d\n",(

(rt_ubase_t)thread->sp -

(rt_ubase_t)thread->stack_addr)

, thread->stack_size,

((rt_ubase_t)ptr -

(rt_ubase_t)thread->stack_addr)

*100

/ thread->stack_size,

thread->remaining_tick,

thread->error)

;#else

ptr =

(rt_uint8_t *

)thread->stack_addr;

while

(*ptr ==

'#')ptr ++

;rt_kprintf

(" 0x%08x 0x%08x %02d%% 0x%08x %03d\n"

, thread->stack_size +

((rt_ubase_t)thread->stack_addr -

(rt_ubase_t)thread->sp)

, thread->stack_size,

(thread->stack_size -

((rt_ubase_t) ptr -

(rt_ubase_t) thread->stack_addr))*

100/ thread->stack_size,

thread->remaining_tick,

thread->error)

;#endif

以上是對執行緒棧進行計算, 即psp.

如果要計算msp利用率也可用這種方法, 但是需要注意幾點.

1. 初始化時不可將整個棧都填充

因為當前函式也在使用棧, 全部填充會導致函式無法返回. 應當獲取當前的sp指標, 僅初始化到sp指向的位址, 不再進一步初始化.

除非在reset_handler處初始化, 此時未進入任何函式也不會返回.

2. 盡量在未啟動作業系統時進行初始化

微控制器復位後預設使用msp, 盡早初始化可以讓後面獲取棧利用率更準確.

鏈結指令碼中的棧定義

_system_stack_size =

0x400

;// msp大小..

.省略...

.stack :

>ram

/* set stack top to end of ram, and stack limit move down by

* size of stack section */

__stacktop = _estack;

// msp 棧頂

__stacklimit = __stacktop - _system_stack_size;

// msp棧底

provide

(__stack = __stacktop)

;

static

unsigned

int msp_top;

static

unsigned

int msp_size;

static

unsigned

int msp_bottom;

// 在切換成psp前呼叫, 從棧底到棧當前使用深度, 賦值為'#'

static

void

main_stack_init

(void)}

// 獲取msp棧利用率

static uint16_t main_stack_used

(void

)

cpu利用率 CPU利用率錯誤

cpu利用率 cpu利用率是每個人用來衡量處理器效能的指標。netflix的高階效能架構師布倫丹 格雷格 brendan gregg 在第16屆年度南加州linux expo scale 上稱其為 五分鐘公共服務公告 但 cpu卻是一種誤導性的衡量指標,說明處理器的實際繁忙程度。布倫丹在他的閃電演講...

記憶體利用率

記憶體利用率 有多個命令提供有關系統記憶體利用率的相關資訊。最流行的是free 和pmap。free命令 free 命令顯示可用的物理記憶體量,其中包括總物理記憶體量 已用物理記憶體量 可用物理記憶體量。它也為交換空間顯示同樣的統計資訊,還顯示核心使用的記憶體快取大小和緩衝區的大小。圖7 5 顯示了...

c 獲取windows mac的cpu利用率

windows平台獲取cpu利用率的方法我找到的有以下兩種 方法一 查詢windows的效能檢測器 方法二 調windows的api獲取cpu使用時間並計算 include include include include pragma comment lib,pdh.lib using namesp...