在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于ARM MDK集成開發環境從事STM32開發過程中的兩個小提醒

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

?一、片內RAM用完了?

曾有兩個不同的STM32用戶反饋了相似的問題,他們在對STM32F7Cube庫里的工程例程進行編譯時,發現了一個令人很不解的事。編譯的結果提示芯片內的RAM幾乎都耗光了。但以他們對工程基本功能的了解,按理說不應該那樣,想知道是怎么回事。

具體情況是這樣的:他們先在STM32CubeF7的固件庫里打開了一個有關lwip應用的工程示例。比如下面目錄處的一個工程,使用ARM MDK進行編譯。

STM32Cube_FW_F7_V1.15.0ProjectsSTM32746G-DiscoveryApplicationsLwIPLwIP_HTTP_Server_Netconn_RTOSMDK-ARM。

結果發現編譯結果提示片內RAM的空間已經基本用完了。但感覺應該用不了那么多RAM內存。客戶還想添加自己的其它用戶程序,還需使用RAM呢。

打開相應軟件工程,使用ARM MDK進行編譯,發現編譯結果跟客戶反饋的一致。

從編譯結果來看,感覺RAM真的被用去了320多K,那RAM用到哪里去了呢?打開對應的MAP文件進一步查看,可得到如下數據。

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

結合編譯結果和上面數據信息來看,貌似RAM真的用完了。既然這樣,只好硬著頭皮繼續查看MAP文件的其它細節,?看看RAM到底消耗在哪些地方去了。后來發現在某個地址段有個巨大的PAD補丁填充區。

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

一般來講,代碼編譯后產生的PAD補丁塊往往是因為地址對齊方面的原因導致的一些不便使用的零散內存碎片,正常來講,?這些補丁塊不會大面積的集中在一起。

比如使用下面結構體變量的時候會插入padding.

?

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

但通過查看MAP文件,可以發現上面提到的那個大補丁塊空間也隨之減小了16KB。顯然,RAM并非真正用完了,只是編譯器把它當作類似對齊原因導致的補丁塊了。現在問題是,怎么會被編譯器誤判成這么大的一個補丁塊呢?

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

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

這里讓人想到一個地方,那就是MDK IDE選項配置中Target配置的這個地方:

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

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

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

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

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

用人使用STM32F7開發產品,發現編譯時找不到合適的Flash算法文件,或者MDK自帶的現有FLM文件用不了。具體情況是這樣的:

有人使用STM32F750V8開發產品,編譯完畢后欲進行下載調試,結果沒法完成程序下載,提示FLASH下載錯誤。

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

打開MDK選項配置里flash_download的編程配置頁面,那里已經添加了相關FLASH編程算法文件。

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

這里的片內FLASH默認起始地址卻是0x8000000。顯然這里跟FLASH編程算法文件的起始地址定義不一致,初步判斷應該是這個地方導致的問題。

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

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

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

結合到上面案例,MDK選項配置中Target頁面的片內FLASH地址安排與Flash算法定義的地址不一致導致程序下載失敗。那么,我們可以將二者的地址及大小調整得一致,具體根據實際開發需求來調整,即根據你希望CPU通過哪個接口來訪問FLASH來做相應調整。

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

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

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

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

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

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

基于修改后的配置,再進行編譯后即可進行下載調試。

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

    關注

    8

    文章

    1369

    瀏覽量

    114818
  • STM32
    +關注

    關注

    2270

    文章

    10915

    瀏覽量

    356758
  • keil
    +關注

    關注

    68

    文章

    1214

    瀏覽量

    167051

原文標題:基于KEIL MDK環境調試STM32的兩個誤會

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

收藏 人收藏

    評論

    相關推薦

    【正點原子STM32H7R3開發套件試用體驗】流水燈

    工程,之后使用 Keil MDK IDE 編譯代碼,實現流水燈的項目流程。從配置過程中發現,系統核心具有極高的運行速率,STM32H7系列具有32位Arm Cortex?-M7內核,運
    發表于 12-28 18:51

    HAL庫在STM32開發的重要性

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

    【MM32F5270】Keil開發環境搭建

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

    新唐科技率先發布免費版Arm Keil MDK,助力嵌入式開發

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

    自己做的TAS5825板子軟件開發過程中怎么接到PPC3上去調試呢?

    我們打算做一TAS5825的板子,PPC3軟件已經申請下來了,有問題是我們自己做的TAS5825板子軟件開發過程中怎么接到PPC3上去調試呢?
    發表于 10-15 08:15

    keil5怎么利用sys進行配置ti環境

    以下是一些關鍵步驟和建議: 安裝Keil MDK-ARM: 首先,您需要從Keil官方網站下載并安裝Keil MDK-ARM。這是一集成開發
    的頭像 發表于 09-02 10:19 ?631次閱讀

    電容充放電過程中電壓的變化規律

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

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

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

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

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

    STM32單片機有哪幾種常見的開發環境

    STM32單片機是一款廣泛應用于嵌入式系統開發的單片機,針對其開發,有以下幾種常見的方式:STM32單片機有哪幾種常見的開發
    的頭像 發表于 05-18 08:04 ?3186次閱讀
    <b class='flag-5'>STM32</b>單片機有哪幾種常見的<b class='flag-5'>開發</b><b class='flag-5'>環境</b>?

    芯海通用 MCU應用筆記 :在 IAR 及 MDK 開發環境下使用 printf 函數重定向移植差異指南

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

    FPGA開發過程中配置全局時鐘需要注意哪些問題

    在FPGA開發過程中,配置全局時鐘是一至關重要的步驟,它直接影響到整個系統的時序和性能。以下是配置全局時鐘時需要注意的一些關鍵問題: 時鐘抖動和延遲 :全局時鐘資源的設計目標是實現最低的時鐘抖動
    發表于 04-28 09:43

    如何在Keil MDK-ARM環境開發STM32L011K4T6?

    在Keil MDK-ARM環境開發STM32L011K4T6
    發表于 04-22 06:49

    STM32幾種流行的開發環境對比

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

    請問STM32CubeIDE能否生成MDK代碼?

    雖然我知道CubeIDE是集成開發環境,代碼生成、編輯、編譯下載調試都OK,但是想問一下,能否像STM32CubeMX那樣,生成代碼的時候可以額外選擇
    發表于 03-13 08:02
    主站蜘蛛池模板: 91大神精品视频| 末发育女一区二区三区| 天堂网www在线资源网| 日本一区二区免费在线观看| 免费观看视频| 天天干夜夜躁| 激激婷婷综合五| 亚洲色图25p| 天堂在线观看免费视频| 色.com| 欧美a色| 国产日韩欧美一区二区| 在线播放国产不卡免费视频| 天天精品视频| jinv在线视频| 婷婷久久精品| 亚洲天堂.com| 日本a在线看| 国产美女动态免费视频| 午夜爽| 真实一级一级一片免费视频| 午夜免费视频观看在线播放| 米奇777四色精品人人爽| 钻石午夜影院| 国语自产免费精品视频一区二区| 亚洲欧美色图| 免费在线欧美| 永久观看| jiucao在线观看精品| 免费看黄视频网站| 色婷婷激婷婷深爱五月小说| 加勒比色| 色se01短视频永久免费| 成年1314在线观看| 亚洲a免费| 久草成人在线视频| 天天色综合1| 8x8x极品国产在线| 天天怕夜夜怕狠狠怕| 狠狠色综合久久婷婷| 欧美又黄又嫩大片a级|