如果需要成片区集中存放多个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),是内部保留的,所以在编码的时候需要注意.