2022-05-10 12:32 AM
Dear Members,
I have question related with BMP reading from SDcard then display to LCD ?
It stopped in one file,
Is it related with internal SRAM of my STM32F103, and I'm running out of internal SRAM memory,
I read some bmp files, and freeze.
Regards,
Code :
//Function reading 256 file
void LCD_BMP_reading_256(char filename[120])
{
char temp_buffer[100],line[512];
int count,z,bmpData,bmpAddr;
int x = 0;
int i,y = 0;
int xx, yy;
uint8_t hdr[0x28];
UINT bytesread;
uint8_t hdr_256[0x36];
static uint16_t w[256];
uint32_t off;
delay_ms(1500);
res = f_open(&fsrc, filename, FA_READ);
f_read(&fsrc, hdr_256, sizeof(hdr_256), &bytesread); // Read header
off = *((uint32_t *)&hdr_256[0x0A]); // offset to rasters
xx = *((uint32_t *)&hdr_256[0x12]); // X pixels
yy = *((uint32_t *)&hdr_256[0x16]); // Y pixels
for(i=0; i<256; i++) // Build palette conversion (+0x46 count?)
{
uint32_t pal;
f_read(&fsrc, &pal, 4, &bytesread); // Read palette B G R
// RRRRRRRRGGGGGGGGBBBBBBBB 8:8:8
// BBBBBGGGGGGRRRRR 5:6:5
//pal = ((pal & 0x00FC00) >> 5) | ((pal & 0xF80000) >> 19) | ((pal & 0x0000F8) << 8);
pal = ((pal & 0xF80000) >> 8) | ((pal & 0x00FC00) >> 5) | ((pal & 0x0000F8) >> 3);
//pal = ((pal & 0x1F0000) >> 8) | ((pal & 0x007E00) >> 5) | ((pal & 0x0000F8) >> 3);
w[i] = (uint16_t)pal;
}
f_lseek(&fsrc, off); // Seek to the data
for(y=0; y<yy; y++)
{
for(x=0; x<xx; x++)
{
uint8_t b;
f_read(&fsrc, &b, 1, &bytesread); // Read byte
LCD_SetPoint(y, x, w[b]); // Colour Map
} // x
} // y
f_close(&fsrc);
}
I repeated that function many times in main()
2022-05-10 03:55 AM
"It stopped in one file"
What, exactly, does that mean? What debugging have you done to find out what's going on?
"Is it related with internal SRAM of my STM32F103, and I'm running out of internal SRAM memory,"
Doesn't your IDE give you information on that?
eg, STM32CubeIDE:
"I read some bmp files"
So how big are those files? How does that compare to the amount of available RAM?
2022-05-10 05:23 AM
Hi Andrew,
Thanks for the reply,
The bmp file size is 320x240x16K colors,
Compiling result :
any clues ?
Regards,
Rixtronix
2022-05-10 05:33 AM
Again, what debugging have you done to find out what's going on?
"The bmp file size is 320x240x16K colors"
So have you done the basic maths?
320x240 = 76800 pixels.
For 16K colours, that must be at least 14 bits per pixel; presumably, you use 2 bytes?
So that's a total of 76800 x 2 = 153600 bytes = 150 K bytes for each file.
Are you trying to store all the files in memory at the same time?
2022-05-10 06:15 AM
Hi Andrew,
Thanks for the reply,
I read the file like this :
======
LCD_BMP_reading_256("test10.bmp");
delay_ms(2000);
=======
and next files,
The function is reading from sdcard and display to LCD,
Is the file being copied to RAM then displayed ?
I'm not sure yet,
Regards,
Rixtronix
2022-05-10 06:24 AM
It's your code - do you not know what it does?