Xilinx SDK Xil_In 内存对齐

本文探讨了在使用Xilinx SDK的Xil_In32函数时遇到的内存对齐问题。作者通过实验发现,当偏移量不是32位整数倍时,Xil_In32读取的值不正确,可能是由于内存对齐导致。通过示例代码展示了内存对齐对读取操作的影响,并指出相同情况可能也会影响写入操作,但未进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SDK 的"xil_io.h"中提供了对地址的直接读写操作

不过我在实践中发现,对于Xil_In32(),当偏移为1不断读取时,会出现不正确的值。

我当时是在某连续若干地址中写了 0x0000 00ff(假如基址是0xc000 0000吧),但是读取的时候

0xc000 0001 读取的值是 0x0000 00ff;

0xc000 0002 读取的值也是 0x0000 00ff;

我就很纳闷了,这不科学啊,如果Xil_In32()是读取4个Bytes,那么0xc000 0002 读取的值应该是 0x0000 ff00;

 

后来我就怀疑是不是因为内存对齐导致的,我做了一个尝试,代码如下

Addr = 0xc5000000;
    u32 offset = 0;
    for(offset = 0; offset < VERT * HORI; )
    {
        Xil_Out32LE(Addr+4*offset, 0x00abcdef);
        Xil_Out32LE(Addr+4*offset+4, 0x00123456);
        
        offset+=2;
    }

    u32 value;
    for(offset = 0; offset < 160; offset++)
    {
        value = Xil_In8(Addr+offset);
        printf("Mem 0x%x is 0x%x \r\n",Addr+offset,value);

    }

    for(offset = 0; offset < 160; offset++)
    {
        value = Xil_In32(Addr+offset);
        printf("Mem 0x%x is 0x%x \r\n",Addr+offset,value);

    }

最终输出结果如下

Mem 0xc5000000 is 0xef 

Mem 0xc5000001 is 0xcd 

Mem 0xc5000002 is 0xab 

Mem 0xc5000003 is 0x0 

Mem 0xc5000004 is 0xef 

Mem 0xc5000005 is 0xcd 

Mem 0xc5000006 is 0xab 

Mem 0xc5000007 is 0x0 

Mem 0xc5000008 is 0xef 

Mem 0xc5000009 is 0xcd 

Mem 0xc500000a is 0xab 

Mem 0xc500000b is 0x0 

Mem 0xc500000c is 0xef 

Mem 0xc500000d is 0xcd 

Mem 0xc500000e is 0xab 

Mem 0xc500000f is 0x0 

Mem 0xc5000010 is 0xef 

Mem 0xc5000011 is 0xcd 

Mem 0xc5000012 is 0xab 

Mem 0xc5000013 is 0x0 

Mem 0xc5000014 is 0xef 

Mem 0xc5000015 is 0xcd 

Mem 0xc5000016 is 0xab 

Mem 0xc5000017 is 0x0 

Mem 0xc5000018 is 0xef 

Mem 0xc5000019 is 0xcd 

Mem 0xc500001a is 0xab 

Mem 0xc500001b is 0x0 

Mem 0xc500001c is 0xef 

Mem 0xc500001d is 0xcd 

Mem 0xc500001e is 0xab 

Mem 0xc500001f is 0x0 

Mem 0xc5000020 is 0xef 

Mem 0xc5000021 is 0xcd 

Mem 0xc5000022 is 0xab 

Mem 0xc5000023 is 0x0 

Mem 0xc5000024 is 0xef 

Mem 0xc5000025 is 0xcd 

Mem 0xc5000026 is 0xab 

Mem 0xc5000027 is 0x0 

Mem 0xc5000028 is 0xef 

Mem 0xc5000029 is 0xcd 

Mem 0xc500002a is 0xab 

Mem 0xc500002b is 0x0 

Mem 0xc500002c is 0xef 

Mem 0xc500002d is 0xcd 

Mem 0xc500002e is 0xab 

Mem 0xc500002f is 0x0 

Mem 0xc5000030 is 0xef 

Mem 0xc5000031 is 0xcd 

Mem 0xc5000032 is 0xab 

Mem 0xc5000033 is 0x0 

Mem 0xc5000034 is 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值