更新:更新了代码和 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-位值?