0

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

以前问过这个问题,但我认为我解释得不够好,无法得到答案。我正在尝试生成一个文件以加载到照片中的 EPROM。在此处输入图像描述

我需要创建一个二进制文件,它将在数据引脚上输出 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-位值?

4

1 回答 1

0

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

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

解决了我最初遇到的问题。我使用的 EPROM 程序员还有第二个问题,因为我没有指定文件是 INTEL,所以它正在尝试(我认为)使用大端值。

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

于 2021-02-13T18:45:43.620 回答