The official mbed C/C SDK provides the software platform and libraries to build your applications.

Fork of mbed by mbed official

Committer:
ldyz
Date:
Fri Jul 05 13:16:13 2013 +0000
Revision:
64:75c1708b266b
Parent:
61:5e5da4a5990b
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 44:24d45a770a51 1 /* mbed Microcontroller Library
emilmont 54:71b101360fb9 2 * Copyright (c) 2006-2013 ARM Limited
emilmont 44:24d45a770a51 3 *
emilmont 59:0883845fe643 4 * Licensed under the Apache License, Version 2.0 (the "License");
emilmont 59:0883845fe643 5 * you may not use this file except in compliance with the License.
emilmont 59:0883845fe643 6 * You may obtain a copy of the License at
emilmont 59:0883845fe643 7 *
emilmont 59:0883845fe643 8 * http://www.apache.org/licenses/LICENSE-2.0
emilmont 44:24d45a770a51 9 *
emilmont 59:0883845fe643 10 * Unless required by applicable law or agreed to in writing, software
emilmont 59:0883845fe643 11 * distributed under the License is distributed on an "AS IS" BASIS,
emilmont 59:0883845fe643 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
emilmont 59:0883845fe643 13 * See the License for the specific language governing permissions and
emilmont 59:0883845fe643 14 * limitations under the License.
emilmont 44:24d45a770a51 15 */
emilmont 44:24d45a770a51 16 #ifndef MBED_SEMIHOST_H
emilmont 44:24d45a770a51 17 #define MBED_SEMIHOST_H
emilmont 44:24d45a770a51 18
emilmont 44:24d45a770a51 19 #include "device.h"
emilmont 44:24d45a770a51 20 #include "toolchain.h"
emilmont 44:24d45a770a51 21
emilmont 44:24d45a770a51 22 #ifdef __cplusplus
emilmont 44:24d45a770a51 23 extern "C" {
emilmont 44:24d45a770a51 24 #endif
emilmont 44:24d45a770a51 25
emilmont 55:d722ed6a4237 26 #if DEVICE_SEMIHOST
emilmont 57:0480438fc29c 27
emilmont 44:24d45a770a51 28 #ifndef __CC_ARM
emilmont 44:24d45a770a51 29
emilmont 57:0480438fc29c 30 #if defined(__ICCARM__)
emilmont 57:0480438fc29c 31 inline int __semihost(int reason, const void *arg) {
emilmont 57:0480438fc29c 32 return __semihosting(reason, (void*)arg);
emilmont 57:0480438fc29c 33 }
emilmont 57:0480438fc29c 34 #else
emilmont 57:0480438fc29c 35
emilmont 44:24d45a770a51 36 #ifdef __thumb__
emilmont 55:d722ed6a4237 37 # define AngelSWI 0xAB
emilmont 55:d722ed6a4237 38 # define AngelSWIInsn "bkpt"
emilmont 55:d722ed6a4237 39 # define AngelSWIAsm bkpt
emilmont 44:24d45a770a51 40 #else
emilmont 55:d722ed6a4237 41 # define AngelSWI 0x123456
emilmont 55:d722ed6a4237 42 # define AngelSWIInsn "swi"
emilmont 55:d722ed6a4237 43 # define AngelSWIAsm swi
emilmont 44:24d45a770a51 44 #endif
emilmont 44:24d45a770a51 45
emilmont 61:5e5da4a5990b 46 static inline int __semihost(int reason, const void *arg) {
emilmont 44:24d45a770a51 47 int value;
emilmont 59:0883845fe643 48
emilmont 57:0480438fc29c 49 asm volatile (
emilmont 57:0480438fc29c 50 "mov r0, %1" "\n\t"
emilmont 57:0480438fc29c 51 "mov r1, %2" "\n\t"
emilmont 57:0480438fc29c 52 AngelSWIInsn " %a3" "\n\t"
emilmont 57:0480438fc29c 53 "mov %0, r0"
emilmont 57:0480438fc29c 54 : "=r" (value) /* output operands */
emilmont 57:0480438fc29c 55 : "r" (reason), "r" (arg), "i" (AngelSWI) /* input operands */
emilmont 57:0480438fc29c 56 : "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc" /* list of clobbered registers */
emilmont 57:0480438fc29c 57 );
emilmont 59:0883845fe643 58
emilmont 44:24d45a770a51 59 return value;
emilmont 44:24d45a770a51 60 }
emilmont 57:0480438fc29c 61 #endif
emilmont 44:24d45a770a51 62 #endif
emilmont 44:24d45a770a51 63
emilmont 44:24d45a770a51 64 #if DEVICE_LOCALFILESYSTEM
emilmont 44:24d45a770a51 65 FILEHANDLE semihost_open(const char* name, int openmode);
emilmont 44:24d45a770a51 66 int semihost_close (FILEHANDLE fh);
emilmont 44:24d45a770a51 67 int semihost_read (FILEHANDLE fh, unsigned char* buffer, unsigned int length, int mode);
emilmont 44:24d45a770a51 68 int semihost_write (FILEHANDLE fh, const unsigned char* buffer, unsigned int length, int mode);
emilmont 44:24d45a770a51 69 int semihost_ensure(FILEHANDLE fh);
emilmont 44:24d45a770a51 70 long semihost_flen (FILEHANDLE fh);
emilmont 44:24d45a770a51 71 int semihost_seek (FILEHANDLE fh, long position);
emilmont 44:24d45a770a51 72 int semihost_istty (FILEHANDLE fh);
emilmont 44:24d45a770a51 73
emilmont 44:24d45a770a51 74 int semihost_remove(const char *name);
emilmont 44:24d45a770a51 75 int semihost_rename(const char *old_name, const char *new_name);
emilmont 44:24d45a770a51 76 #endif
emilmont 44:24d45a770a51 77
emilmont 44:24d45a770a51 78 int semihost_uid(char *uid);
emilmont 44:24d45a770a51 79 int semihost_reset(void);
emilmont 44:24d45a770a51 80 int semihost_vbus(void);
emilmont 44:24d45a770a51 81 int semihost_powerdown(void);
emilmont 44:24d45a770a51 82 int semihost_exit(void);
emilmont 44:24d45a770a51 83
emilmont 44:24d45a770a51 84 int semihost_connected(void);
emilmont 44:24d45a770a51 85 int semihost_disabledebug(void);
emilmont 44:24d45a770a51 86
emilmont 55:d722ed6a4237 87 #endif
emilmont 55:d722ed6a4237 88
emilmont 44:24d45a770a51 89 #ifdef __cplusplus
emilmont 44:24d45a770a51 90 }
emilmont 44:24d45a770a51 91 #endif
emilmont 44:24d45a770a51 92
emilmont 44:24d45a770a51 93 #endif