OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5410|回复: 6

外部SRAM代码请教

[复制链接]

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
发表于 2014-8-2 16:29:01 | 显示全部楼层 |阅读模式
5金钱
1、在外部sram模块程序中有这样一句代码*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer; 我只到这个vu8是为了防止编译器优化,但是我不懂为什么要防止编译器优化,如果不用volatile,那么编译器会怎么优化?导致的后果是什么呢?
2、u32 testsram[250000] __attribute__((at(0X68000000)));这个代码大致意思就是将数组定义到外部的sram中,我不明白的是这个代码为啥是这样写的,这个格式是不是固定的?搞不清楚!有没有关于那个attribute相关的一些资料?
非常希望原子哥或者其他知道这两个问题的高手能抽空帮我解答一下,或者有没有相关的帖子告诉我一下,我搜索了一下,没找着!非常感谢!

最佳答案

查看完整内容[请看2#楼]

1.volatile 变量是随时可能由于某些情况发生变化的,加上这个关键字就要求处理器每次在使用这个值时都到对应的地址去读取,而不是使用内部寄存器(例如R1~R12)中已有的该变量的值。 2.arrtibute,这个和具体的编译器有关,可能不同的编译器对定义指定地址变量的方法不同,可以看相应的编译器的手册。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

123

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-8-3
在线时间
0 小时
发表于 2014-8-2 16:29:02 | 显示全部楼层
1.volatile 变量是随时可能由于某些情况发生变化的,加上这个关键字就要求处理器每次在使用这个值时都到对应的地址去读取,而不是使用内部寄存器(例如R1~R12)中已有的该变量的值。
2.arrtibute,这个和具体的编译器有关,可能不同的编译器对定义指定地址变量的方法不同,可以看相应的编译器的手册。
回复

使用道具 举报

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-8-3 23:34:57 | 显示全部楼层
回复【2楼】SCMartian:
---------------------------------
非常感谢您的回复,关于第2个问题,我按您的建议看了编译器的手册,确实有这方面的描述。但是第1个问题的答复还是不是很清楚,能具体说说吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-3 23:55:02 | 显示全部楼层
 回复【3楼】 刀剑如梦 :
---------------------------------
好好学习下这篇文章:
http://www.openedv.com/posts/list/918.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

123

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-8-3
在线时间
0 小时
发表于 2014-8-3 23:55:47 | 显示全部楼层
例如在内存地址0x0016处有一个GPIO输入数据寄存器ODR,当处理器第一次要用到这个寄存器的值时,会将其MOV到内部寄存器,假设为R1.当处理器第二次用到该值时,如果R1的数据还是ODR的数据,优化过的程序会直接读取R1中的值当做ODR的值。可我们知道ODR中的值是有可能随时因为外部因素发生变化的,而在CPU从获得的数据得出ODR中的值没有发生变化,这显然就出现了问题。例如一个键盘扫描程序,由于CPU获得的值并不是寄存器的值,CPU自然就不能对按键进行判断和处理。加上volatile后,就要求CPU每次读取该值时都从内存地(0x0016)获取,而不是从R1中获取
回复

使用道具 举报

24

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-8-4 17:22:57 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
回复【5楼】SCMartian:
---------------------------------
非常感谢,学习了!对volatile理解深了一步!
回复

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-25 15:00:35 | 显示全部楼层
mark...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 12:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表