女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何評(píng)估TI C2000系列微控制器程序的堆棧使用情況

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-01-19 16:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Other Parts Discussed in Post:C2000WARE

作者: Sheldon He

摘要:實(shí)時(shí)控制器往往擁有十分有限的存儲(chǔ)器資源特別是片內(nèi)的隨機(jī)存儲(chǔ)器(RAM)資源。能否合理、高效的運(yùn)用這些資源不僅關(guān)乎到整個(gè)嵌入式系統(tǒng)的實(shí)現(xiàn)成本與性能,更涉及到系統(tǒng)在運(yùn)行時(shí)是否會(huì)出現(xiàn)致命且不易被發(fā)現(xiàn)的錯(cuò)誤。本文將對(duì)C2000系列微控制器的棧 (亦習(xí)慣性的被稱(chēng)為堆棧,這里請(qǐng)注意堆與棧之間的區(qū)別)做簡(jiǎn)單的介紹,并提出四種方法來(lái)對(duì)應(yīng)用程序運(yùn)行所需的棧空間大小進(jìn)行追蹤或評(píng)估,以幫助開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中(尤其是使用C/C++高級(jí)語(yǔ)言進(jìn)行開(kāi)發(fā)時(shí))優(yōu)化內(nèi)存資源的使用并避免嵌入式程序可能存在的風(fēng)險(xiǎn)。

在計(jì)算機(jī)中,棧作為一種數(shù)據(jù)結(jié)構(gòu)可以存放一系列的成員并且通過(guò)“入棧”和“出棧”操作來(lái)從棧定加入新的數(shù)據(jù)或從棧頂拿走數(shù)據(jù)。從類(lèi)別上來(lái)看堆棧通常又可以分為軟件堆棧和硬件堆棧兩類(lèi),前者時(shí)常經(jīng)由數(shù)組和鏈表在程序中實(shí)現(xiàn)而后者則與計(jì)算機(jī)架構(gòu)相關(guān)并被用于實(shí)現(xiàn)內(nèi)存的分配及訪(fǎng)問(wèn)。

本文要討論的是C2000系列微控制器C28x內(nèi)核中的硬件堆。該棧的典型特點(diǎn)為有一個(gè)固定的起始地址,或者說(shuō)是寄存器復(fù)位值,和一個(gè)由編譯器指定的可變的棧空間大小。C28x內(nèi)核的堆棧指針(stack point)寄存器SP是16位寄存器,且在使用時(shí)高16位保持為0,故可以訪(fǎng)問(wèn)64K大小的內(nèi)存空間。在芯片復(fù)位時(shí),SP的內(nèi)容變?yōu)?x00000400,且在使用時(shí)棧由低地址向高地址生長(zhǎng)。堆棧的合法使用空間通常由編譯器命令--stack_size= size來(lái)設(shè)定,其中size是一個(gè)常數(shù),指定了棧空間的大小(以16位字為單位),棧的空間不得超過(guò)實(shí)際非初始化物理內(nèi)存區(qū)域.stack大小也不得超出0xFFFF范圍,否則將產(chǎn)生溢出。

一個(gè)嵌入式系統(tǒng)軟件常常會(huì)因?yàn)槎喾N原因而需要使用堆棧,這些原因包括:存儲(chǔ)數(shù)學(xué)表達(dá)式的中間計(jì)算結(jié)果、在函數(shù)遞歸時(shí)存儲(chǔ)每一次調(diào)用的函數(shù)返回地址、存放函數(shù)內(nèi)的局部變量、存放傳遞進(jìn)函數(shù)的參數(shù)等。隨著軟件流程變得越來(lái)越龐大復(fù)雜,如何正確的評(píng)估所需的堆棧空間就顯得十分重要。分配過(guò)多的堆棧空間會(huì)“浪費(fèi)”內(nèi)存,堆棧溢出則可能造成堆棧信息丟失或者修改到鄰近內(nèi)存區(qū)域的數(shù)據(jù)并最終導(dǎo)致系統(tǒng)出錯(cuò)。

本文總結(jié)了四種適用于TI C2000系列MCU的堆棧使用評(píng)估方法,同時(shí)建議讀者在有條件的情況下使用多種方法交叉驗(yàn)證以彌補(bǔ)單一方法使用過(guò)程中的局限性。這些方法通常情況下也適用于TI的其他部分嵌入式產(chǎn)品,對(duì)于其他各類(lèi)嵌入式系統(tǒng)的堆棧測(cè)試、評(píng)估也有一定的借鑒意義。

一、使用TI提供的XML文件處理腳本生成函數(shù)調(diào)用圖并進(jìn)行靜態(tài)分析

通過(guò)函數(shù)的調(diào)用關(guān)系可以靜態(tài)的分析堆棧的使用情況,TI提供了一套基于Perl的腳本工具可以用于分析工程build過(guò)程中產(chǎn)生的XML文件以提供程序空間使用相關(guān)的信息。這里筆者需要用到的是該工具包中的call_graph.pl腳本來(lái)生成函數(shù)調(diào)用圖(Call Graph)。

首先需要在wiki頁(yè)面中下載并安裝該工具包,可以在搜索引擎中檢索關(guān)鍵字“Code_Generation_Tools_XML_Processing_Scripts”

并找到對(duì)應(yīng)的ti.com頁(yè)面進(jìn)行下載安裝。對(duì)于不熟悉命令行操作的讀者可以按照以下三個(gè)步驟來(lái)使用該腳本。

1. 新建一個(gè)文件夾并以英文命名,并從CCS對(duì)應(yīng)的C2000編譯器目錄拷貝odf2000.exe到該新建的文件夾中。(ofd2000.exe在C:\ti\ccs901\ccs\tools\compiler\ti-cgt-c2000_18.12.1.LTS\bin,路徑隨CCS版本、CCS安裝路徑及編譯器版本不同會(huì)有差異)同時(shí)還需要從cgxml工具路徑C:\ti\cgxml\bin中拷貝call_graph.exe,從工程目錄拷貝編譯生成的.out文件到該文件夾中。

2. 打開(kāi)命令行工具(可在windows開(kāi)始菜單搜索“CMD”找到),在其中輸入如下命令選取上一步中新建的文件夾為工作目錄

cd C:\ti\cgxml\utils

3. 在命令行中運(yùn)行如下腳本獲取輸出結(jié)果,用戶(hù)需要自行修改.out文件的文件名使其與第一步中復(fù)制到文件夾中的.out同名。

ofd2000 -xg gpio_toggle_cpu01.out | call_graph --stack_max

此時(shí)用戶(hù)可以在命令行的輸出中看到最?lèi)毫忧闆r下的堆棧占用情況,此處,函數(shù)c_int00是函數(shù)調(diào)用圖的根,其調(diào)用在最大情況下會(huì)占用48個(gè)16位字的堆棧空間。但是這樣的結(jié)果有兩點(diǎn)限制條件將在本節(jié)的末尾部分指出。

poYBAGGKTnCAYnNDAAA3E1jUL4M189.png

如果使用--stack_max參數(shù)則可以獲得更多的細(xì)節(jié)信息,具體的數(shù)據(jù)解讀方法請(qǐng)參閱安裝目錄下的文檔《call_graph.pdf》。

該方法簡(jiǎn)單易用,但是對(duì)于非直接調(diào)用的函數(shù)以及相互嵌套的中斷服務(wù),該工具則無(wú)法直接將其在腳本輸出結(jié)果中表現(xiàn)出來(lái)。此時(shí)需要使用者結(jié)合call_graph輸出的詳細(xì)信息,借助自己對(duì)于程序流程的理解,分析得到最終的堆棧評(píng)估結(jié)果。

二、使用回調(diào)函數(shù)在運(yùn)行時(shí)抓取棧指針(SP)最大值

C2000較新版本的編譯器支持在函數(shù)的進(jìn)入和退出過(guò)程中插入回調(diào)函數(shù)。開(kāi)發(fā)者可以使--entry_hook選項(xiàng)為每個(gè)函數(shù)的開(kāi)頭部分插入一段讀取堆棧指針(SP)的代碼并在一定周期的程序運(yùn)行中對(duì)堆棧指針的最大值進(jìn)行抽取與比較從而獲取統(tǒng)計(jì)學(xué)的極限堆棧使用情況。

以TI v18.12.2LTS Coder generation tool為例做一個(gè)測(cè)試,首先右擊打開(kāi)工程屬性,并在“Advanced Options”中找到--entry_hook設(shè)置欄目,在后方的空格處輸入回調(diào)函數(shù)的函數(shù)名稱(chēng)(以名為“entry_hook”的函數(shù)為例)。

pYYBAGGKTnKAY-b6AAGZDsPWlL0924.png

之后可以在c文件中定義函數(shù)entry_hook,其中使用的SP_current及SP_max為事先聲明的int型全局變量。

void entry_hook(){

SP_current = getStackPointer();

SP_max = (SP_current > SP_max) ? SP_current : SP_max;

}

在該函數(shù)中使用了一小段匯編函數(shù)getStackPointer();用于獲取堆棧指針(SP)寄存器的值,該函數(shù)的定義為:

_getStackPointer:

.asmfunc

MOV AL, SP

SUB AL, #2

LRETR

.endasmfunc

測(cè)試前還需要在頭文件中對(duì)其做如下形式的函數(shù)聲明:

extern int getStackPointer(void);

在完成設(shè)置后重新build工程,并點(diǎn)擊CCS中的“Debug”按鈕進(jìn)入在線(xiàn)調(diào)試狀態(tài),此后可以進(jìn)行全速運(yùn)行。運(yùn)行一段時(shí)間以后打開(kāi)CCS的“View”,“Expressions”并點(diǎn)擊綠色加號(hào)“Add new expression”輸入變量名SP_max對(duì)最大堆棧占用情況進(jìn)行觀(guān)察。

通過(guò)回調(diào)函數(shù)做堆棧指針的采樣統(tǒng)計(jì)不一定可以抓取到最極限的堆棧使用情況,實(shí)際的堆棧消耗會(huì)比用這種方法測(cè)量到的略大,因此筆者也提出了第三種測(cè)試方法。

三、在棧空間填充標(biāo)識(shí)數(shù)據(jù)以檢測(cè)棧空間使用情況

方法三的思路是在堆棧空間的特定內(nèi)存區(qū)域中預(yù)先寫(xiě)入標(biāo)志性數(shù)據(jù)如(0x5A)。經(jīng)由程序的執(zhí)行,使用過(guò)的堆棧空間內(nèi)的數(shù)據(jù)會(huì)被其他數(shù)據(jù)覆蓋掉,從棧尾開(kāi)始向低地址走的標(biāo)志性數(shù)據(jù)則因其內(nèi)存空間未被使用而得以保留不變,當(dāng)然這一切的前提是堆棧不發(fā)生溢出。通過(guò)尋找被修改數(shù)組的最大地址即可以判斷出這一測(cè)試過(guò)程中程序?qū)嶋H所使用的最大堆棧規(guī)模。

該方法可以在連接仿真器的情況下進(jìn)行堆棧占用情況的觀(guān)察,也可以在芯片脫離仿真器運(yùn)行之后再連接入仿真器(通過(guò)設(shè)置使目標(biāo)芯片在連接時(shí)不被復(fù)位)并通過(guò)“Memory Browser”進(jìn)行結(jié)果觀(guān)察。該方法的準(zhǔn)確性取決于軟件執(zhí)行的覆蓋程度。

四、使用ERAD外設(shè)模塊進(jìn)行堆棧監(jiān)測(cè)

ERAD(embedded real-time analysis and diagnostic)模塊是F28004x系列MCU新增的外設(shè),他獨(dú)立于C28x內(nèi)核之外,具有8個(gè)總線(xiàn)比較器和4個(gè)檢測(cè)計(jì)數(shù)器子功能模塊。由于該模塊既可以被應(yīng)用程序訪(fǎng)問(wèn)也可以被仿真工具訪(fǎng)問(wèn)因此能極大的增加調(diào)試的靈活性和便利性。

關(guān)于如何使用ERAD模塊進(jìn)行堆棧監(jiān)控可以直接參考TI C2000ware軟件包自帶的范例程序,其參考位置為:C:\ti\c2000\C2000Ware_2_00_00_03\driverlib\f28004x\examples\erad\stack_overflow

其基本工作方式是對(duì)地址總線(xiàn)進(jìn)行監(jiān)控并根據(jù)HWBP_CNTL寄存器的配置,將地址總線(xiàn)內(nèi)容與HWBP_REF寄存器中的參考值以指定方式進(jìn)行對(duì)比(大于、大于等于、小于、小于等于),最終在比較事件發(fā)生時(shí)觸發(fā)CPU的停止動(dòng)作或生產(chǎn)RTOSINTn中斷。通過(guò)這種方式的多次運(yùn)用可以把堆棧空間的實(shí)際需求鎖定在一個(gè)區(qū)間內(nèi)便于參考。

總結(jié):本文結(jié)合工程開(kāi)發(fā)和調(diào)試的實(shí)際經(jīng)驗(yàn),對(duì)常用的四種C2000 MCU程序堆棧空間評(píng)估方法進(jìn)行了總結(jié),期待讀者在閱讀后能夠結(jié)合實(shí)際情況選擇一種或者多種方式確定出應(yīng)用程序的堆棧需求并在工程屬性中進(jìn)行合理的配置,以實(shí)現(xiàn)最大程度的優(yōu)化。

審核編輯:金巧

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17938

    瀏覽量

    363321
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17066

    瀏覽量

    183747
  • 嵌入式處理
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    10286
  • XML
    XML
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    33686
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    納芯微NSSine? NS800RT正面硬剛TI C2000,國(guó)產(chǎn)替代“芯”戰(zhàn)事, 工業(yè)控制MCU市場(chǎng)迎來(lái)變局?

    在實(shí)時(shí)控制MCU(微控制器)的江湖里,德州儀器(TI)的C2000系列是一個(gè)繞不開(kāi)的名字。三十余年來(lái),它如同一位功力深厚的宗師,定義了高性能
    的頭像 發(fā)表于 06-20 12:45 ?539次閱讀
    納芯微NSSine? NS800RT正面硬剛<b class='flag-5'>TI</b> <b class='flag-5'>C2000</b>,國(guó)產(chǎn)替代“芯”戰(zhàn)事, 工業(yè)<b class='flag-5'>控制</b>MCU市場(chǎng)迎來(lái)變局?

    TMS320F2800155 C2000? 32 位 MCU 120MHz 128KB 閃存數(shù)據(jù)手冊(cè)

    TMS320F280015x (F280015x) 是成本優(yōu)化的 C2000 實(shí)時(shí)微控制器系列的成員,該系列可擴(kuò)展、超低延遲器件專(zhuān)為提高電力電子的效率而設(shè)計(jì)。
    的頭像 發(fā)表于 04-15 15:08 ?483次閱讀
    TMS320F2800155 <b class='flag-5'>C2000</b>? 32 位 MCU 120MHz 128KB 閃存數(shù)據(jù)手冊(cè)

    TMS320F2800133 C2000? 32 位 MCU,具有 120 MHz、64 KB 閃存、FPU 和 TMU數(shù)據(jù)手冊(cè)

    TMS320F280013x (F280013x) 是 C2000? 實(shí)時(shí)微控制器系列的成員,該系列可擴(kuò)展、超低延遲器件專(zhuān)為提高電力電子效率而設(shè)計(jì)。
    的頭像 發(fā)表于 04-15 14:46 ?457次閱讀
    TMS320F2800133 <b class='flag-5'>C2000</b>? 32 位 MCU,具有 120 MHz、64 KB 閃存、FPU 和 TMU數(shù)據(jù)手冊(cè)

    C2000微控制器用戶(hù)培訓(xùn)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《C2000微控制器用戶(hù)培訓(xùn)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 12-05 14:13 ?3次下載
    <b class='flag-5'>C2000</b><b class='flag-5'>微控制器</b>用戶(hù)培訓(xùn)手冊(cè)

    C2000?實(shí)時(shí)控制微控制器(MCU)使用入門(mén)

    電子發(fā)燒友網(wǎng)站提供《C2000?實(shí)時(shí)控制微控制器(MCU)使用入門(mén).pdf》資料免費(fèi)下載
    發(fā)表于 11-07 09:08 ?1次下載
    <b class='flag-5'>C2000</b>?實(shí)時(shí)<b class='flag-5'>控制</b><b class='flag-5'>微控制器</b>(MCU)使用入門(mén)

    LED照明和DC-DC轉(zhuǎn)換控制集成在一個(gè)C2000微控制器

    電子發(fā)燒友網(wǎng)站提供《LED照明和DC-DC轉(zhuǎn)換控制集成在一個(gè)C2000微控制器上.pdf》資料免費(fèi)下載
    發(fā)表于 10-12 11:07 ?0次下載
    LED照明和DC-DC轉(zhuǎn)換<b class='flag-5'>控制</b>集成在一個(gè)<b class='flag-5'>C2000</b><b class='flag-5'>微控制器</b>上

    C2000?微控制器的USB閃存編程

    電子發(fā)燒友網(wǎng)站提供《C2000?微控制器的USB閃存編程.pdf》資料免費(fèi)下載
    發(fā)表于 09-26 11:30 ?0次下載
    <b class='flag-5'>C2000</b>?<b class='flag-5'>微控制器</b>的USB閃存編程

    如何將自定義邏輯從FPGA/CPLD遷移到C2000?微控制器

    電子發(fā)燒友網(wǎng)站提供《如何將自定義邏輯從FPGA/CPLD遷移到C2000?微控制器.pdf》資料免費(fèi)下載
    發(fā)表于 09-23 12:36 ?0次下載
    如何將自定義邏輯從FPGA/CPLD遷移到<b class='flag-5'>C2000</b>?<b class='flag-5'>微控制器</b>

    增強(qiáng)C2000?微控制器系列的計(jì)算性能

    電子發(fā)燒友網(wǎng)站提供《增強(qiáng)C2000?微控制器系列的計(jì)算性能.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 12:36 ?0次下載
    增強(qiáng)<b class='flag-5'>C2000</b>?<b class='flag-5'>微控制器</b><b class='flag-5'>系列</b>的計(jì)算性能

    C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測(cè)

    電子發(fā)燒友網(wǎng)站提供《C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-11 09:30 ?0次下載
    <b class='flag-5'>C2000</b>?MCU的運(yùn)行時(shí)<b class='flag-5'>堆棧</b>大小監(jiān)測(cè)

    C2000 MCU的ADC輸入電路評(píng)估(使用TINA-TI仿真工具)

    電子發(fā)燒友網(wǎng)站提供《C2000 MCU的ADC輸入電路評(píng)估(使用TINA-TI仿真工具).pdf》資料免費(fèi)下載
    發(fā)表于 09-07 11:18 ?1次下載
    <b class='flag-5'>C2000</b> MCU的ADC輸入電路<b class='flag-5'>評(píng)估</b>(使用TINA-<b class='flag-5'>TI</b>仿真工具)

    使用C2000 EtherCAT從站控制器的SMI進(jìn)行以太網(wǎng)PHY配置

    電子發(fā)燒友網(wǎng)站提供《使用C2000 EtherCAT從站控制器的SMI進(jìn)行以太網(wǎng)PHY配置.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 10:37 ?0次下載
    使用<b class='flag-5'>C2000</b> EtherCAT從站<b class='flag-5'>控制器</b>的SMI進(jìn)行以太網(wǎng)PHY配置

    C2000?微控制器的串行閃存編程

    電子發(fā)燒友網(wǎng)站提供《C2000?微控制器的串行閃存編程.pdf》資料免費(fèi)下載
    發(fā)表于 09-03 10:15 ?0次下載
    <b class='flag-5'>C2000</b>?<b class='flag-5'>微控制器</b>的串行閃存編程

    C2000實(shí)時(shí)控制微控制器(MCU)使用入門(mén)

    本指南是重要的參考資料,其中包含著手使用 C2000? 實(shí)時(shí)微控制器 (MCU) 的所有必要信息。本指南涵蓋了用C2000 器件進(jìn)行開(kāi)發(fā)的各方面內(nèi)容,從硬件到支持資源應(yīng)有盡有。除了主要的參考文檔外,每個(gè)部分還提供了相關(guān)鏈接和資源
    發(fā)表于 08-28 15:09 ?5次下載

    使用C2000?實(shí)時(shí)微控制器的基本開(kāi)發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《使用C2000?實(shí)時(shí)微控制器的基本開(kāi)發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 10:08 ?1次下載
    使用<b class='flag-5'>C2000</b>?實(shí)時(shí)<b class='flag-5'>微控制器</b>的基本開(kāi)發(fā)指南
    主站蜘蛛池模板: 隆尧县| 高尔夫| 九龙坡区| 富顺县| 青阳县| 岳池县| 景谷| 安阳市| 河间市| 嘉善县| 高安市| 东安县| 云浮市| 德令哈市| 巴林左旗| 维西| 阿勒泰市| 北辰区| 行唐县| 河北省| 博湖县| 太白县| 六枝特区| 司法| 武强县| 武邑县| 柯坪县| 大厂| 郴州市| 桃江县| 大余县| 东丰县| 车致| 凤庆县| 那坡县| 湖北省| 顺昌县| 游戏| 潮安县| 天长市| 德州市|