将 16 位写入文件并确保它正在发生

问题描述

更新:更新了代码和 xxd 输出

asked this question before,但我认为我的解释不够充分,无法得到答案。我正在尝试生成一个文件以加载到照片中的 EPROM。

enter image description here

我需要创建一个二进制文件,它将在数据引脚上输出 16 位数据。例如,当我转到地址 0xFF(例如前 8 个地址引脚上的 5 伏电压)时,它将输出 0xAD12(在数据引脚上)。在二进制中,这意味着:1111000100010010,EPROM 将在引脚 2、5、9、13、14、15、16 上输出 1(5 伏)。

但是,当我将它加载到 EPROM 上时,它似乎只将较低的 8 位值放入文件中,并且所有 MSB 都为高(当 EPROM 为空白时),因此它似乎没有正在写那些位。我似乎无法使用 hexdump 或 xxd 看到 8 MSB?

我写了一个简单的例子。我试图让它尽可能接近我的实际程序。我意识到数据量很大,但它是我需要填充 EPROM 的文件大小。

#include <stdio.h>                                                                                                    
#include <stdlib.h>                                                                                                   
#include <stdint.h>                                                                                                   
                                                                                                                      
#define scRom1024 16384                                                                                               
uint16_t firstEpromFile[scRom1024] =  { 0xFFFF,0xFFDD,0xFDDD,0xF000,0x0F0F,0x0001,0x1010 };                     
                                                                                                                      
int main ()                                                                                                           
{                                                                                                                     
                                                                                                                      
  const char *path = "text.bin";                                                                                      
  FILE *fp = fopen(path,"wb");
  const void *data = firstEpromFile;                                                                                  
                                                                                                                      
  if (!fp)                                                                                                           
   {                                                                                                                  
    fprintf(stderr,"fopen() Failed for '%s'\n",path);                                                               
  }                                                                                                                   
  else                                                                                                                
    {                                                                                                                 
      fwrite(firstEpromFile,sizeof firstEpromFile[0],sizeof firstEpromFile / sizeof firstEpromFile[0],fp);         
      fclose(fp);                                                                                                     
    }                                                                                                                 
                                                                                                                      
  return 0;                                                                                                           
}                                                                                                                     


xxd 仅显示 8 LSB。

00000000: 11111111 11111111 11011101 11111111 11011101 11111101  ......
00000006: 00000000 11110000 00001111 00001111 00000001 00000000  ......

== hex version ===

00000000: ffff ddff ddfd 00f0 0f0f 0100 1010 0000  ................

所以我的问题是:

程序是否正确地写出了 16 位值,我用 xxd 看不到它们(似乎不太可能,因为物理硬件在 9-16 针上输出 5 伏电压)或者我是否需要修改代码以便它输出 16 位值?

解决方法

程序正在输出正确的数据。使用的修改

fwrite(firstEpromFile,sizeof firstEpromFile[0],sizeof firstEpromFile / sizeof firstEpromFile[0],fp);

修复了我最初遇到的问题。我使用的 EPROM 编程器存在第二个问题,因为我没有指定文件是 INTEL,所以它试图(我认为)使用大端值。

感谢大家的建议和意见!很有帮助!