You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

32位RISC-V汇编读取RGB文件至缓冲区时缓冲区全为零的问题求助

32位RISC-V汇编读取RGB文件至缓冲区时缓冲区全为零的问题求助

各位大佬好,我最近碰到一个棘手的问题:我想把RGB格式图像文件里的像素值读取到内存数组中,但每次检查缓冲区时,里面全是零,完全读不到正确的RGB数值。最开始我用C写了一个实现版本,逻辑看起来是没问题的,之后我把它转成32位RISC-V汇编来实现,结果还是出现同样的问题,实在找不到问题根源,想请大家帮忙排查一下。

先贴出我的C实现代码,这个版本理论上应该能正常工作:

// 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);
}

下面是我写的RISC-V汇编实现:

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, a0   # 这里我之前漏写了a0,后来补上了,但还是没解决问题
    la a1, buff # get array address
    li a2, 3    # 原本想对应C里的每个像素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

我自己怀疑是不是系统调用的参数传递出错了?比如read系统调用(a7=63)的第三个参数应该是要读取的总字节数,而我这里只传了3?另外打开文件后,是不是没正确保存返回的文件描述符?虽然后来补上了mv s0, a0,但问题依然存在。有没有大佬能帮我看看哪里出问题了?

备注:内容来源于stack exchange,提问作者BashMocha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:29:40