Hard_fault 在 STM32 上第二次写入字节数组 - 为什么?

Hard_fault on STM32 on second write to byte array - why?

我在这里遗漏了一些明显的东西。尝试将工作代码放入函数中时,我在 STM32 (CubeIDE) 上遇到硬故障错误... 这个有效:

uint8_t framebuffer[SUBFBUF_XYMAX*SUBFBUF_XYMAX*BPP];  //24 bpp framebuffer
...
          ii = rand() % SUBFBUF_XYMAX;
          jj = rand() % SUBFBUF_XYMAX;

          DrawPoint (ii,jj,framebuffer[0], 255, 255,255);
          framebuffer[ii*BPP+jj*SUBFBUF_XYMAX*BPP] =  255;
          framebuffer[ii*BPP+jj*SUBFBUF_XYMAX*BPP+1] =  255;
          framebuffer[ii*BPP+jj*SUBFBUF_XYMAX*BPP+2] = 255;

但是当我尝试将它放入函数中时(在另一个文件中,如下所示)我在第二次写入帧缓冲区时遇到了 HardFault。 必须对什么是错误的进行合乎逻辑的解释...... 这个不行:

  DrawPoint (ii,jj,framebuffer[0], 255, 255,255);

然后是函数的定义

void DrawPoint(int x0, int y0, uint8_t framebuf[], uint8_t red, uint8_t green,uint8_t blue) {
    int temp=x0*BPP+y0*SUBFBUF_XYMAX*BPP;

    framebuf[x0*BPP+y0*SUBFBUF_XYMAX*BPP] = (uint8_t)blue;
    framebuf[x0*BPP+y0*SUBFBUF_XYMAX*BPP+1] = (uint8_t)green;
    framebuf[x0*BPP+y0*SUBFBUF_XYMAX*BPP+2] = (uint8_t)red;

}

提前致谢, 问候, R.

调用 DrawPoint() 时,请使用 framebuffer&framebuffer[0] 而不是 framebuffer[0]。该函数需要一个指针,而不是一个值。

此外,在 DrawPoint() 的定义中,您没有使用 temp,这会加快您的代码速度。