STM32学习笔记之__attribute__ ((at())绝对定位分析
2024-08-25 23:23:44
STM32也会遇到这样的绝对定位的问题如下:
uint8_t UART_RX_BUF[1024] __attribute__ ((at(0X20001000))); //就是将串口接收的数据定位到RAM中起始地址为0X20001000;
绝对定位要么定位到flash、要么定位到RAM,这里我们将定位在flash进行说明。
MDK如何实现将数据存储到FLASH指定地址?
我们在烧录数据的时候,一般是从0x08000000开始按照顺序烧录到flash里面的,如何让数据能够定义到绝对地址如0800F000,就必须保证文件内数据也是存储在该地址,为了实现这个目的,MDK在生成文件时会填充0x00字段,从而确保能够将数据定义到
从实际情况也能验证这个原理,我以我的测试代码为例:
const u16 gFlashDefValue4[512] __attribute__((at(0x0800F000))) = {0x1111, 0x1111, 0x1111, 0x0111, 0x0111,0x0111};
可以看到Code+ReadOnly= 15236+47228 = 62464
而gFlashDefValue4占绝对地址F000+512*2 = 62464
从生成的BIN文件也可以证实该观点:
如果你自己查看生成文件也可以发现中间填充了大量的0x00.但有一点要注意, FLASH定义绝对地址时要考虑ZI-Data的长度,否则可能会导致FLASH溢出。
最新文章
- AjaxUpload跨域上传问题
- mysql远程快速导出csv格式数据工具
- javascript-单例模式
- 攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍
- Liferay 6.2 改造系列之十六:关闭OpenID模式的单点登录
- Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯
- kail新手安装
- window下编译ffmpeg 比较简单
- PLSQL 看连接数据库的用户
- POJ 2774 最长公共子串
- c# winform读取xml创建菜单
- 扩展jquery easyui datagrid编辑单元格
- ldd获得可执行程序的所有库并输出到指定目录
- F#周报2019年第11期
- [持续交付实践] Jenkins 中国用户大会参会见闻
- javascript的介绍、javascirpt的存在形式、javascript注释
- python tar 打包
- jvm学习二:类加载器
- 【转】linux中执行外部命令提示"; error while loading shared libraries";时的解决办法
- FastFel解析一个公式的步骤