Skip to main content
antonius
Associate III
May 10, 2022
Question

BMP reading stop in the loop ?

  • May 10, 2022
  • 5 replies
  • 1894 views

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()

This topic has been closed for replies.

5 replies

Andrew Neil
Super User
May 10, 2022

"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:

0693W00000Nph0cQAB.png 

"I read some bmp files"

So how big are those files? How does that compare to the amount of available RAM?

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
antonius
antoniusAuthor
Associate III
May 10, 2022

Hi Andrew,

Thanks for the reply,

The bmp file size is 320x240x16K colors,

Compiling result :

0693W00000NphKrQAJ.pngany clues ?

Regards,

Rixtronix

Andrew Neil
Super User
May 10, 2022

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?

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
antonius
antoniusAuthor
Associate III
May 10, 2022

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