【发布时间】:2015-04-11 01:46:30
【问题描述】:
我获得了 100 字节的连续高速缓存,用于在我的嵌入式设备热重启期间备份一些数据。
对 100 个中的每 4 个使用 __raw_writel 将是半屏代码。我可以使用 memcpy 吗?
【问题讨论】:
我获得了 100 字节的连续高速缓存,用于在我的嵌入式设备热重启期间备份一些数据。
对 100 个中的每 4 个使用 __raw_writel 将是半屏代码。我可以使用 memcpy 吗?
【问题讨论】:
怎么会是半屏代码?你必须有一个非常小的屏幕。如果内存区域是连续的,则可以使用循环。
u32 *to_write = ...;
volatile u32 __iomem *cache = ...;
for (int i = 0; i < 25; ++i) {
__raw_writel(to_write[i], cache + i);
}
memcpy 是否适用于您的缓存内存取决于架构和该架构的 memcpy 实现。
【讨论】:
void* 上的算术是非法的 C 代码。使用 char* 将是可移植的。
void * 是内核中广泛使用的 GCC 扩展。