在MCU的實際使用過程中,我們一般會將程序放在FLASH中運行,但有時候需要同時操作falsh或者需要更好的實時性,程序運行的速度更快,這時我們就可以將這代碼放到RAM中運行。
將代碼放在RAM中又可以分為將.C文件放入RAM中以及將部分函數放在RAM中。
在這里我們以SWM190為例給大家簡單介紹一下在KEIL環境中如何讓程序運行在RAM上。
SWM190
KEIL環境實現將.C文件在RAM中
運行操作方法
以SWM190為例,我們打開SYNWIT公司提供的普通的GPIO工程,編譯后查看映射文件(.MAP文件)來查看文件位置。
我們先來看GPIO例程的主要函數,如下圖:
接著通過MAP文件看main.c文件在falsh中運行的情況,如下圖可以看出main.c文件編譯后的地址在以0x00000000為首地址的flash中:
將文件放在RAM中常用的方法有兩種,我們以將main.c文件放到RAM中為例:
方法一
快速將.c文件放入RAM
1、點擊APP中的想要放置在RAM中的文件,右鍵然后單擊煙花棒(OptionsforFile‘main.c’)
2、點擊Code/Const,選擇IRAM1[0x20000000-0x20004FFF]
3、點擊OK按鈕并編譯
4、此時可以看到main.c文件上有個*,意味著我們已經成功將main.c文件放在了RAM中
也可通過查看.map文件確認main.c文件的位置,如下圖所示,可以看出來main文件的地址變為0x20000000開始的RAM地址。
方法二
修改.cst文件
1、在取消勾選Use Memory Layout Form Target Dialog后會出現出現一個.sct文件,點擊Edit可直接對該文件進行修改。
打開文件后內容如下:
2、在.sct文件中,將main.o放在RW_IRAM1執行區域(0x20000000-0x00002000),修改后如下:
3、點擊編譯按鈕,編譯器會自動將main.c文件放到RAMCODE所在0x20000000開始的區域,結果如下圖所示,main文件的地址變為0x20000000開始的RAM地址。
? ? ? ? ? ? ? ? ? ? ? ?
SWM190
在KEIL環境實現將部分函數放在
RAM中運行操作方法
我們仍然以SWM190為例,我們打開SYNWIT公司提供的普通的GPIO工程,將while1中的函數封裝成KeyScan函數,如下圖:
編譯后可以通過查看MAP文件來看KeyScan函數的位置,如下圖可以看出來KeyScan函數編譯后的地址在flash中:
然后我們將KeyScan函數放到RAM中,操作如下:
1、與之前一樣,在取消勾選Use Memory Layout Form Target Dialog后會出現一個.sct文件,點擊Edit可直接對該文件進行修改,也可以將此文件拷貝到APP目錄下(防止刪除out目錄下內容時誤刪*.sct文件),然后再進行修改。
2、需要定位到RAM中的KeyScan函數添加前綴
方法一
用#pragma arm section code = “PlaceInRAM”和#pragma arm section將需要放到SRAM中的程序包括起來;
打開文件后內容如下:
方法二
在需要放到RAM中的函數前,用__attribute__((section("PlaceInRAM ")))聲明該函數放在PlaceInRAM section中。
3、在.sct文件中,定義一個PlaceInRAM的section,放在RW_IRAM1執行區域(0x20000000-0x00002000)。
修改內容如下圖所示:
4、點擊編譯按鈕,編譯器會自動將KeyScan函數放到RAMCODE所在0x20000000開始的區域,結果如下圖所示,KeyScan函數的地址變為0x20000000開始的RAM地址。
以上是本次介紹的將代碼放到RAM的操作方法,如果SWM芯片用戶想更多了解SWM芯片信息請聯系華芯微特技術人員。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17324瀏覽量
352656 -
RAM
+關注
關注
8文章
1369瀏覽量
115020 -
函數
+關注
關注
3文章
4346瀏覽量
62977 -
keil
+關注
關注
69文章
1214瀏覽量
167287 -
代碼
+關注
關注
30文章
4828瀏覽量
69055
原文標題:elexcon2023展商 | MCU之SWM在KEIL環境中實現代碼在RAM中運行
文章出處:【微信號:ELEXCON深圳國際電子展,微信公眾號:ELEXCON深圳國際電子展】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論