Hard_fault на STM32 на второй записи в байтовый массив - почему? - PullRequest
1 голос
/ 13 апреля 2020

Я упускаю что-то очевидное здесь. Я получаю сообщение об ошибке на 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.

1 Ответ

2 голосов
/ 13 апреля 2020

При вызове DrawPoint() используйте framebuffer или &framebuffer[0] вместо framebuffer[0]. Функция ожидает указатель, а не значение.

Кроме того, внутри определения DrawPoint() вы не использовали temp, что ускорило бы ваш код.

...