> #define BOARD_PSRAM_BASE (0x60000000)
Da es sich hier offenbar um einen Basispointer handelt, warum wird
dieser Zahlenwert nicht in einen uint8_t Pointer gecastet? Stattdessen
castest du dann lieber hier
_pucImageDst=(uint8_t*)BOARD_PSRAM_BASE+IMAGE_SIZE_QVGA*2 ;
dir den Zahlenwert auf den richtigen Datentyp zurecht.
Und warum steht eigentlich hier
> if((_pucImageDst + pImage->dwFinalLength) <= 0x60080000 )
eine magische Zahl mitten im Code? Könnte es eventuell sein, dass
zwischen den Zahlenwerten 0x60080000 und dem Wert von BOARD_PSRAM_BASE
ein Zusammenhang besteht, so dass man das eine in Einheiten des anderen
ausdrücken könnte? Würde das dann nicht sogar den Code vereinfachen,
indem man da gar keine Pointer mehr vergleichen muss, sonden sich im
Grunde fragt, ob pImage->dwFinalLength kleiner/gleich 0x8000 ist?
(Vorsicht: Kleiner gleich ist in C meistens falsch. Wir fangen bei 0 zu
zählen an und wenn man das berücksichtigt, bleibt von kleiner/gleich
meistens nur das kleiner übrig und es stellt sich raus, dass gleich
oftmals einen Arrayoverflow bedeutet)