简体   繁体   English

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

[英]Hard_fault on STM32 on second write to byte array - why?

I'm missing something obvious here.我在这里遗漏了一些明显的东西。 I get hardfault error on STM32 (CubeIDE) when trying to put working code in function... This one works:尝试将工作代码放入 function 时,我在 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;

but when I try to put this into function (in another file, shown below) I get HardFault on second write to framebuffer.但是当我尝试将它放入 function (在另一个文件中,如下所示)时,我在第二次写入帧缓冲区时得到了 HardFault。 There must be logical explanation on what is wrong... This one doesn't work:必须有什么是错的合乎逻辑的解释......这个不起作用:

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

and then function's definition然后是函数的定义

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;

}

Thanks in advance, regards, R.在此先感谢,问候,R。

When calling DrawPoint() , use framebuffer or &framebuffer[0] instead of framebuffer[0] .调用DrawPoint()时,请使用framebuffer&framebuffer[0]而不是framebuffer[0] The function expects a pointer, not a value. function 需要一个指针,而不是一个值。

Also, inside the definition of DrawPoint() you did not use temp , which would speed up your code.此外,在DrawPoint()的定义中,您没有使用temp ,这会加快您的代码速度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM