Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: XRangePingPong XRange-LoRaWAN-lmic-app lora-transceiver
Diff: common/retarget.cpp
- Revision:
- 20:4263a77256ae
- Parent:
- 13:0645d8841f51
- Child:
- 23:8d50de55f208
diff -r 398f4c622e1b -r 4263a77256ae common/retarget.cpp
--- a/common/retarget.cpp Mon Aug 19 18:17:02 2013 +0300
+++ b/common/retarget.cpp Tue Sep 10 15:14:19 2013 +0300
@@ -163,7 +163,9 @@
} else {
FilePath path(name);
- if (path.isFile()) {
+ if (!path.exists())
+ return -1;
+ else if (path.isFile()) {
res = path.file();
} else {
FileSystemLike *fs = path.fileSystem();
@@ -425,3 +427,30 @@
mbed_main();
}
#endif
+
+// Provide implementation of _sbrk (low-level dynamic memory allocation
+// routine) for GCC_ARM which compares new heap pointer with MSP instead of
+// SP. This make it compatible with RTX RTOS thread stacks.
+#if defined(TOOLCHAIN_GCC_ARM)
+// Linker defined symbol used by _sbrk to indicate where heap should start.
+extern "C" int __end__;
+
+// Turn off the errno macro and use actual global variable instead.
+#undef errno
+extern "C" int errno;
+
+// Dynamic memory allocation related syscall.
+extern "C" caddr_t _sbrk(int incr) {
+ static unsigned char* heap = (unsigned char*)&__end__;
+ unsigned char* prev_heap = heap;
+ unsigned char* new_heap = heap + incr;
+
+ if (new_heap >= (unsigned char*)__get_MSP()) {
+ errno = ENOMEM;
+ return (caddr_t)-1;
+ }
+
+ heap = new_heap;
+ return (caddr_t) prev_heap;
+}
+#endif