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

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

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

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

基于ARM MDK集成開(kāi)發(fā)環(huán)境從事STM32開(kāi)發(fā)過(guò)程中的兩個(gè)小提醒

茶話(huà)MCU ? 來(lái)源:ST MCU 信息交流 ? 2019-12-06 15:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?一、片內(nèi)RAM用完了?

曾有兩個(gè)不同的STM32用戶(hù)反饋了相似的問(wèn)題,他們?cè)趯?duì)STM32F7Cube庫(kù)里的工程例程進(jìn)行編譯時(shí),發(fā)現(xiàn)了一個(gè)令人很不解的事。編譯的結(jié)果提示芯片內(nèi)的RAM幾乎都耗光了。但以他們對(duì)工程基本功能的了解,按理說(shuō)不應(yīng)該那樣,想知道是怎么回事。

具體情況是這樣的:他們先在STM32CubeF7的固件庫(kù)里打開(kāi)了一個(gè)有關(guān)lwip應(yīng)用的工程示例。比如下面目錄處的一個(gè)工程,使用ARM MDK進(jìn)行編譯。

STM32Cube_FW_F7_V1.15.0ProjectsSTM32746G-DiscoveryApplicationsLwIPLwIP_HTTP_Server_Netconn_RTOSMDK-ARM。

結(jié)果發(fā)現(xiàn)編譯結(jié)果提示片內(nèi)RAM的空間已經(jīng)基本用完了。但感覺(jué)應(yīng)該用不了那么多RAM內(nèi)存??蛻?hù)還想添加自己的其它用戶(hù)程序,還需使用RAM呢。

打開(kāi)相應(yīng)軟件工程,使用ARM MDK進(jìn)行編譯,發(fā)現(xiàn)編譯結(jié)果跟客戶(hù)反饋的一致。

從編譯結(jié)果來(lái)看,感覺(jué)RAM真的被用去了320多K,那RAM用到哪里去了呢?打開(kāi)對(duì)應(yīng)的MAP文件進(jìn)一步查看,可得到如下數(shù)據(jù)。

先看看芯片內(nèi)部RAM情況。目前使用的芯片是STM32F746NG,查看其數(shù)據(jù)手冊(cè)可知其內(nèi)部系統(tǒng)RAM容量為320KB【1KB=1024B】,分別由如下三塊RAM區(qū)域組成,各區(qū)域容量及地址范圍如下:

結(jié)合編譯結(jié)果和上面數(shù)據(jù)信息來(lái)看,貌似RAM真的用完了。既然這樣,只好硬著頭皮繼續(xù)查看MAP文件的其它細(xì)節(jié),?看看RAM到底消耗在哪些地方去了。后來(lái)發(fā)現(xiàn)在某個(gè)地址段有個(gè)巨大的PAD補(bǔ)丁填充區(qū)。

即從0x2000fd08到0x2004bfff這段區(qū)域,共246,520Bytes【即上圖?黃色區(qū)域所指】。

一般來(lái)講,代碼編譯后產(chǎn)生的PAD補(bǔ)丁塊往往是因?yàn)榈刂穼?duì)齊方面的原因?qū)е碌囊恍┎槐闶褂玫牧闵?nèi)存碎片,正常來(lái)講,?這些補(bǔ)丁塊不會(huì)大面積的集中在一起。

比如使用下面結(jié)構(gòu)體變量的時(shí)候會(huì)插入padding.

?

但這里提示的補(bǔ)丁塊也太大了,高達(dá)200多KB而且是連續(xù)空間!感覺(jué)是哪里誤會(huì)了。從分析來(lái)看,初步判斷這個(gè)PAD區(qū)間應(yīng)該還是可以被用戶(hù)使用的。于是嘗試在現(xiàn)有代碼里隨意增加一塊16KB的RAM有效使用量,編譯一切正常,編譯后顯示的內(nèi)存用量結(jié)果跟之前幾乎一模一樣,依然顯示RAM用完了。

但通過(guò)查看MAP文件,可以發(fā)現(xiàn)上面提到的那個(gè)大補(bǔ)丁塊空間也隨之減小了16KB。顯然,RAM并非真正用完了,只是編譯器把它當(dāng)作類(lèi)似對(duì)齊原因?qū)е碌难a(bǔ)丁塊了。現(xiàn)在問(wèn)題是,怎么會(huì)被編譯器誤判成這么大的一個(gè)補(bǔ)丁塊呢?

進(jìn)一步查看MAP和部分代碼源文件,我們可以發(fā)現(xiàn)有一塊RAM區(qū)域,即芯片內(nèi)的SRAM2區(qū)域被用戶(hù)使用attribute關(guān)鍵字自行做了內(nèi)存使用分配了,即這塊內(nèi)存空間不是交給編譯器安排的。【下圖中綠色方框內(nèi)的內(nèi)存分配】

結(jié)合上面的分析,那個(gè)巨大的pad區(qū)域正是經(jīng)編譯器分配使用到的RAM空間的?末尾地址開(kāi)始?到SRAM2起始地址【0X2004C000】之前的那段空間。

這里讓人想到一個(gè)地方,那就是MDK IDE選項(xiàng)配置中Target配置的這個(gè)地方:

這里片內(nèi)RAM配置是這樣的,意味著從0x20000000到0x2004ffff的全部RAM空間交由編譯器分配管理。

而在實(shí)際應(yīng)用代碼中,編譯器從0x20000000開(kāi)始分配內(nèi)存,而SRAM2區(qū)域則由用戶(hù)自行安排使用的。這樣的話(huà),經(jīng)編譯器所分配所用到的RAM內(nèi)存末尾到0x2004BFFF這段未用區(qū)域被視為了pad區(qū)域??磥?lái)只是誤會(huì)一場(chǎng)。

那如何消除這個(gè)誤會(huì)呢?我們可以將上面的內(nèi)存配置項(xiàng)稍微修改下,讓SRAM2區(qū)域不再讓編譯器分配管理,這樣就避免了編譯器分配的內(nèi)存末尾到SRAM2區(qū)域起始地址的這段空間被視為補(bǔ)丁區(qū)。像下面一樣修改:

這樣修改后再做編譯,結(jié)果如下,不再給人RAM都用光的感覺(jué)了,只用到70多KB的片內(nèi)RAM。

??二、Flash編程算法用不了?

用人使用STM32F7開(kāi)發(fā)產(chǎn)品,發(fā)現(xiàn)編譯時(shí)找不到合適的Flash算法文件,或者M(jìn)DK自帶的現(xiàn)有FLM文件用不了。具體情況是這樣的:

有人使用STM32F750V8開(kāi)發(fā)產(chǎn)品,編譯完畢后欲進(jìn)行下載調(diào)試,結(jié)果沒(méi)法完成程序下載,提示FLASH下載錯(cuò)誤。

檢查了各個(gè)配置后,懷疑FLASH算法文件是否有問(wèn)題。

打開(kāi)MDK選項(xiàng)配置里flash_download的編程配置頁(yè)面,那里已經(jīng)添加了相關(guān)FLASH編程算法文件。

不過(guò),如果使用STM32芯片做過(guò)開(kāi)發(fā)的人可能比較容易發(fā)現(xiàn)有個(gè)地方有點(diǎn)刺眼,就是起始地址那個(gè)地方。用過(guò)STM32F0/F1/F4等系列的人可能比較容易發(fā)現(xiàn),那個(gè)FLASH起始地址一般是在0x8000000這個(gè)地方,這里卻是0x00200000。我們?cè)倏纯碝DK選項(xiàng)配置有關(guān)內(nèi)存分配的那個(gè)地方,如下圖所示:

這里的片內(nèi)FLASH默認(rèn)起始地址卻是0x8000000。顯然這里跟FLASH編程算法文件的起始地址定義不一致,初步判斷應(yīng)該是這個(gè)地方導(dǎo)致的問(wèn)題。

到此,我們有必要看看STM32F7的相關(guān)技術(shù)手冊(cè)了關(guān)于內(nèi)部FLASH地址分配的內(nèi)容。下圖是STM32F750片內(nèi)主從外設(shè)及總線(xiàn)的框架圖,對(duì)于片內(nèi)FLASH,CPU可以有兩條總線(xiàn)通路訪(fǎng)問(wèn)它,一條是通過(guò)AXIM接口,經(jīng)過(guò)AXI-AHB橋以64位總線(xiàn)訪(fǎng)問(wèn),另一條是通過(guò)ITCM接口,經(jīng)過(guò)片內(nèi)ART加速器后訪(fǎng)問(wèn)它?!救缦聢D所示】

我們通過(guò)進(jìn)一步查看手冊(cè),可以得知CPU訪(fǎng)問(wèn)該FLASH區(qū)域時(shí)因使用不同總線(xiàn)接口而安排了不同的地址訪(fǎng)問(wèn)區(qū)域。

從上面表格可以清楚地看到,CPU從不同接口訪(fǎng)問(wèn)FLASH時(shí)其對(duì)應(yīng)地址是不一樣的。通過(guò)AXIM接口訪(fǎng)問(wèn)內(nèi)部flash的起始地址為0x08000000,通過(guò)ITCM接口訪(fǎng)問(wèn)內(nèi)部flash的起始地址是0x00200000.

結(jié)合到上面案例,MDK選項(xiàng)配置中Target頁(yè)面的片內(nèi)FLASH地址安排與Flash算法定義的地址不一致導(dǎo)致程序下載失敗。那么,我們可以將二者的地址及大小調(diào)整得一致,具體根據(jù)實(shí)際開(kāi)發(fā)需求來(lái)調(diào)整,即根據(jù)你希望CPU通過(guò)哪個(gè)接口來(lái)訪(fǎng)問(wèn)FLASH來(lái)做相應(yīng)調(diào)整。

1、如果希望走ITCM接口來(lái)訪(fǎng)問(wèn),我們就將Target頁(yè)面的FLASH存儲(chǔ)起始地址與FLASH算法文件定義的起始地址都設(shè)置為0x00200000,如下圖所示:

2、如果希望走AXIM接口來(lái)訪(fǎng)問(wèn),我們就將FLASH算法文件定義的起始地址與Target頁(yè)面定義得一致,這里就是0x08000000.

基于MDK提供的FLASH算法文件我們可以直接修改其起始地址及大小。

比如,如果剛加載進(jìn)來(lái)的算法文件是基于ITCM接口的地址定義,如下圖所示。

我們可以直接基于上面算法文件參數(shù)進(jìn)行起始地址修改,即修改橢圓里的起始地址數(shù)據(jù),修改完畢后點(diǎn)擊下方的OK按鈕即可。操作如下圖所示:

【注:我所用ARM MDK版本為5.28。】

基于修改后的配置,再進(jìn)行編譯后即可進(jìn)行下載調(diào)試。

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

    關(guān)注

    8

    文章

    1398

    瀏覽量

    119771
  • STM32
    +關(guān)注

    關(guān)注

    2305

    文章

    11118

    瀏覽量

    370956
  • keil
    +關(guān)注

    關(guān)注

    69

    文章

    1224

    瀏覽量

    171747

原文標(biāo)題:基于KEIL MDK環(huán)境調(diào)試STM32的兩個(gè)誤會(huì)

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話(huà)MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    京微齊力新版福晞軟件工具全面優(yōu)化FPGA設(shè)計(jì)環(huán)境

    FPGA 設(shè)計(jì)開(kāi)發(fā)過(guò)程中,軟件是工程師必不可少的工具,好的軟件開(kāi)發(fā)環(huán)境可以簡(jiǎn)化設(shè)計(jì)者的設(shè)計(jì)流程,縮短開(kāi)發(fā)時(shí)間,提升整體設(shè)計(jì)效率。
    的頭像 發(fā)表于 10-23 17:48 ?4503次閱讀
    京微齊力新版福晞軟件工具全面優(yōu)化FPGA設(shè)計(jì)<b class='flag-5'>環(huán)境</b>

    STM32 Nucleo-64開(kāi)發(fā)板技術(shù)解析:以NUCLEO-C092RC為例

    Workbench^?^ 、MDK-ARMSTM32CubeIDE。STM32 Nucleo-64板集成了ST-LINK調(diào)試器/編程器,無(wú)需任何單獨(dú)的探頭。該板設(shè)有一
    的頭像 發(fā)表于 10-16 10:26 ?326次閱讀
    <b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>開(kāi)發(fā)</b>板技術(shù)解析:以NUCLEO-C092RC為例

    開(kāi)發(fā)指南】全志系列核心板開(kāi)發(fā)過(guò)程中的常見(jiàn)問(wèn)題及排查策略

    在長(zhǎng)期提供技術(shù)支持服務(wù)的過(guò)程中,飛凌嵌入式總結(jié)了用戶(hù)開(kāi)發(fā)全志系列產(chǎn)品時(shí)常見(jiàn)的問(wèn)題及排查方法。本文中,小編將為大家梳理這些經(jīng)驗(yàn),助力開(kāi)發(fā)者快速定位問(wèn)題,提升開(kāi)發(fā)效率。
    的頭像 發(fā)表于 10-15 08:04 ?6462次閱讀
    【<b class='flag-5'>開(kāi)發(fā)</b>指南】全志系列核心板<b class='flag-5'>開(kāi)發(fā)過(guò)程中</b>的常見(jiàn)問(wèn)題及排查策略

    【EK-RA6E2開(kāi)發(fā)指南】開(kāi)發(fā)環(huán)境搭建

    瑞薩電子的開(kāi)發(fā)工具有很多,筆者習(xí)慣使用MDK開(kāi)發(fā),因此本文將基于MDK+RA Smart Configurator搭建開(kāi)發(fā)
    的頭像 發(fā)表于 09-23 18:12 ?2465次閱讀
    【EK-RA6E2<b class='flag-5'>開(kāi)發(fā)</b>指南】<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>環(huán)境</b>搭建

    芯片研發(fā)過(guò)程中種流片方式

    芯片在研發(fā)過(guò)程中一般包含4個(gè)階段:芯片設(shè)計(jì)、生產(chǎn)樣片、測(cè)試驗(yàn)證和大規(guī)模量產(chǎn)。在完成芯片設(shè)計(jì)后,工程師們需要先拿到一些芯片樣片,用它們進(jìn)行測(cè)試和驗(yàn)證,來(lái)判斷新研發(fā)的芯片在功能和性能上是否符合設(shè)計(jì)要求
    的頭像 發(fā)表于 09-09 15:04 ?1062次閱讀
    芯片研<b class='flag-5'>發(fā)過(guò)程中</b>的<b class='flag-5'>兩</b>種流片方式

    意法半導(dǎo)體:STM32CubeMX將不再集成STM32CubeIDE

    ,這兩個(gè)工具實(shí)現(xiàn)互操作的方式將與IAR EWARM、Keil MDK-ARMSTM32Cube for VS Code相同。 這種工具當(dāng)前的集成
    的頭像 發(fā)表于 09-01 17:18 ?2552次閱讀

    求助,關(guān)于PFM-M2351開(kāi)發(fā)環(huán)境設(shè)置的問(wèn)題求解

    Nu-Link Debugger 對(duì)于開(kāi)發(fā)是否至關(guān)重要。 以下內(nèi)容為評(píng)論 您只需單擊下載即可下載 Keil MDK,并向 Arm 填寫(xiě)一些信息。 并且編譯器包含在 Keil MDK
    發(fā)表于 08-27 06:49

    使用CY7C65213開(kāi)發(fā)過(guò)程中,應(yīng)該用哪個(gè)interface進(jìn)行uart通信?

    在使用CY7C65213開(kāi)發(fā)過(guò)程中,我想用CyUartRead讀數(shù)據(jù),但是好像沒(méi)有接口的deviceType是CY_TYPE_UART,想請(qǐng)問(wèn)我應(yīng)該用哪個(gè)interface進(jìn)行uart通信? 是否有相關(guān)指導(dǎo)文件,或描述符指導(dǎo)?
    發(fā)表于 06-03 07:04

    如何在米爾-STM32MP257開(kāi)發(fā)板上實(shí)現(xiàn)環(huán)境監(jiān)測(cè)系統(tǒng)

    論壇參與的一個(gè)項(xiàng)目:Thingy:91X蜂窩物聯(lián)網(wǎng)原型開(kāi)發(fā)平臺(tái)的試用。把兩個(gè)項(xiàng)目結(jié)合起來(lái),實(shí)現(xiàn)一個(gè)簡(jiǎn)單的環(huán)境監(jiān)測(cè)系統(tǒng)。二、硬件平臺(tái)1、米爾-
    的頭像 發(fā)表于 04-17 08:06 ?2343次閱讀
    如何在米爾-<b class='flag-5'>STM32</b>MP257<b class='flag-5'>開(kāi)發(fā)</b>板上實(shí)現(xiàn)<b class='flag-5'>環(huán)境</b>監(jiān)測(cè)系統(tǒng)

    在linux下開(kāi)發(fā)過(guò)程中, DLP4500 GUI無(wú)法連接光機(jī)怎么解決?

    在linux下開(kāi)發(fā)過(guò)程中, DLP4500 GUI 無(wú)法連接光機(jī),出現(xiàn)錯(cuò)誤提示如下: open device_handle error: Is a directory opening path
    發(fā)表于 02-20 08:41

    盤(pán)點(diǎn)工程師常用的嵌入式開(kāi)發(fā)工具

    嵌入式開(kāi)發(fā)涉及硬件與軟件的緊密結(jié)合,開(kāi)發(fā)工具的選擇對(duì)效率和質(zhì)量至關(guān)重要。以下是嵌入式開(kāi)發(fā)中常用的工具分類(lèi)及代表性工具,涵蓋開(kāi)發(fā)全流程: 1. 集成
    的頭像 發(fā)表于 02-07 10:06 ?3692次閱讀

    ADS1282采集過(guò)程中兩個(gè)通道能夠切換做成雙通道采集路數(shù)據(jù)嗎?

    ADS1282采集過(guò)程中兩個(gè)通道能夠切換做成雙通道采集路數(shù)據(jù)嗎?
    發(fā)表于 01-24 06:59

    如何在日常開(kāi)發(fā)過(guò)程中提高代碼質(zhì)量

    。 提高代碼質(zhì)量是一個(gè)系統(tǒng)工程,本文主要介紹開(kāi)發(fā)人員如何在日常開(kāi)發(fā)過(guò)程中提高代碼質(zhì)量。 01 什么是代碼質(zhì)量? 代碼質(zhì)量一般用于衡量代碼的“好”和“爛”:“好”代碼表示代碼質(zhì)量高,“爛”代碼表示代碼質(zhì)量低。雖然目前
    的頭像 發(fā)表于 01-23 09:09 ?1017次閱讀
    如何在日常<b class='flag-5'>開(kāi)發(fā)過(guò)程中</b>提高代碼質(zhì)量

    【正點(diǎn)原子STM32H7R3開(kāi)發(fā)套件試用體驗(yàn)】流水燈

    工程,之后使用 Keil MDK IDE 編譯代碼,實(shí)現(xiàn)流水燈的項(xiàng)目流程。從配置過(guò)程中發(fā)現(xiàn),系統(tǒng)核心具有極高的運(yùn)行速率,STM32H7系列具有32位Arm Cortex?-M7內(nèi)核,運(yùn)
    發(fā)表于 12-28 18:51

    HAL庫(kù)在STM32開(kāi)發(fā)的重要性

    HAL庫(kù)(Hardware Abstraction Layer Library,硬件抽象層庫(kù))在STM32開(kāi)發(fā)扮演著至關(guān)重要的角色。以下是HAL庫(kù)在STM32
    的頭像 發(fā)表于 12-02 13:35 ?1800次閱讀