chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

Keil、 IAR編譯存儲相關(guān)說明及拓展

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-20 11:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

寫在前面 Ⅰ

Keil、IAR編譯(Build)窗口打印出來的信息:

Program Size:Code=2596RO-data=268RW-data=44ZI-data=1028

72 765 bytes ofreadonly codememory

3 508 bytes ofreadonly datamemory

20 202 bytes ofreadwrite datamemory

5 676 bytes ofCODEmemory

926 bytes ofCONSTmemory

1 148 bytes ofDATAmemory

相信大家都看到過上面的信息,應(yīng)該都知道它們大概的意思,但關(guān)于存儲這一塊的細節(jié)知識又有多少朋友去深入理解過呢?

要知道代碼、常量、全局、局部變量存儲在哪兒,就需要了解FLASH和RAM的一些特性,在工程中要具體分析其大小及對應(yīng)存儲地址,可以從map文件中分析。

簡要說明其意思 Ⅱ

為了照顧大部分人,簡要說一下上面打印信息的意思。微主這里提醒一下大家,網(wǎng)上也有一大堆相關(guān)資料,但網(wǎng)上好些資料說的有歧義,可能會誤導(dǎo)大家,如:RW-data為已初始化的全局變量。加了static修飾的變量叫靜態(tài)變量,和全局變量還是存在差別,但已初始化的靜態(tài)變量也會歸為RW-data中。

1.Keil編譯窗口信息

Program Size:Code=2596RO-data=268RW-data=44ZI-data=1028

Code:指代碼的大?。?/p>

Ro-data:指除了內(nèi)聯(lián)數(shù)據(jù)(inline data)之外的常量數(shù)據(jù);

RW-data:指可讀寫(RW)、已初始化的變量數(shù)據(jù);

ZI-data:指未初始化(ZI)的變量數(shù)據(jù);

Code、Ro-data:位于FLASH中;

RW-data、ZI-data:位于RAM中;

提醒:RW-data已初始化的數(shù)據(jù)會存儲在Flash中,上電會從FLASH搬移至RAM中。

關(guān)系如下:

RO Size= Code + RO Data

RW Size= RW Data + ZI Data

ROM Size = Code + RO Data + RW Data

2.IAR編譯窗口信息

IAR存在兩種情況,但意思都差不多,只是顯示不一樣:

編譯工程(點擊Make),會出現(xiàn)如下信息:

72 765 bytes ofreadonly codememory

3 508 bytes ofreadonly datamemory

20 202 bytes ofreadwrite datamemory

編譯單個文件(點擊Compile),會出現(xiàn)下面信息(若沒有DATA就沒有那一行):

5 676 bytes ofCODEmemory

926 bytes ofCONSTmemory

1 148 bytes ofDATAmemory

readonly code:代碼大?。愃朴贑ODE);

readonly data:常量數(shù)據(jù)(類似于CONST);

readwrite data:可讀寫變量數(shù)據(jù)(類似于DATA);

說明:

IAR中的Data相當于Keil中RW Data + ZI Data

內(nèi)存(RAM)分配 Ⅲ

本節(jié)擴展一下RAM的一些知識,有助于大家對程序運行時RAM的情況。

內(nèi)存分為5類:

1、棧區(qū)(stack): 由編譯器自動分配和釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。

2、堆區(qū)(heap) : 一般由程序員(使用malloc)分配和(使用free)釋放, 若程序員不釋放,則一直被占用。一般來說,單片機類的程序一般沒有使用堆。

3、全局區(qū)(靜態(tài)區(qū))(static):全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。

4、文字常量區(qū)(const) :常量字符串就是放在這里的。

5、程序代碼區(qū) (code): 存放函數(shù)體的二進制代碼。

經(jīng)典例子:

int a = 0; 全局初始化區(qū)

char *p1; 全局未初始化區(qū)

main(void)

{

int b;// 棧

char s[] = "abc"; //棧

char *p2; //棧

char *p3 = "123456"; 123456\0";//在常量區(qū),p3在棧上。

static int c =0; //全局(靜態(tài))初始化區(qū)

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

//分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。

strcpy(p1, "123456"); //123456\0放在常量區(qū),編譯器可能會將它與p3所指向的"123456"優(yōu)化成一個地方。

}

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

    關(guān)注

    5

    文章

    400

    瀏覽量

    38344
  • keil
    +關(guān)注

    關(guān)注

    69

    文章

    1224

    瀏覽量

    171827
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    688

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Keil5中查看棧大小

    :打開生成的.map文件,在Image Symbol Table部分查找棧的相關(guān)信息,包括棧的大小和使用情況。 3、利用IDE的功能: 方法說明Keil編譯器在
    發(fā)表于 11-14 06:32

    DDR存儲拓展教程

    的XC7A200T系列,他們的開發(fā)板FPGA型號也和我們今年比賽用板有很大的不同。這些地方都需要我們仔仔細細地閱讀源碼去做平臺的移植工作。 三、平臺移植 關(guān)于DDR的拓展工程都在yrtl
    發(fā)表于 10-28 07:25

    GD32F470使用__attribute__語句,keil編譯通過但是scons編譯不通過,為什么?

    問題語句: uint16_t ltdc_lcd_framebuf0[800][480] __attribute__((at(LCD_FRAME_BUF_ADDR))); 上述語句在keil編譯
    發(fā)表于 10-14 06:05

    文件系統(tǒng),使用iar編譯報錯,gcc可以正常編譯,為什么?

    文件系統(tǒng),使用iar編譯報錯,gcc可以正常編譯,為什么?
    發(fā)表于 09-23 06:54

    如何解決在 Keil編譯時出現(xiàn) FILE DOES NOT EXSIT 錯誤?

    如何解決在 Keil編譯時出現(xiàn) FILE DOES NOT EXSIT 錯誤?
    發(fā)表于 08-25 08:25

    Keil / IAR 開發(fā)環(huán)境下的 Debug 模式下,用戶是否可以在空閑 ru 期間立即添加新的斷點?

    Keil / IAR 開發(fā)環(huán)境下的 Debug 模式下,用戶是否可以在空閑 ru 期間立即添加新的斷點
    發(fā)表于 08-21 07:56

    請問如何在 Keil μVision 或 IAR EWARM 中使用觀察點進行調(diào)試?

    如何在 Keil μVision 或 IAR EWARM 中使用觀察點進行調(diào)試?
    發(fā)表于 08-20 06:29

    求助,關(guān)于NanoEdge AI Studio生成的庫交叉編譯器版本疑問求解

    20231009\", 那么問題來了,怎么在NanoEdge AI Studio設(shè)定交叉編譯器呢,比如設(shè)置為armcc、armclang、iccram,因為我需要將庫加到keil或者iar工程里面。 看樣子這個軟件生成的庫是a
    發(fā)表于 08-08 07:25

    IAR Arm開發(fā)工具鏈中--function_sections編譯選項的使用

    本文主要介紹在IAR Arm開發(fā)工具鏈中不修改源代碼的情況下使用??function_sections編譯選項把函數(shù)放到單獨的section。
    的頭像 發(fā)表于 06-13 13:53 ?1515次閱讀
    在<b class='flag-5'>IAR</b> Arm開發(fā)工具鏈中--function_sections<b class='flag-5'>編譯</b>選項的使用

    使用RASC生成Keil工程

    手動新建一個名為“Workspace_Keil”的文件夾,并將該文件夾作為我們的工作空間,我們的所有Keil工程都會放在這個文件夾里面。值得注意的是:為了避免編譯錯誤,該工作空間文件夾必須放在全英文的路徑下,不能包含有中文字符。
    的頭像 發(fā)表于 05-15 14:46 ?885次閱讀
    使用RASC生成<b class='flag-5'>Keil</b>工程

    沒有keil如何編譯ccg5工程?

    沒有keil如何編譯ccg5工程? 我可以使用 cubeIDE 作為 arm 工具鏈嗎
    發(fā)表于 05-12 07:36

    Keil MDK到IAR EWARM:通過工程遷移實現(xiàn)項目資產(chǎn)的更好管理

    對于需要統(tǒng)一開發(fā)環(huán)境或涉及多核架構(gòu)(如Cortex-A/R)的項目,越來越多的用戶選擇從Keil MDK遷移到IAR EWARM。這就會面臨著需要將之前的Keil MDK工程遷移到IAR
    的頭像 發(fā)表于 05-08 09:03 ?1001次閱讀
    從<b class='flag-5'>Keil</b> MDK到<b class='flag-5'>IAR</b> EWARM:通過工程遷移實現(xiàn)項目資產(chǎn)的更好管理

    Keil uVision 5安裝包下載,詳細安裝教程~

    、點擊Close關(guān)閉授權(quán)窗口。 15、軟件安裝與激活全部完成。 Keil5使用說明 確保已安裝proteus及對應(yīng)開發(fā)環(huán)境(Keil for ARM或IAR)。 安裝對應(yīng)驅(qū)動:
    發(fā)表于 03-15 12:10

    STM32CubeIDE編譯設(shè)置是否有像keil一樣有編譯后執(zhí)行Bat腳本的功能和設(shè)置?

    STM32CubeIDE編譯設(shè)置問題,是否有像keil一樣有編譯后執(zhí)行Bat腳本的功能和設(shè)置?或者有相關(guān)的腳本和插件?
    發(fā)表于 03-14 15:59

    Keil編譯為什么很慢?

    Keil編譯為什么很慢?
    發(fā)表于 03-07 16:24