
Untitled
By: a guest on
Apr 29th, 2012 | syntax:
None | size: 1.03 KB | hits: 17 | expires: Never
void memdump(u32 memstart, u32 memlen)
{
u8 data[BLOCKSIZE];
u32 i, sizeptr, multiple;
FIL dumpbin;
//mem1 size: 25165824 = 0x1800000
//block size: 4096 (memlen should be a multiple of this block size) = 0x1000
char *filename = (char*)malloc( 32 );
sprintf( filename, "/%.6smem1dump.bin", (char*)0x0 );
u32 fres = f_open( &dumpbin, filename, FA_READ|FA_WRITE|FA_OPEN_ALWAYS );
free( filename );
if( fres != FR_OK )
{
write32( 0x0D800070, 1 );
dbgprintf( "MEMDUMP: Could not open memdump.bin: %d\n", fres );
write32( 0x0D800070, 0 );
}
else
{
multiple = memlen/BLOCKSIZE;
if( memlen != multiple*BLOCKSIZE )
{
write32( 0x0D800070, 1 );
dbgprintf("MEMDUMP: Size of dump, %08X, is not multiple of %08X bytes\n", memlen, BLOCKSIZE );
write32( 0x0D800070, 0 );
}
else
{
for( i=0; i<multiple; i++ )
{
memcpy( data, (void *)(memstart+i*BLOCKSIZE), sizeof(data) );
f_write( &dumpbin, data, sizeof(data), &sizeptr );
}
}
f_close( &dumpbin );
}
}