
英特尔
80331 I / O处理器
技术指标说明
13.
问题:
总线接口单元遵循PCI排序规则
基于PCI规则的核心总线接口单元的订单交易。这让即将离任的写入
传进来的读取。对于在内部总线上的大多数设备,这不会导致由于问题
设备的功能异步相对于彼此。对于英特尔之间的交易
的XScale
通过内部总线内核和内存,这可能会导致意外的数据。例如:
0 : LDR R0 , = 0x40000
1 : LDR R1 , = 0xaaaaaaaa
2 : LDR R2 , = 0x55555555
3 : STR R1 , [ R0 ]
4 : ... <time延迟,让以前的交易complete>
5 : LDR R3 , [ R0 ]
6 : STR R2 , [ R0 ]
这段代码可能加载到寄存器R3的值0x55555555 ,因为店里的6号线
可通过在线路负载5这只发生在内部总线上的事务。
MCU内核端口强制执行严格的顺序,不会出现此问题。如果MCU内核
端口被使用,那么就不会出现这个问题。
当缓存被启用,那么最初的读操作将启动高速缓存行填充。在后续的写入是
挂起的英特尔XScale
核心直到行填充和LDR指令完成。在这种情况下,这
不会发生问题。
当缓存被禁用,并且缓存策略是拖延,直到完成( X = 0 , C = 0 , B = 0 ) ,这
不会发生问题。对于禁用高速缓存等MMU的设置,可能会出现问题。
与数据高速缓存具体区域和写缓冲的缓冲策略( X = 0 ,C = 0,B = 1)或
凝聚残疾-缓冲的( X = 1 , C = 0 , B = 1)容易受到此问题。此外,区域
配置为通过( X = 0 , C = 1 , B = 0 )写入,也容易受到此问题。
另外,如果高速缓存中的MMU页表启用,但数据缓存是在CP15禁用
ARM的控制寄存器,然后将有效的高速缓存策略可缓冲和这种重排序必须是
占了。
要认识到,用于访问存储器空间中的内部总线上的任何程序代码需要是很重要
考虑这种可能性。代码动态地禁用缓存(即 - 闪存编程
例程)需要确保为适当的存储器区域中的高速缓存策略设置为“失速
直到完成“,直到被重新启用高速缓存。
复制这个最简单的情况是两回至后端的函数调用,例如:
主营:
bl
bl
…
…
…
FUN1 :
STMFD
LDMFD
FUN2 :
STMFD
LDMFD
SP !, { R4 , FP , IP , LR }
SP !, { R4 , FP , IP ,PC }
藻!, { R4,R5, R6,R7, R8,R9, R10和lr }
藻!, { R4,R5 ,R6,R7 ,R8,R9 ,R10,电脑}
fun1
fun2
54
规范更新