|
|
@ -26,21 +26,24 @@ |
|
|
|
/** Amount of free RAM
|
|
|
|
* \return The number of free bytes. |
|
|
|
*/ |
|
|
|
#ifdef __arm__ |
|
|
|
extern "C" char* sbrk(int incr); |
|
|
|
int SdFatUtil::FreeRam() { |
|
|
|
extern int __bss_end; |
|
|
|
extern int* __brkval; |
|
|
|
int free_memory; |
|
|
|
if (reinterpret_cast<int>(__brkval) == 0) { |
|
|
|
// if no heap use from end of bss section
|
|
|
|
free_memory = reinterpret_cast<int>(&free_memory) |
|
|
|
- reinterpret_cast<int>(&__bss_end); |
|
|
|
} else { |
|
|
|
// use from top of stack to heap
|
|
|
|
free_memory = reinterpret_cast<int>(&free_memory) |
|
|
|
- reinterpret_cast<int>(__brkval); |
|
|
|
char top; |
|
|
|
return &top - reinterpret_cast<char*>(sbrk(0)); |
|
|
|
} |
|
|
|
return free_memory; |
|
|
|
#else // __arm__
|
|
|
|
extern char *__brkval; |
|
|
|
extern char __bss_end; |
|
|
|
/** Amount of free RAM
|
|
|
|
* \return The number of free bytes. |
|
|
|
*/ |
|
|
|
int SdFatUtil::FreeRam() { |
|
|
|
char top; |
|
|
|
return __brkval ? &top - __brkval : &top - &__bss_end; |
|
|
|
} |
|
|
|
#endif // __arm
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
/** %Print a string in flash memory.
|
|
|
|
* |
|
|
|