linux arm 地址映射 ioremap_nocache 使用,ARM: 我可以对 ioremap_nocache() [without using ioread*()/iowrite*()] 返...

我正在使用 AM3358 SoC,運行一個 ARM Cortex-A8處理器,運行 Linux 3.12. 我在設備樹中啟用了一個子設備,它探測我的驅動程序,在那裡調用設備樹節點的資源。

我要求沒有緩存的原因是它並不是連接到,匯流排的實際內存設備,當然可以從處理器緩存中獲益。 所以訪問需要總是經過實際的線路。

當我這樣做的時候:u16 __iomem *addr = ioremap_nocache(...);

iowrite16(1, &addr[0]);

iowrite16(1, &addr[1]);

iowrite16(1, &addr[2]);

iowrite16(1, &addr[3]);

ioread16(&addr[0]);

ioread16(&addr[1]);

ioread16(&addr[2]);

ioread16(&addr[3]);

我看到使用邏輯分析儀在導線上進行 8訪問。 但是,當我這樣做的時候:u16 v;

addr[0] = 1;

addr[1] = 1;

addr[2] = 1;

addr[3] = 1;

v = addr[0];

v = addr[1];

v = addr[2];

v = addr[3];

我看到了四個寫訪問,但不是隨後的讀訪問。

我是否缺少什麼ioread16() 和直接存儲器訪問之間的區別,知道整個rtc範圍應該可以訪問。

這種行為可能是任何編譯器優化的結果? 我沒有看到生成的指令,但是直到那時,可以能有人有足夠有趣的回答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值