这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 2410 CACHE

共10条 1/1 1 跳转至

2410 CACHE

菜鸟
2006-12-20 22:53:12     打赏

请教各位大虾,我用ADS在2410上移植了u_boot中的U盘读写功能,关闭CACHE时U盘读写正常,打开CACHE时读写完全不正常,仔细看了UBoot的源码,发现里边对于ED,TD的处理中都用了volatile关键字说明,按理说打开CACHE时读写也应该正常,但情况是打开CACHE时通讯根本就建立不起来,不知什么原因?请教各位有否好的解决办法?(系统关闭CACHE时运行速度太慢,所以必须需要打开CACHE,不知在ADS能否对某些变量指定内存地址?)期待高手的回复....




关键词: CACHE    

菜鸟
2006-12-20 23:05:00     打赏
2楼

打开CACHE的时候,可能数据并没有实际写到U盘里面去,数据都在CACHE里面,这点需要注意。另外,你可以尝试只打开INSTRUCTION CACHE,关闭DATA CACHE.

另外,建议好好看看VOLATILE的用法。


菜鸟
2006-12-21 02:03:00     打赏
3楼

VOLATILE关键字只能影响程序在编译的时候,不要优化掉存储器访问。但是他并不能防止CPU把数据存放在Cache中。所以你这里应该是数据操作只到Cache而没有上总线。方法

1)像楼上所说只打开INSTRUCTION CACHE,关闭DATA CACHE。但这可能会影响你其他程序的运行性能

2)通过MMU的页表配置,把对应USB的地址区域设置成Noncacheable且Nonbufferable的,这样即使你把Cache都打开,这段地址区域也不会存放在Cache里。


菜鸟
2006-12-21 22:52:00     打赏
4楼
谢谢两位的回复,不知在ADS中如何才能实现“只打开INSTRUCTION CACHE,关闭DATA CACHE”,另外在ADS中如何指定各个变量的内存地址?如果不能单独指定又如何才能确保“USB的地址区域设置成Noncacheable且Nonbufferable的”?期待大虾的继续关注!谢!

菜鸟
2006-12-22 17:22:00     打赏
5楼

请从ARM网站下载ARM920T的TRM,并阅读第2、3、4章

http://www.arm.com/pdfs/DDI0151C_920T_TRM.pdf


院士
2006-12-22 18:41:00     打赏
6楼

哦~~


菜鸟
2006-12-24 00:43:00     打赏
7楼
谢谢ARMChina,那些文档看的有些头大,我想最主要的就是要USB操作的部分可以指定地址当然是指定到既无CACHE,又无BUFFER的地址位置,关键是在ADS中怎么才能实现地址指定呢?这些地址都是系统在编译时自动分配的我没办法更改其位置,有否一种方法使得变量在定义时即可指定其地址范围?是否只有使用scatter才能实现该功能呢?!谢谢

菜鸟
2006-12-26 19:03:00     打赏
8楼

首先,在编译的时候只能指定地址的值,无论是使用Scatter file,还是编译命令,还是你在代码里就明确写出地址的值。但这个地址是否被放到Cache中,从编译选项和你写的代码是无法控制的。

其次,除非你不打开Cache,那么所有的数据都不会在Cache中。如果你打开Cache和MMU那么决定地址是否在Cache中的唯一条件是你对MMU页表的配置。(请注意,只开Cache,而关闭MMU,结果和不开Cache没什么区别)。ADS是无法帮你指定地址区域控制,一定要你自己写代码来配置CP15和页表。如果你想要学会如何最大程度控制整个存储器区域,别无他法,一定要学习如何配置页表。所有的应用处理器(即使非ARM)全部如此。除非你不用ARM920T,用个ARM946或ARM940。

如果你已懂得MMU的原理,只是不知道怎么写代码去实现页表。有一个偷懒的办法,如果你使用的是ADS,在安装目录下\Examples\mmugen,这里面有个小程序可你帮你生成页表。非常简单易用,你看看说明文档就可以。你只需要将生成出来的页表放到,你设置的TTB地址上就可以。


菜鸟
2006-12-27 21:52:00     打赏
9楼

越来越专业


菜鸟
2007-01-13 03:02:00     打赏
10楼
学习一下

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]