C内存有点乱

标签 c xilinx

我正在从 32 位处理器上的 16 位内存地址读取数据。出于某种原因,我没有得到预期的输出。 地址的内容是一个 32 字节的字。

ABCDEFABCDEFABCDABCDEFABCDEFABCD

我使用的代码是这样的:

  u8 SendBuffer[128];
  u8 ReceiveBuffer[128];
  uint32_t InRAM1;
  int btidx=0;
  int tsize=32;
  for (Index = 0; Index <tsize; Index++) {
    int sbit=btidx*sizeof(uint32_t);
    InRAM1 = XIo_In32(RAM1_ADDR+sbit);
    u8 *v1=(u8 *)&XIo_In32(RAM1_ADDR+sbit);
    SendBuffer[Index] =  v1[Index];
    SendBuffer[Index+1] =  v1[Index+1]; 
    ReceiveBuffer[Index] = 0; 
    ReceiveBuffer[Index+1] = 0;     
    xil_printf("Data: %c%c %c%c \n\r", 
               (InRAM1 &0xff), (InRAM1 >>8)&0xff,
               SendBuffer[Index], SendBuffer[Index+1]);
    btidx++;
    Index++;
  }

运行后结果如下。敲我的头试图解决这个问题。我做错了什么?感谢您的帮助。

Data: AB AB 
Data: CD  
Data: EF AB 
Data: AB  
Data: CD AB 
Data: EF  
Data: AB CD 
Data: CD  
Data: AB CD 
Data: CD  
Data: EF CD 
Data: AB  
Data: CD  
Data: EF  
Data: AB  
Data: CD  

最佳答案

你需要改变:

SendBuffer[Index] = v1[0];  
SendBuffer[Index+1] = v1[1];

Index 将不断递增,您会跳过位...

关于C内存有点乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987237/

相关文章:

c - ANSI C : Why character functions accept int argument instead of char argument?

通过套接字发送后,C 结构未获取填充值

c - 在 C 中使控制台窗口变大

methods - 在vhdl中定义记录方法

fpga - 如果信号不在设计中,如何忽略综合约束?

vhdl - 有没有办法在 ISim 中显示变量?

linux - macb ff0e0000.ethernet eth0 : Could not attach to PHY

c++ - 在 Ubuntu 13 的 64 位环境中构建 32 位 FCGI++ 二进制文件

c - 共享库 (PIC) 返回指向调用者结果的指针 SEGFAULT

vhdl - 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?