stm32 全局变量(变量和函数)绝对地址编译

最近在研究怎么把代码编译到自己想要的位置,然后只运行一次就自宫,分享一下。
这个是keil使用的编译器做法。

方法一:

void fun(void) __attribute((section(".ARM.__at_0x8100000")));

方法二:

#pragma arm section code=".ARM.__at_0x8100000"

void fun(void)

{

}

#pragma arm section

定位变量:

int val attribute((section(".ARM.__at_0x20000000"))) = 0x00;

21.10.28更新一下大家做个参考,st官方写的,这个是把变量定位到ram指定区域的方法

在这里插#if defined(__ICCARM__) /*!< IAR Compiler */

#pragma location = 0x30040000
ETH_DMADescTypeDef
    DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
#pragma location = 0x30040060
ETH_DMADescTypeDef
    DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
#pragma location = 0x30040200
uint8_t Rx_Buff[ETH_RX_DESC_CNT]
               [ETH_RX_BUFFER_SIZE]; /* Ethernet Receive Buffers */

#elif defined(__CC_ARM) /* MDK ARM Compiler */

__attribute__((at(0x30040000))) ETH_DMADescTypeDef
    DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
__attribute__((at(0x30040060))) ETH_DMADescTypeDef
    DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
__attribute__((at(0x30040200))) uint8_t
    Rx_Buff[ETH_RX_DESC_CNT][ETH_RX_BUFFER_SIZE]; /* Ethernet Receive Buffer */

#elif defined(__GNUC__) /* GNU Compiler */

ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((
    section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((
    section(".TxDecripSection"))); /* Ethernet Tx DMA Descriptors */
uint8_t            Rx_Buff[ETH_RX_DESC_CNT][ETH_RX_BUFFER_SIZE] 
    __attribute__((section(".RxArraySection"))); /* Ethernet Receive Buffers */
入代码片
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值