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