色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

茶話MCU ? 來源:ST MCU 信息交流 ? 2019-12-06 15:20 ? 次閱讀

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

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

具體情況是這樣的:他們先在STM32CubeF7的固件庫里打開了一個(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)基本用完了。但感覺應(yīng)該用不了那么多RAM內(nèi)存。客戶還想添加自己的其它用戶程序,還需使用RAM呢。

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

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

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

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

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

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

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

?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2、如果希望走AXIM接口來訪問,我們就將FLASH算法文件定義的起始地址與Target頁面定義得一致,這里就是0x08000000.

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

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

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

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

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

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

    關(guān)注

    8

    文章

    1369

    瀏覽量

    114850
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10920

    瀏覽量

    356916
  • keil
    +關(guān)注

    關(guān)注

    68

    文章

    1214

    瀏覽量

    167105

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    【MM32F5270】Keil開發(fā)環(huán)境搭建

    的hello_world示例。具體參考的鏈接可以在本文末尾找到,感興趣的讀者可以自行查閱。其中,靈動(dòng)官網(wǎng)提供了最新的芯片用戶手冊,逐飛科技的網(wǎng)盤中提供了開發(fā)板原理圖和硬件使用說明,這些資料在后續(xù)的開發(fā)過程中是經(jīng)常需要查閱的,建議下載;靈動(dòng)SDK下載頁面提供了在線的API參
    的頭像 發(fā)表于 11-06 16:14 ?2914次閱讀
    【MM32F5270】Keil<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>搭建

    新唐科技率先發(fā)布免費(fèi)版Arm Keil MDK,助力嵌入式開發(fā)

    2024年11月5日,新唐科技正式推出了免費(fèi)版的Arm? Keil? MDK Nuvoton Edition,成為全球首家向開發(fā)者提供Keil MDK完整版本的半導(dǎo)體公司。這款專業(yè)
    的頭像 發(fā)表于 11-06 11:07 ?1122次閱讀

    自己做的TAS5825板子軟件開發(fā)過程中怎么接到PPC3上去調(diào)試呢?

    我們打算做一個(gè)TAS5825的板子,PPC3軟件已經(jīng)申請下來了,有個(gè)問題是我們自己做的TAS5825板子軟件開發(fā)過程中怎么接到PPC3上去調(diào)試呢?
    發(fā)表于 10-15 08:15

    keil5怎么利用sys進(jìn)行配置ti環(huán)境

    以下是一些關(guān)鍵步驟和建議: 安裝Keil MDK-ARM: 首先,您需要從Keil官方網(wǎng)站下載并安裝Keil MDK-ARM。這是一個(gè)集成開發(fā)
    的頭像 發(fā)表于 09-02 10:19 ?645次閱讀

    電容充放電過程中電壓的變化規(guī)律

    電容充放電過程中電壓的變化規(guī)律是一個(gè)非常重要的電子學(xué)課題,涉及到電容器的基本工作原理和特性。在這篇文章,我們將詳細(xì)探討電容充放電過程中電壓的變化規(guī)律,包括電容的基本特性、充電
    的頭像 發(fā)表于 07-11 09:43 ?6452次閱讀

    鴻蒙OS開發(fā):典型頁面場景【一次開發(fā),多端部署】(資源使用)

    在頁面開發(fā)過程中,經(jīng)常需要用到顏色、字體、間距、圖片等資源,在不同的設(shè)備或配置,這些資源的值可能不同。
    的頭像 發(fā)表于 05-28 09:44 ?1020次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>:典型頁面場景【一次<b class='flag-5'>開發(fā)</b>,多端部署】(資源使用)

    鴻蒙OS開發(fā):【一次開發(fā),多端部署】應(yīng)用(資源使用)

    在頁面開發(fā)過程中,經(jīng)常需要用到顏色、字體、間距、圖片等資源,在不同的設(shè)備或配置,這些資源的值可能不同。
    的頭像 發(fā)表于 05-21 15:43 ?1081次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>:【一次<b class='flag-5'>開發(fā)</b>,多端部署】應(yīng)用(資源使用)

    STM32單片機(jī)有哪幾種常見的開發(fā)環(huán)境

    STM32單片機(jī)是一款廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)的單片機(jī),針對其開發(fā),有以下幾種常見的方式:STM32單片機(jī)有哪幾種常見的開發(fā)
    的頭像 發(fā)表于 05-18 08:04 ?3213次閱讀
    <b class='flag-5'>STM32</b>單片機(jī)有哪幾種常見的<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>?

    芯海通用 MCU應(yīng)用筆記 :在 IAR 及 MDK 開發(fā)環(huán)境下使用 printf 函數(shù)重定向移植差異指南

    最新發(fā)布的集成開發(fā)環(huán)境 IAR Embedded Workbench for Arm 9.32 版本已全面支持芯海科技 32 位 MCU 芯片,其 IAR Systems 為芯海科技
    發(fā)表于 05-16 11:56

    FPGA開發(fā)過程中配置全局時(shí)鐘需要注意哪些問題

    在FPGA開發(fā)過程中,配置全局時(shí)鐘是一個(gè)至關(guān)重要的步驟,它直接影響到整個(gè)系統(tǒng)的時(shí)序和性能。以下是配置全局時(shí)鐘時(shí)需要注意的一些關(guān)鍵問題: 時(shí)鐘抖動(dòng)和延遲 :全局時(shí)鐘資源的設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)最低的時(shí)鐘抖動(dòng)
    發(fā)表于 04-28 09:43

    如何在Keil MDK-ARM環(huán)境開發(fā)STM32L011K4T6?

    在Keil MDK-ARM環(huán)境開發(fā)STM32L011K4T6
    發(fā)表于 04-22 06:49

    STM32幾種流行的開發(fā)環(huán)境對比

    流行的開發(fā)環(huán)境優(yōu)缺點(diǎn)~一、KeilKeil是一款老牌集成開發(fā)環(huán)境(IDE),而且是一款通用的IDE,兼容市面上大部分單片機(jī)。官網(wǎng)地址:htt
    的頭像 發(fā)表于 04-21 08:10 ?2661次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>中</b>幾種流行的<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>對比

    請問STM32CubeIDE能否生成MDK代碼?

    雖然我知道CubeIDE是集成開發(fā)環(huán)境,代碼生成、編輯、編譯下載調(diào)試都OK,但是想問一下,能否像STM32CubeMX那樣,生成代碼的時(shí)候可以額外選擇
    發(fā)表于 03-13 08:02
    主站蜘蛛池模板: 欧美男同gay粗大又长| 欧美一区二区三区久久综| 成人免费观看在线视频| 再插深点嗯好大好爽| 亚洲精品久久久久中文字幕二区 | 乳色吐息在线观看全集免费观看| 男人天堂2018亚洲男人天堂| 久久精品嫩草影院免费看| 花蝴蝶在线观看中字| 好男人在线观看视频观看高清视频免费| 国产高清美女一级毛片久久| 国产成人精品亚洲线观看| 纲手胸被爆羞羞免费| 国产成人高清精品免费5388密| 国产99久久久欧美黑人刘玥| 国产ts在线| 国产欧美无码亚洲毛片| 国产真实强被迫伦姧女在线观看| 国语92电影网午夜福利| 江苏电台在线收听| 久久精品一本到99热| 久久综合色一综合色88| 蜜芽手机在线观看| 欧美特级午夜一区二区三区| 日本人添下面的全过程| 桃色窝| 掀开奶罩边躁狠狠躁软学生| 亚洲精品www久久久久久久软件| 亚洲一级特黄| 538久久视频在线| 大伊人青草狠狠久久| 国产精品一区第二页| 精品视频免费在线观看| 快播可乐网| 日本精品卡一卡2卡3卡四卡三卡| 射90黑b丝女| 亚洲欧美综合视频| 最近日本免费观看MV免费| wankz tv videos国产| 国产成人啪精视频精东传媒网站| 国产在线自天天人人|