打印

C语言中__attribute__ ((at())用法

[复制链接]
2466|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在MCU 使用过程中,有的时候想要将某个数据定位到一个指定的地址中的时候,方便后期烧录MCU 时候,可以到指定的地址读取数据。
C语言中的关键字__attribute__
__attribute__( at(绝对地址) )的作用分两个,一个是绝对定位到Flash,另个一是绝对定位到RAM。
1、定位到flash中
一般用于固化的信息,如出厂设置的参数,上位机配置的参数,ID卡的ID号,flash标记等等
const u16 gFlashDefValue[512] __attribute__((at(0x0800F000))) = {0x1111,0x1111,0x1111,0x0111,0x0111,0x0111};//定位在flash中,其他flash补充为00const u16 gflashdata__attribute__((at(0x0800F000))) = 0xFFFF;
2、定位到RAM中
一般用于数据量比较大的缓存,如串口的接收缓存,再就是某个位置的特定变量
u8 USART2_RX_BUF[USART2_REC_LEN] __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000.
注意:
1、绝对定位不能在函数中定义,局部变量是定义在栈区的,栈区由MDK自动分配、释放,不能定义为绝对地址,只能放在函数外定义。
2、定义的长度不能超过栈或Flash的大小,否则,造成栈、Flash溢出。

更多资料来源于微信公众号:EL_MCU

使用特权

评论回复
沙发
零三翟邢止胃| | 2019-3-26 11:20 | 只看该作者
多谢分享啊! 感谢啊!很好的啊! 不错的啊! 好帖子啊! 不顶,对不起啊!

使用特权

评论回复
板凳
bvbgbhbn| | 2019-3-26 15:06 | 只看该作者
感谢分享!很有用的经验。

使用特权

评论回复
地板
chenyilin|  楼主 | 2019-3-26 18:06 | 只看该作者
零三翟邢止胃 发表于 2019-3-26 11:20
多谢分享啊! 感谢啊!很好的啊! 不错的啊! 好帖子啊! 不顶,对不起啊! ...

真心感谢您的支持~

使用特权

评论回复
5
123ycli| | 2019-3-28 17:04 | 只看该作者
说实话,我实际写程序,attribute没有用过,倒是在库中用的不少。

使用特权

评论回复
6
HKingS| | 2019-3-29 17:08 | 只看该作者
对于终端用户来说,这个函数好像没什么用。

使用特权

评论回复
7
chenyilin|  楼主 | 2019-3-29 19:29 | 只看该作者
HKingS 发表于 2019-3-29 17:08
对于终端用户来说,这个函数好像没什么用。

emmmm ,也许哪天你碰到了 才知道他的用处

使用特权

评论回复
8
Sunriver_Yao| | 2019-6-16 22:28 | 只看该作者
其他静态变量会自动绕开设个片区么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:GigaDevice
简介:兆易创新科技集团股份有限公司 (股票代码603986) 是全球领先的Fabless芯片供应商,公司成立于2005年4月,总部设于中国北京

17

主题

55

帖子

3

粉丝