【问题标题】:Could I using memcpy to access continuously cache memory rather than __raw_writel for each and in linux kernel我可以使用 memcpy 来连续访问缓存内存而不是 __raw_writel 每个和 linux 内核
【发布时间】:2015-04-11 01:46:30
【问题描述】:

我获得了 100 字节的连续高速缓存,用于在我的嵌入式设备热重启期间备份一些数据。

对 100 个中的每 4 个使用 __raw_writel 将是半屏代码。我可以使用 memcpy 吗?

【问题讨论】:

    标签: linux kernel memcpy


    【解决方案1】:

    怎么会是半屏代码?你必须有一个非常小的屏幕。如果内存区域是连续的,则可以使用循环。

    u32 *to_write = ...;
    volatile u32 __iomem *cache = ...;
    for (int i = 0; i < 25; ++i) {
        __raw_writel(to_write[i], cache + i);
    }
    

    memcpy 是否适用于您的缓存内存取决于架构和该架构的 memcpy 实现。

    【讨论】:

    • 这可能适用于 linux 内核支持的所有编译器,但重要的是要注意 void* 上的算术是非法的 C 代码。使用 char* 将是可移植的。
    • Arithmetic on void * 是内核中广泛使用的 GCC 扩展。
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 2012-07-23
    • 1970-01-01
    • 2011-12-15
    • 2023-03-22
    • 1970-01-01
    • 2015-10-05
    • 2015-05-09
    相关资源
    最近更新 更多