问题描述
我asked this question before,但我认为我的解释不够充分,无法得到答案。我正在尝试生成一个文件以加载到照片中的 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 位值?
解决方法
程序正在输出正确的数据。使用的修改
fwrite(firstEpromFile,sizeof firstEpromFile[0],sizeof firstEpromFile / sizeof firstEpromFile[0],fp);
修复了我最初遇到的问题。我使用的 EPROM 编程器存在第二个问题,因为我没有指定文件是 INTEL,所以它试图(我认为)使用大端值。
感谢大家的建议和意见!很有帮助!