嵌入式开发---指定变量的存放地址

如果需要成片区集中存放多个buffer,可以通过以下方式指定存放到SRAM。

#define __ALIGN_4(addr)         (((addr) + 3) & ~(0x03))             //地址4字节对齐

#define TCP_TX_DATA_BUF_ADDR    0x2007C000        //buffer起始地址                   
#define TCP_TX_DATA_BUF_LEN     1536              //buffer长度

#define TCP_RX_DATA_BUF_ADDR    __ALIGN_4(TCP_TX_DATA_BUF_ADDR + TCP_TX_DATA_BUF_LEN)//下一个buffer起始地址

#define TCP_RX_DATA_BUF_LEN     1536        //下一个buffer长度    

uint8_t ModbusLocalCmdBuf[TCP_TX_DATA_BUF_LEN] __attribute__((at(TCP_TX_DATA_BUF_ADDR    )));                                        //定义buffre时指定地址

其他__attribute__用法

__attribute__((constructor)):

__attribute__((destructor));

__attribute__((constructor)) 在main() 之前执行,__attribute__((destructor)) 在main()执行结束之后执行.例如输出“Hello World!”


#include <stdio.h>
#include <stdlib.h>
 
static  __attribute__((constructor)) void before()
{
 
    printf("Hello");
}
 
static  __attribute__((destructor)) void after()
{
    printf(" World!\n");
}
 
int main(int args,char ** argv)
{
 
    return EXIT_SUCCESS;
}

若有多个函数需要在main之前执行,也可以在此基础上添加优先级,比如:

static  __attribute__((constructor(101))) void before()
{
 
    printf("Hello");
}
static  __attribute__((constructor(102))) void before()
{
 
    printf("World!");
}

0-100(包括100),是内部保留的,所以在编码的时候需要注意.

原创文章 18 获赞 12 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_28086285/article/details/88708052