国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    1399

    瀏覽量

    120572
  • STM32
    +關注

    關注

    2309

    文章

    11162

    瀏覽量

    373471
  • keil
    +關注

    關注

    69

    文章

    1230

    瀏覽量

    172648

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    使用 Keil Studio for Visual Studio Code開發 STM32 設備

    Keil Studio是 Arm 最新一代的集成開發環境(IDE),將嵌入式開發工具直接集成到了
    的頭像 發表于 03-05 17:41 ?1048次閱讀
    使用 Keil Studio for Visual Studio Code<b class='flag-5'>開發</b> <b class='flag-5'>STM32</b> 設備

    CW32單片機支持哪幾種開發環境,比較常用的MDK支持嗎?

    CW32單片機支持哪幾種開發環境,比較常用的MDK支持嗎。 若使用MDK開發,是否也需要下載芯片包,導入到
    發表于 01-26 06:14

    【正點原子STM32N647開發板試用】--開箱與開發環境搭建

    Development boot模式進行,燒錄好后以Flash boot運行。 (2)燒錄固件 燒錄固件開始階段有兩個,一STM32N647 開發板軟件包中提供的 FSBL 固件,
    發表于 01-25 00:01

    linux-arm開發環境的簡單配置

    linux-arm開發環境簡單配置 關于linux-arm開發環境簡單配置是
    發表于 01-13 07:56

    什么是嵌入式應用開發

    。 · ?醫療設備?:如心電圖儀、血壓計等。 開發工具和技術 嵌入式開發過程中常用的工具包括: · ?集成開發環境(IDE)?:用于編
    發表于 01-12 16:13

    CW32F030CxTx StartKit開發環境的兼容

    集成開發環境 : ?EWARM v7.70 或更高版本 - 30 天評估版 - 32-Kb 上限快速入門版本(Cortex M0 限 16-Kb) ?MDK-ARM v5.17 或更
    發表于 12-25 08:15

    開發過程中如何利用CW32L083系列微控制器的官方固件庫進行程序編寫和調試?

    開發過程中,如何利用CW32L083系列微控制器的官方固件庫進行程序編寫和調試?
    發表于 12-15 07:23

    分享一嵌入式開發學習路線

    、方案設計、硬件選型到系統集成、調試優化,全程參與。 問題解決:在項目開發過程中遇到問題時,學會查閱資料、請教他人,培養獨立解決問題的能力。
    發表于 12-04 11:01

    STM32 Nucleo-64開發板技術解析:以NUCLEO-C092RC為例

    Workbench^?^ 、MDK-ARMSTM32CubeIDE。STM32 Nucleo-64板集成了ST-LINK調試器/編程器,無需任何單獨的探頭。該板設有一
    的頭像 發表于 10-16 10:26 ?620次閱讀
    <b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>開發</b>板技術解析:以NUCLEO-C092RC為例

    開發指南】全志系列核心板開發過程中的常見問題及排查策略

    在長期提供技術支持服務的過程中,飛凌嵌入式總結了用戶開發全志系列產品時常見的問題及排查方法。本文中,小編將為大家梳理這些經驗,助力開發者快速定位問題,提升開發效率。
    的頭像 發表于 10-15 08:04 ?6874次閱讀
    【<b class='flag-5'>開發</b>指南】全志系列核心板<b class='flag-5'>開發過程中</b>的常見問題及排查策略

    【EK-RA6E2開發指南】開發環境搭建

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

    芯片研發過程中種流片方式

    芯片在研發過程中一般包含4階段:芯片設計、生產樣片、測試驗證和大規模量產。在完成芯片設計后,工程師們需要先拿到一些芯片樣片,用它們進行測試和驗證,來判斷新研發的芯片在功能和性能上是否符合設計要求
    的頭像 發表于 09-09 15:04 ?1961次閱讀
    芯片研<b class='flag-5'>發過程中</b>的<b class='flag-5'>兩</b>種流片方式

    意法半導體:STM32CubeMX將不再集成STM32CubeIDE

    ,這兩個工具實現互操作的方式將與IAR EWARM、Keil MDK-ARMSTM32Cube for VS Code相同。 這種工具當前的集成
    的頭像 發表于 09-01 17:18 ?3423次閱讀

    使用CY7C65213開發過程中,應該用哪個interface進行uart通信?

    在使用CY7C65213開發過程中,我想用CyUartRead讀數據,但是好像沒有接口的deviceType是CY_TYPE_UART,想請問我應該用哪個interface進行uart通信? 是否有相關指導文件,或描述符指導?
    發表于 06-03 07:04

    如何在米爾-STM32MP257開發板上實現環境監測系統

    論壇參與的一項目:Thingy:91X蜂窩物聯網原型開發平臺的試用。把兩個項目結合起來,實現一簡單的環境監測系統。二、硬件平臺1、米爾-
    的頭像 發表于 04-17 08:06 ?2825次閱讀
    如何在米爾-<b class='flag-5'>STM32</b>MP257<b class='flag-5'>開發</b>板上實現<b class='flag-5'>環境</b>監測系統