我试图将文件中的RGB值读取到数组中,但当我检查缓冲区时,它充满了零而不是值。首先,我在C中尝试了它,然后在riscv汇编中实现了它。我不知道是什么引起的。
以下是两种实现方式,
// reads a file with an image in RGB format into an array in memory
void read_rgb_image(char fileName[], unsigned char *arr)
{
FILE *image;
image = fopen(fileName, "rb");
if (!image)
{
printf("unable to open file\n");
exit(1);
}
fread(arr, 3, WIDTH * HEIGHT, image);
fclose(image);
}
read_rgb_image:
addi sp, sp, -4
sw s0, 0(sp)
la a0, filename
li a1, 0 # read-only flag
li a7, 1024 # open file
ecall
mv s0,
la a1, buff # get array add.
li a2, 3
li a7, 63 # read file into buffer
ecall
mv a0, s0
li a7, 57 # close file
ecall
lw s0, 0(sp)
addi sp, sp, 4
ret
1条答案
按热度按时间lqfhib0f1#
经过一些研究,我修复了代码,以下是我修复的错误:
li a2, 172800
lw
指令而不是lbu
来加载字节。每个值的大小为一个字节,应存储为无符号。