精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何獲取入口函數不是__iar_program_start的Program entry的stack使用情況

IAR愛亞系統 ? 來源:IAR愛亞系統 ? 2024-11-25 16:23 ? 次閱讀

問題

IAR中默認的入口函數是__iar_program_start,使能stack usage analysis之后:

4bbbb162-a305-11ef-93f3-92fbcf53809c.png

生成的map文件中STACK USAGE章節里面會包含Program entry的stack使用相關信息

4bce15fa-a305-11ef-93f3-92fbcf53809c.png

如果對應啟動代碼沒有使用默認的入口函數__iar_program_start,需要使用--entry鏈接器選項指定對應的入口函數(以使用入口函數Reset_Handler為例):

4bdbbf20-a305-11ef-93f3-92fbcf53809c.png

但是使能stack usage analysis之后,生成的map文件中STACK USAGE章節里面沒有包含Program entry的stack使用相關信息:

4bfe9c16-a305-11ef-93f3-92fbcf53809c.png

4c09c6ea-a305-11ef-93f3-92fbcf53809c.png

原因

正常來說,編譯器可以生成每個函數的調用和stack使用信息,鏈接器可以計算出每個根函數的最大stack使用。但是如果源代碼是用匯編寫的,那么對應函數的調用和stack使用信息需要用戶指定(如果用戶不指定,鏈接器沒有辦法知道對應的信息,從而沒有辦法計算出對應的最大stack使用)。

4c2e4fba-a305-11ef-93f3-92fbcf53809c.png

解決辦法

需要在對應的stack usage control file (suc)里面指定對應的函數調用和stack使用信息:

4c540cd2-a305-11ef-93f3-92fbcf53809c.png

對應.suc文件中指定對應的信息:

/* Specify Reset_Handler as the Program entry */
call graph root ["Program entry"]: Reset_Handler;


/* Specify Reset_Handler will call SystemInit and __iar_program_start */
function Reset_Handler: 0, a
  calls SystemInit,
  calls __iar_program_start;
生成的map文件中STACK USAGE章節里面會包含Program entry的stack使用相關信息:

4c66eafa-a305-11ef-93f3-92fbcf53809c.png

注意:上面的情況是基于如下的啟動代碼:

Reset_Handler


        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0
如果對應的啟動代碼沒有調用__iar_program_start,那么suc文件里面需要指定入口函數調用的所有函數:
/* Specify Reset_Handler will call init_data_bss, SystemInit, startup_go_to_user_mode and main */
function Reset_Handler: 0,
  calls init_data_bss,
  calls SystemInit,
  calls startup_go_to_user_mode,
  calls main;
生成的map文件中STACK USAGE章節里面會包含Program entry的stack使用相關信息:

4c80e3ba-a305-11ef-93f3-92fbcf53809c.png

參考文獻:

1.IAR C/C++ Development Guide (Stack usage analysis)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IAR
    IAR
    +關注

    關注

    5

    文章

    345

    瀏覽量

    36625
  • 函數
    +關注

    關注

    3

    文章

    4307

    瀏覽量

    62433

原文標題:如何獲取入口函數不是__iar_program_start的Program entry的stack使用情況

文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LMX2592正常使用情況下溫度大概有多少?

    你好,LMX2592如果將 OUTA_PD = 1;OUTB_PD = 1;為什么芯片還是很燙,正常使用情況下溫度大概有多少,對于溫度的變化可以提供一下參考嗎
    發表于 11-08 08:32

    TPLD-PROGRAM用戶指南

    電子發燒友網站提供《TPLD-PROGRAM用戶指南.pdf》資料免費下載
    發表于 10-30 09:57 ?0次下載
    TPLD-<b class='flag-5'>PROGRAM</b>用戶指南

    TMS320C64x在高性能DSP應用中的高速緩存使用情況

    電子發燒友網站提供《TMS320C64x在高性能DSP應用中的高速緩存使用情況.pdf》資料免費下載
    發表于 10-21 09:43 ?0次下載
    TMS320C64x在高性能DSP應用中的高速緩存<b class='flag-5'>使用情況</b>

    IAR中生成庫文件并被應用工程調用的參考流程(下)

    在Linker → Library界面勾選Override default program entry,勾選Entry symbol,并填入以下內容
    的頭像 發表于 05-22 14:38 ?2434次閱讀
    在<b class='flag-5'>IAR</b>中生成庫文件并被應用工程調用的參考流程(下)

    如何查看TC397內存的使用情況

    Hi,請問,如何查看 TC397 內存的使用情況?謝謝!
    發表于 05-22 07:50

    可以從下面的圖看出我的工程flash和ram的使用情況嗎?

    芯片是:dspf28335;可以從下面的圖看出我的工程flash和ram的使用情況嗎?感覺flash還可以,ram有點不夠用了,請求大師指點,如何分析?
    發表于 05-11 10:11

    STM32F303啟動文件中的Stack_Size和Stack_Mem如何在C代碼中獲取其地址或值?

    為了在業務代碼中監控系統的堆棧使用情況,想在業務代碼中獲取Stack_Mem的內存地址和Stack_Size的值。目前定義如下:可實現讀取棧地址但無法讀取棧大小 extern unsi
    發表于 04-01 08:18

    CubelIDE HAL_FLASH_Program仿真時出錯怎么解決?

    擦除后,可看到整頁為65535. 然后進入HAL_FLASH_Program 最后在FLASH_Program_Fast(Address, (uint32_t)Data);下一步 仿真報錯
    發表于 03-28 06:56

    CUBEIDE運行完可以看RAM的使用情況,運行中可以實時查看RAM的使用情況嗎?

    CUBEIDE運行完可以看RAM的使用情況,運行中可以實時查看RAM的使用情況嗎?以及負載情況? 圖片是運行完可以看RAM使用情況,是否可以運行中實時查看?是
    發表于 03-12 07:56

    rtthread編譯后如何查看堆棧空間使用情況

    rtthread編譯后如何查看堆棧空間使用情況,現在只能在編譯完成后看到總大小,有沒有辦法能看到詳細的使用情況。 由于RAM只有128K,除去內存池32k,想看看剩余的RAM在哪用了
    發表于 03-05 07:58

    如何知道嵌入式電子控制單元 (ECU) 中的RAM使用情況

    我知道嵌入式軟件構建工具會報告程序閃存使用情況。我認為他們也報告 RAM 使用率,但他們是否報告最大 RAM 使用率? 生成工具可能不知道在運行時將使用多少堆。是否有構建工具不知道的其他 RAM 使用情況? 如何準確找出運行時使用了多少RAM?
    發表于 01-22 07:02

    有什么辦法可以獲取TC397中的實時內存使用情況嗎?

    有什么辦法可以獲取 TC397 中的實時內存使用情況嗎? 例如,我能否通過計算當前堆棧指針值和基本堆棧指針值之間的差異來獲得使用的內存大小?
    發表于 01-22 06:18

    請問TC397如何查看RAM和pFlash的使用情況

    請問 TC397 如何查看 RAM 和 pFlash 的使用情況
    發表于 01-19 06:37

    正常使用情況下LTC3331的ship引腳接高電平還是低電平?

    正常使用情況下,LTC3331的ship引腳接高電平還是低電平?
    發表于 01-05 11:07

    顯示Web服務器中的內存使用情況

    Web服務器上,您可以在“內存”選項卡的“診斷”網頁上找到有關各個內存區域當前使用情況的信息。
    的頭像 發表于 12-18 10:18 ?783次閱讀
    顯示Web服務器中的內存<b class='flag-5'>使用情況</b>