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.
Fork of mbed-dev by
Diff: platform/mbed_retarget.cpp
- Revision:
- 174:b96e65c34a4d
- Parent:
- 172:7d866c31b3c5
- Child:
- 175:af195413fb11
--- a/platform/mbed_retarget.cpp Fri Sep 15 14:59:18 2017 +0100
+++ b/platform/mbed_retarget.cpp Mon Oct 02 15:33:19 2017 +0100
@@ -34,7 +34,12 @@
#include "platform/mbed_retarget.h"
#if defined(__ARMCC_VERSION)
+# if __ARMCC_VERSION >= 6010050
+# include <arm_compat.h>
+# endif
# include <rt_sys.h>
+# include <rt_misc.h>
+# include <stdint.h>
# define PREFIX(x) _sys##x
# define OPEN_MAX _SYS_OPEN
# ifdef __MICROLIB
@@ -334,6 +339,16 @@
#endif
}
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+extern "C" void PREFIX(_exit)(int return_code) {
+ while(1) {}
+}
+
+extern "C" void _ttywrch(int ch) {
+ serial_putc(&stdio_uart, ch);
+}
+#endif
+
#if defined(__ICCARM__)
extern "C" size_t __read (int fh, unsigned char *buffer, size_t length) {
#else
@@ -497,6 +512,26 @@
}
return size;
}
+
+extern "C" char Image$$RW_IRAM1$$ZI$$Limit[];
+
+extern "C" MBED_WEAK __value_in_regs struct __initial_stackheap _mbed_user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3)
+{
+ uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
+ uint32_t sp_limit = __current_sp();
+
+ zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned
+
+ struct __initial_stackheap r;
+ r.heap_base = zi_limit;
+ r.heap_limit = sp_limit;
+ return r;
+}
+
+extern "C" __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) {
+ return _mbed_user_setup_stackheap(R0, R1, R2, R3);
+}
+
#endif
@@ -843,7 +878,7 @@
}
int mbed_getc(std::FILE *_file){
-#if defined (__ICCARM__)
+#if defined(__IAR_SYSTEMS_ICC__ ) && (__VER__ < 8000000)
/*This is only valid for unbuffered streams*/
int res = std::fgetc(_file);
if (res>=0){
@@ -858,7 +893,7 @@
}
char* mbed_gets(char*s, int size, std::FILE *_file){
-#if defined (__ICCARM__)
+#if defined(__IAR_SYSTEMS_ICC__ ) && (__VER__ < 8000000)
/*This is only valid for unbuffered streams*/
char *str = fgets(s,size,_file);
if (str!=NULL){
@@ -884,6 +919,9 @@
extern "C" WEAK void __iar_file_Mtxdst(__iar_Rmtx *mutex) {}
extern "C" WEAK void __iar_file_Mtxlock(__iar_Rmtx *mutex) {}
extern "C" WEAK void __iar_file_Mtxunlock(__iar_Rmtx *mutex) {}
+#if defined(__IAR_SYSTEMS_ICC__ ) && (__VER__ >= 8000000)
+extern "C" WEAK void *__aeabi_read_tp (void) { return NULL ;}
+#endif
#elif defined(__CC_ARM)
// Do nothing
#elif defined (__GNUC__)
