精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

CHANBAEK ? 來源:CSDN-借過風景 ? 作者:CSDN-借過風景 ? 2023-02-15 11:47 ? 次閱讀

Keil MDK開發ARM 內核的MCU時,將常量定義到指定的Flash地址中,使用 _ attribute _( at(絕對地址) ) 即可,如:

const u32 myConstVariable_1[128] __attribute__((at(0x08001000))) = {0x12345678,0x22221111};//定位在flash中,其他flash補充為0

沁恒RISC-V MCU ,通過Mounriver Studio(MRS)開發時,暫時不支持 _ attribute _( at(絕對地址) ) 命令??赏ㄟ^如下步驟實現:

1、編輯ld鏈接文件,添加SECTIONS段

.flash_test_address :
    {
        . = ALIGN(4);              /*4字節對齊*/
        . = ORIGIN(FLASH)+0x1000;  /*ORIGIN(FLASH)為 MEMORY定義的FLASH的起始地址(CH32V103為0x08000000),指定到從FLASH起始的0x1000長度的位置*/
        KEEP(*(SORT_NONE(.test_address_1)))  /*鏈接時*KEEP()可以使得被標記段的內容不被清除*/
        . = ALIGN(4);
    } >FLASH AT>FLASH

如需將變量定義到Flash的最后,將此段添加到 .text段后面,注意指定的Flash地址要大于程序編譯大小。

2、函數中使用__attribute__((section(".xxx")))定義常量

2.1 定義單字節常量

const uint8_t myConstVariable_1 __attribute__((section(".test_address_1"))) = 0x11;/*地址為0x00001000*/

查看map文件,常量地址如下:

image

sections .flash_test_address段中以 4字節對齊 ,其余3字節補0。

二進制bin文件0x1000地址信息如下;

image

2.2 定義連續的多個單字節常量

const uint8_t myConstVariable_1 __attribute__((section(".test_address_1"))) = 0x11; /*地址為0x00001002*/
const uint8_t myConstVariable_2 __attribute__((section(".test_address_1"))) = 0x22; /*地址為0x00001001*/
const uint8_t myConstVariable_3 __attribute__((section(".test_address_1"))) = 0x33; /*地址為0x00001000*/

ld文件中flash_test_address 段默認從指定地址開始為其分配連續的地址,查看map文件,常量地址如下:

image

二進制bin文件0x1000地址信息如下;

image

2.3 定義多個不連續的常量

此時需要修改ld文件

.flash_test_address :
    {
        . = ALIGN(4);              /*4字節對齊*/
        . = ORIGIN(FLASH)+0x1000;  /*ORIGIN(FLASH)為 MEMORY定義的FLASH的起始地址(CH32V103為0x08000000),指定到從FLASH起始的0x1000長度的位置*/
        KEEP(*(SORT_NONE(.test_address_1)))  /*鏈接時*KEEP()可以使得被標記段的內容不被清除*/
        . = ORIGIN(FLASH)+0x1040;  /*ORIGIN(FLASH)為 MEMORY定義的FLASH的起始地址(CH32V103為0x08000000),指定到從FLASH起始的0x1040長度的位置*/
        KEEP(*(SORT_NONE(.test_address_2)))  /*鏈接時*KEEP()可以使得被標記段的內容不被清除*/
        . = ALIGN(4);
    } >FLASH AT>FLASH

在函數中定義兩個指定地址的常量

const uint8_t myConstVariable_1[8] __attribute__((section(".test_address_1"))) = {0x11,0x22,0x33,0x44}; /*首地址為0x00001000*/
const uint8_t myConstVariable_2[4] __attribute__((section(".test_address_2"))) = {0x55,0x66}; /*首地址為0x00001040*/

查看map文件,常量地址如下:

image

二進制bin文件0x1000地址信息如下;

image

這樣指定的方式會造成中間段有56個字節的flash無法分配內容,浪費了 ,不建議這樣指定,如果實在要這樣做,需要嚴格把控,可根據間隔的大小,指定編譯后小于該間隔的函數存儲到該flash塊。

如指定函數Delay_Init編譯后存放test_address_1塊內,緊跟定義的常量后。

/*******************************************************************************
* Function Name  : Delay_Init
* Description    : Initializes Delay Funcation.
* Input          : None
* Return         : None
*******************************************************************************/
__attribute__((section(".test_address_1"))) void Delay_Init(void)
{
    p_us=SystemCoreClock/8000000;
    p_ms=(uint16_t)p_us*1000;
}

Delay_Init函數編譯后的大小為0x2a,編譯后的map文件如下:

image

二進制bin文件0x1000地址信息如下:

image

(新增的A2 4A 04 指令暫時不詳)

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

    關注

    146

    文章

    17002

    瀏覽量

    350326
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9054

    瀏覽量

    366830
  • FlaSh
    +關注

    關注

    10

    文章

    1622

    瀏覽量

    147760
  • 內核
    +關注

    關注

    3

    文章

    1363

    瀏覽量

    40228
  • RISC-V
    +關注

    關注

    44

    文章

    2230

    瀏覽量

    46036
收藏 人收藏

    評論

    相關推薦

    擁抱RISC-V的開發世界 兆易創新推GD32VF103系列RISC-V MCU

    兆易創新推出GD32V系列RISC-V內核32位通用MCU新品,現在,直接使用GD32V系列32位通用MCU以創意靈感擁抱
    發表于 08-23 10:05 ?7953次閱讀

    從授權自研內核,汽車MCU大廠倒戈RISC-V

    CPU核心,而這一核心未來也集成瑞薩的32位MCU上。 ? 率先開始授權RISC-V核心的瑞薩 ? 盡管瑞薩宣布自研RISC-V核心,
    的頭像 發表于 12-05 00:20 ?1968次閱讀
    從授權<b class='flag-5'>到</b>自研內核,汽車<b class='flag-5'>MCU</b>大廠倒戈<b class='flag-5'>RISC-V</b>?

    國產RISC-V MCU推薦

    高速PHY收發器(480Mbps)、千兆以太網MAC及10兆物理層收發器等。 沁恒的另一顆芯片 xiaolinen認為在選擇國產RISC-V MCU時,需要重點考慮生態問題,碰到問題是否能快速的找到
    發表于 04-17 11:00

    RISC-VMCU與ARM對比

    RISC-VMCU與ARM在多個方面存在顯著的區別,以下是兩者的對比: 開源與專有 RISC-VRISC-V是一種開源的指令集架構(ISA),允許任何人免費使用、修改和貢獻
    發表于 05-27 15:58

    risc-vmcu對RTOS兼容性如何

    RISC-VMCU對RTOS(實時操作系統)的兼容性主要取決于多個因素,包括RTOS的版本、RISC-V指令集的實現、以及芯片制造商提供的支持。以下是關于RISC-V
    發表于 05-27 16:26

    RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    RISC-V內核+接口底層根技術”的自研體系,深度剖析了全棧研發模式在推動RISC-V應用落地上的原生優勢。 青稞RISC-V芯片技術自主進一步深入
    發表于 08-30 17:37

    如何在RISC-V處理器上使用FreeRTOS?

    文件工程中2 確保匯編器的include路徑中包含描述芯片實現細節的頭文件3在FreeRTOSConfig.h中定義一個常量或linker變量指定中斷堆棧的
    發表于 11-29 15:54

    為什么選擇RISC-V?

    。例如,如果工程師在FPGA中實現軟RISC-V內核,則通常可以使用RTL源代碼。由于RISC-V免版稅,這為基于RISC-V的設計從FPGA移植
    發表于 07-27 17:38

    RISC-V MCU開發 (六):代碼下載

    RISC-V/ARM內核MCU工程的代碼下載功能。其中,對于CH56x、CH57x、CH58x等型號,MRS還支持關閉兩線仿真調試接口功能;對于CH32Fx、CH32Vx型號,MRS支持代碼讀保護查詢
    發表于 10-08 13:28

    RISC-V MCU開發相關資料分享

    RISC-V MCU開發(一):集成開發環境近年來,RISC-V生態獲得了空前的繁榮發展,國內外眾多科技公司紛紛下場布局、行業應用層出不窮,搭載RISC-V內核的
    發表于 11-10 07:50

    目前國內RISC-V架構的MCU從程序從arm移植RISC-V難度大嗎?

    目前國內RISC-V架構的MCU從程序從arm移植RISC-V難度大嗎?
    發表于 03-09 10:00

    RISC-V架構

    ,相比ARM內核具備成本、可拓展性、可控性等多方面優勢:(1)RISC-V基礎的ISA和IP核開源免費,并且從底層設計上模塊化、允許自定義拓展,使得芯片設計廠商擁有更高的研發自由度,前期投入成本較低;(2
    發表于 04-03 15:29

    RISC-V MCU編譯過程分析

    ,并優化后生成對應的匯編代碼,生成 .s 文件。 RISC-V MCU的工程采用GCC編譯,官方工具鏈地址:https://github.com/riscv/riscv-gnu-toolchain
    發表于 08-30 14:29

    Keil中指定代碼段與常量Flash地址方法

    圖 分配代碼文件Flash指定位置方法 在.sct文件中指定代碼輸出文件(.o格式)
    發表于 11-20 14:36 ?20次下載
    Keil中<b class='flag-5'>指定</b>代碼段與<b class='flag-5'>常量</b>在<b class='flag-5'>Flash</b>中<b class='flag-5'>地址</b>方法

    推出采用GD32 RISC-VMCU

    推出采用GD32 RISC-VMCU ppt分享
    發表于 07-14 17:15 ?0次下載