日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

瑞薩RA MCU如何將常量和函數(shù)放在Code Flash/ROM指定地址

RA生態(tài)工作室 ? 2026-06-02 18:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(tǒng)應(yīng)用中,有時(shí)需要將常量或者函數(shù)放在代碼閃存(Code Flash)的指定地址,以便后續(xù)的功能擴(kuò)展或代碼更新。


本文基于EK-RA4M2,詳細(xì)介紹了如何在不同編譯器環(huán)境下實(shí)現(xiàn)這一目標(biāo),涵蓋GNU、LLVM、IARArm Compiler6共四種編譯器。


由于瑞薩電子RA系列開(kāi)發(fā)基于FSP(Flexible Software Package),因此項(xiàng)目的構(gòu)建均基于FSP生成的代碼,對(duì)于第三方集成開(kāi)發(fā)環(huán)境(IDE)像IAR EW for Arm和Keil MDK,則依賴(lài)RASC(RA Smart Configurator)創(chuàng)建項(xiàng)目。


對(duì)于所有支持的編譯器來(lái)說(shuō),修改流程基本一致,主要包括以下步驟:


在鏈接腳本文件(Linker Script File)中添加新的自定義段(section),并指定地址范圍(通常包括起始地址和大?。S捎贔SP工程會(huì)在每次重新Generate Project Content時(shí),重寫(xiě)相關(guān)的Linker Script File,因此需先備份原始文件,重命名后再進(jìn)行修改。

使用特定關(guān)鍵字聲明需要定位的函數(shù)/常量,將其放在新增section中。

在IDE中修改配置,使更新后的Linker Script File生效。

編譯工程,通過(guò)生成的***.map文件確認(rèn)相應(yīng)標(biāo)號(hào)已正確放置在目標(biāo)地址。


假定目標(biāo)是在RA4M2中Code Flash最高地址上新增兩個(gè)section,一個(gè)用于存放函數(shù),一個(gè)用于存放常量,由于高地址的Block Size為32K(8000h),因此兩個(gè)section大小均設(shè)定為0x8000。


可以根據(jù)自己的實(shí)際需求調(diào)整,但一定考慮到改寫(xiě)內(nèi)容時(shí),最小的Erase/Program單元都是Block Size。


一、GNU編譯器


首先,我們介紹在e2studio中使用GNU編譯器時(shí)的操作步驟。


在e2studio中找到以下3個(gè)文件,在原始路徑下復(fù)制并重命名:


script\fsp.ld→script\fsp_new.ld

Debug\memory_regions.ld→Debug\memory_regions_new.ld

Debug\fsp_gen.ld→Debug\fsp_gen_new.ld


第一步,編輯Debug\memory_regions_new.ld,文件開(kāi)頭增加以下內(nèi)容,對(duì)標(biāo)號(hào)賦值:


FLASH_USER_DATA_LENGTH=0x8000;

FLASH_USER_TEXT_LENGTH=0x8000;


由于已指定2個(gè)Block存儲(chǔ)數(shù)據(jù),用于其它內(nèi)容Link的地址空間需要在此基礎(chǔ)上去掉2個(gè)Block,更新FLASH_LENGTH并增加存儲(chǔ)函數(shù)的TEXT section和存儲(chǔ)常量的DATA section。


FLASH_LENGTH=0x00080000-FLASH_USER_DATA_LENGTH-FLASH_USER_TEXT_LENGTH;

FLASH_USER_DATA_START=FLASH_START+FLASH_LENGTH;

FLASH_USER_TEXT_START=FLASH_USER_DATA_START+FLASH_USER_DATA_LENGTH;


memory_regions_new.ld文件的變動(dòng)參考下圖:


82dc4340-5e71-11f1-ab55-92fbcf53809c.jpg

memory_regions_new.ld變更內(nèi)容


第二步,修改fsp_gen_new.ld文件,MEMORY中增加FLASH_USER_DATA和FLASH_USER_TEXT,找到__flash_readonly$$(READONLY)【注意:此處是兩個(gè)下劃線】,其后增加.mydata和.mytext。


左右滑動(dòng)查看完整內(nèi)容

MEMORY{ RAM (rwx) : ORIGIN = RAM_START, LENGTH =RAM_LENGTH FLASH(rx) : ORIGIN = FLASH_START, LENGTH =FLASH_LENGTH FLASH_USER_DATA(rx) : ORIGIN = FLASH_USER_DATA_START, LENGTH =FLASH_USER_DATA_LENGTH FLASH_USER_TEXT(rx) : ORIGIN = FLASH_USER_TEXT_START, LENGTH =FLASH_USER_TEXT_LENGTH DATA_FLASH(rx) : ORIGIN = DATA_FLASH_START, LENGTH =DATA_FLASH_LENGTH QSPI_FLASH(rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_LENGTH
.mydata : { *(.rodata*) }> FLASH_USER_DATA .mytext : { *(.text*) }> FLASH_USER_TEXT


82ebb4ce-5e71-11f1-ab55-92fbcf53809c.png

fsp_gen_new.ld變更內(nèi)容


第三步,修改源碼,將const類(lèi)型變量和函數(shù)聲明在新增.mydata和.mytext兩個(gè)section中。增加函數(shù)定義。在hal_entry()中增加函數(shù)調(diào)用,避免優(yōu)化。


const uint8_t test_data[8] BSP_PLACE_IN_SECTION(".mydata") = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};

uint32_t test_function_fibonacci(uint32_t num) BSP_PLACE_IN_SECTION(".mytext") __attribute__((noinline));


82f77318-5e71-11f1-ab55-92fbcf53809c.jpg


第四步,按照以下方式更新fsp_new.ld文件,使得改動(dòng)后的Linker Script File(memory_regions_new.ld和fsp_gen_new.ld)生效。


83064154-5e71-11f1-ab55-92fbcf53809c.png

fsp_new.ld變更點(diǎn)


最后一步,在e2studio中設(shè)置Linker Script File為fsp_new.ld。


8312233e-5e71-11f1-ab55-92fbcf53809c.jpg

更新Linker Script File為fsp_new.ld



完成上述所有步驟后,編譯工程,目標(biāo)函數(shù)和常量已經(jīng)放在指定地址了,打開(kāi)***.map文件,用常量和函數(shù)名作為關(guān)鍵字搜索,可以看到以下匹配:


832045fe-5e71-11f1-ab55-92fbcf53809c.png

***.map文件中常量和函數(shù)的編譯地址


二、LLVM編譯器


接下來(lái),介紹在e2studio中使用LLVM編譯器時(shí)的操作步驟。


在e2studio中找到3個(gè)文件,在原始路徑下復(fù)制并重命名:


script\fsp.lld→script\fsp_new.lld

Debug\memory_regions.lld→Debug\memory_regions_new.lld

Debug\fsp_gen.lld→Debug\fsp_gen_new.lld


第一步,編輯Debug\memory_regions_new.lld,文件變動(dòng)參考下圖:


832f1f52-5e71-11f1-ab55-92fbcf53809c.jpg

memory_regions_new.lld變更內(nèi)容


第二步,修改fsp_gen_new.lld文件,參考下圖:


833e4522-5e71-11f1-ab55-92fbcf53809c.png

fsp_gen_new.lld變更內(nèi)容


第三步,修改源碼,將const類(lèi)型變量和函數(shù)聲明在新增.mydata和.mytext兩個(gè)section中。增加函數(shù)定義。在hal_entry()中增加函數(shù)調(diào)用,避免優(yōu)化。


左右滑動(dòng)查看完整內(nèi)容

constuint8_ttest_data_0[8] BSP_PLACE_IN_SECTION(".mydata") = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};constuint8_ttest_data_1[8] BSP_PLACE_IN_SECTION(".mydata") = {0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
uint32_ttest_function_fibonacci(uint32_t num)BSP_PLACE_IN_SECTION(".mytext") __attribute__((noinline));inttest_function_is_prime(int num)BSP_PLACE_IN_SECTION(".mytext") __attribute__((noinline));


左右滑動(dòng)查看完整內(nèi)容

834edcc0-5e71-11f1-ab55-92fbcf53809c.png


第四步,按照以下方式更新fsp_new.lld文件,使得改動(dòng)后的Linker Script File (memory_regions_new.lld和fsp_gen_new.lld)生效


835e321a-5e71-11f1-ab55-92fbcf53809c.png

fsp_new.lld變更點(diǎn)


最后一步,在e2studio中設(shè)置Linker Script File為fsp_new.lld


836b9888-5e71-11f1-ab55-92fbcf53809c.png

更新Linker Script File為fsp_new.lld



完成上述所有步驟后,編譯工程,目標(biāo)函數(shù)和常量已經(jīng)放在指定地址了,打開(kāi)***.map文件,用常量和函數(shù)名作為關(guān)鍵字搜索,可以看到以下匹配:


837a7cc2-5e71-11f1-ab55-92fbcf53809c.png

***.map文件中常量和函數(shù)的編譯地址


三、IAR編譯器


前面介紹的都是在瑞薩e2studio中使用GNU和LLVM的配置步驟,對(duì)于第三方IDE如IAR和Keil MDK,可以利用RASC(Renesas RA Smart Configurator)創(chuàng)建相應(yīng)工程并修改。


對(duì)于IAR Project,在workspace的路徑找到3個(gè)文件,在原始路徑下復(fù)制并重命名:


script\fsp.icf →[JX1] [JW2] script\fsp_new.icf

memory_regions.icf → memory_regions_new.icf

fsp_gen.icf → fsp_gen_new.icf


第一步,編輯memory_regions_new.icf,文件變動(dòng)參考下圖:


838631f2-5e71-11f1-ab55-92fbcf53809c.png

memory_regions_new.icf變更內(nèi)容


第二步,修改fsp_gen_new.icf文件,參考下圖:


8394f782-5e71-11f1-ab55-92fbcf53809c.png


第三步,修改源碼,將const類(lèi)型變量和函數(shù)聲明在新增.user_const和.user_text兩個(gè)section中。增加函數(shù)定義。在hal_entry()中增加函數(shù)調(diào)用,避免優(yōu)化。


83a38784-5e71-11f1-ab55-92fbcf53809c.png

代碼中增加變量和函數(shù)聲明


第四步,按照以下方式更新fsp_new.icf文件,使得改動(dòng)后的Linker Script File (memory_regions_new.icf和fsp_gen_new.icf)生效


83b28450-5e71-11f1-ab55-92fbcf53809c.png

fsp_new.icf變更點(diǎn)


最后一步,在IAR EW for Arm 中設(shè)置Linker Script File為fsp_new.icf


83c0ffb2-5e71-11f1-ab55-92fbcf53809c.png

更新Linker Script File為fsp_new.icf


特別提醒

在IAR中執(zhí)行clean操作后,該配置會(huì)恢復(fù)為默認(rèn)值(fsp.icf),需重新進(jìn)行修改。



完成上述所有步驟后,編譯工程,目標(biāo)函數(shù)和常量已經(jīng)放在指定地址了,打開(kāi)***.map文件,用常量和函數(shù)名作為關(guān)鍵字搜索,可以看到以下匹配:


83cc90ca-5e71-11f1-ab55-92fbcf53809c.png

***.map文件中常量和函數(shù)的編譯地址


四、Arm Compiler



對(duì)于Keil MDK工程,在工程路徑找到3個(gè)文件,在原始路徑下復(fù)制并重命名:


script\fsp.scat → script\fsp_new.scat

memory_regions.scat → memory_regions_new.scat

fsp_gen.scat → fsp_gen_new.scat


第一步,編輯memory_regions_new.scat,文件變動(dòng)參考下圖:


83d85c16-5e71-11f1-ab55-92fbcf53809c.png

memory_regions_new.scat變更內(nèi)容


第二步,修改fsp_gen_new.scat文件,參考下圖:


找到關(guān)鍵字“LOAD_REGION_OPTION_SETTING_OFS0”在該段落前增加.my_data_setion和.my_text_section兩個(gè)section。


83e6a690-5e71-11f1-ab55-92fbcf53809c.png

fsp_gen_new.scat變更內(nèi)容


第三步,修改源碼,將const類(lèi)型變量和函數(shù)聲明在新增.my_data_section和.my_text_section兩個(gè)section中。增加函數(shù)定義。在hal_entry()中增加函數(shù)調(diào)用,避免優(yōu)化。


左右滑動(dòng)查看完整內(nèi)容

83f6b4f4-5e71-11f1-ab55-92fbcf53809c.png


第四步,按照以下方式更新fsp_new.scat文件,使得改動(dòng)后的Linker Script File(memory_regions_new.scat和fsp_gen_new.scat)生效


8408293c-5e71-11f1-ab55-92fbcf53809c.png

fsp_new.scat變更點(diǎn)


最后一步,在Keil MDK 中設(shè)置Linker >> Scatter File為fsp_new.scat


8415fc4c-5e71-11f1-ab55-92fbcf53809c.png

更新Linker Script File為fsp_new.scat



完成上述所有步驟后,編譯工程,目標(biāo)函數(shù)和常量已經(jīng)放在指定地址了,打開(kāi)***.map文件,用常量和函數(shù)名作為關(guān)鍵字搜索,可以看到以下匹配:


84254274-5e71-11f1-ab55-92fbcf53809c.png

***.map文件中常量和函數(shù)的編譯地址



關(guān)于const變量/函數(shù)定位到Code Flash指定地址的方法,我們已經(jīng)在本文中,基于GNU、LLVM、IAR和Arm Compiler 6共四款主流編譯器,做了完整的對(duì)比與說(shuō)明。


理論講清楚了,接下來(lái)就是實(shí)操環(huán)節(jié)啦。


我們也準(zhǔn)備了對(duì)應(yīng)的示例工程,方便你直接驗(yàn)證、復(fù)用:


示例工程

https://gitee.com/recn-mcu-ae/20260507rasectiongccllvmiarac6

聲明:本文內(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    19308

    瀏覽量

    405699
  • 嵌入式
    +關(guān)注

    關(guān)注

    5213

    文章

    20860

    瀏覽量

    339620
  • 瑞薩
    +關(guān)注

    關(guān)注

    38

    文章

    22553

    瀏覽量

    91870
  • RA
    RA
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    如何搭建RA VS code開(kāi)發(fā)環(huán)境

    在上一篇文章“當(dāng)RA MCU遇見(jiàn)Zephyr,打通嵌入式開(kāi)發(fā)任督二脈!”中,我們介紹了Zephyr極具前景的發(fā)展趨勢(shì)以及開(kāi)發(fā)板對(duì)Zephyr的深度融合支持。
    的頭像 發(fā)表于 11-05 14:41 ?4925次閱讀
    如何搭建<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> VS <b class='flag-5'>code</b>開(kāi)發(fā)環(huán)境

    RA MCU如何將常量函數(shù)放在Code Flash/ROM指定地址

    在嵌入式系統(tǒng)應(yīng)用中,有時(shí)需要將常量或者函數(shù)放在代碼閃存(Code Flash)的指定
    的頭像 發(fā)表于 06-01 09:57 ?2851次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>如何將</b><b class='flag-5'>常量</b>和<b class='flag-5'>函數(shù)</b><b class='flag-5'>放在</b><b class='flag-5'>Code</b> <b class='flag-5'>Flash</b>/<b class='flag-5'>ROM</b><b class='flag-5'>指定</b><b class='flag-5'>地址</b>

    如何將某個(gè)函數(shù)或變量放在固定的地址 ?

    如題,如何將某個(gè)函數(shù)或者變量放在固定的地址?類(lèi)似于__attribute__( at(絕對(duì)地址) ),用的nucleistudio ide,
    發(fā)表于 11-07 06:07

    RA6E2地奇星開(kāi)發(fā)板試用】?jī)?nèi)部Code flash和Data flash寫(xiě)入數(shù)據(jù)并通過(guò)OLED顯示

    回調(diào)函數(shù) 讀取數(shù)據(jù)與寫(xiě)入數(shù)據(jù)不一致 寫(xiě)入地址錯(cuò)誤,或數(shù)據(jù)緩存未刷新 確認(rèn) Flash地址正確性,寫(xiě)入后延時(shí) 1ms 再讀取 四、測(cè)評(píng)總結(jié)與建議 4.1 測(cè)評(píng)總結(jié)
    發(fā)表于 12-12 20:15

    RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】+VS Code RA4M2 開(kāi)發(fā)環(huán)境搭建與 GPIO 點(diǎn)燈實(shí)驗(yàn)教程

    一、前言 RA4M2 系列芯片憑借高性能、低功耗與完善的生態(tài)支持,在工業(yè)控制、物聯(lián)網(wǎng)終端等領(lǐng)域得到廣泛應(yīng)用。相較于官方 e2 studio 集成開(kāi)發(fā)環(huán)境,VS Code 具備輕量化
    發(fā)表于 04-15 15:12

    RISC 32MCU Flash SuperH的相關(guān)資料推薦

    推出SH7216系列32-位片上Flash存儲(chǔ)器MCU作者:時(shí)間:2009-04-21來(lái)源:電子產(chǎn)品世界字號(hào): 小 中 大關(guān)鍵詞:
    發(fā)表于 01-26 06:01

    IAR中如何定向把數(shù)組和函數(shù)放在指定地址單元

      應(yīng)用中我們經(jīng)常會(huì)用到一些應(yīng)用場(chǎng)景,如使用Const關(guān)鍵字定義一個(gè)數(shù)組到Flash地址單元,但是具體該數(shù)組放在Flash的那個(gè)位置,通常是由編譯器自己分配的(和LCF連接配置文件設(shè)置
    發(fā)表于 09-15 17:35 ?7次下載
    IAR中如何定向把數(shù)組和<b class='flag-5'>函數(shù)</b><b class='flag-5'>放在</b><b class='flag-5'>指定</b>的<b class='flag-5'>地址</b>單元

    micro-ROS移植到RA MCU

    (適用于MCU的機(jī)器人操作系統(tǒng))的官方支持硬件平臺(tái)。與micro-ROS框架的主要開(kāi)發(fā)商eProsima攜手,micro-ROS移植到RA
    的頭像 發(fā)表于 09-24 16:22 ?3227次閱讀

    RA系列MCU選型指南

    RA系列MCU產(chǎn)品基于Arm Cortex-M內(nèi)核,與自有內(nèi)核RL78和RX系列一起,成為
    發(fā)表于 11-08 13:51 ?3401次閱讀

    RISC-V MCU常量定義到指定Flash地址

    Keil MDK開(kāi)發(fā)ARM 內(nèi)核的MCU時(shí),常量定義到指定Flash地址中,使用 **_
    的頭像 發(fā)表于 02-15 11:47 ?2469次閱讀
    RISC-V <b class='flag-5'>MCU</b><b class='flag-5'>將</b><b class='flag-5'>常量</b>定義到<b class='flag-5'>指定</b>的<b class='flag-5'>Flash</b><b class='flag-5'>地址</b>

    線下培訓(xùn) | 電子RA MCU應(yīng)用開(kāi)發(fā)培訓(xùn)課程報(bào)名開(kāi)啟![野火電子]

    TRAINING RA應(yīng)用開(kāi)發(fā)培訓(xùn)課程來(lái)了! 電子RA系列MCU產(chǎn)品基于Arm ?Cortex -M內(nèi)核,與
    的頭像 發(fā)表于 03-21 10:30 ?2446次閱讀

    RA MCU串口通信空閑中斷

    RA MCU串口通信空閑中斷
    的頭像 發(fā)表于 09-26 16:59 ?2218次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>串口通信空閑中斷

    使用VSCODE+GNU+J-Link開(kāi)發(fā)RA MCU(上)

    使用VSCODE+GNU+J-Link開(kāi)發(fā)RA MCU
    的頭像 發(fā)表于 09-04 16:23 ?2956次閱讀
    使用VSCODE+GNU+J-Link開(kāi)發(fā)<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>(上)

    使用VSCODE+GNU+J-Link開(kāi)發(fā)RA MCU(下)

    使用VSCODE+GNU+J-Link開(kāi)發(fā)RA MCU
    的頭像 發(fā)表于 09-04 16:23 ?2605次閱讀
    使用VSCODE+GNU+J-Link開(kāi)發(fā)<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>(下)

    電子RA系列MCU 2025年新品回顧

    2025年RA系列推出10個(gè)新產(chǎn)品,覆蓋了從入門(mén)級(jí)低功耗(RA0E2)、中端低功耗(RA4C1)、高端工業(yè)及機(jī)器人控制(
    的頭像 發(fā)表于 01-27 09:57 ?1980次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>電子<b class='flag-5'>RA</b>系列<b class='flag-5'>MCU</b> 2025年新品回顧
    宣汉县| 顺平县| 昌邑市| 葫芦岛市| 大连市| 龙海市| 南丹县| 册亨县| 陆丰市| 江城| 开封县| 安义县| 治县。| 汶川县| 罗城| 龙门县| 平南县| 昭觉县| 叙永县| 襄樊市| 颍上县| 闸北区| 门源| 红原县| 和龙市| 罗源县| 永登县| 乡宁县| 七台河市| 迭部县| 清河县| 固始县| 志丹县| 托克逊县| 于都县| 顺昌县| 西充县| 忻州市| 广宁县| 连山| 巴彦县|