mbed library sources. Supersedes mbed-src.
Dependents: SPIne CH_Communicatuin_Test CH_Communicatuin_Test2 MCP_SPIne ... more
Fork of mbed-dev-f303 by
Diff: platform/mbed_retarget.cpp
- Revision:
- 175:af195413fb11
- Parent:
- 174:b96e65c34a4d
diff -r b96e65c34a4d -r af195413fb11 platform/mbed_retarget.cpp --- a/platform/mbed_retarget.cpp Mon Oct 02 15:33:19 2017 +0100 +++ b/platform/mbed_retarget.cpp Wed Oct 11 12:45:49 2017 +0100 @@ -13,9 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include <time.h> #include "platform/platform.h" #include "platform/FilePath.h" #include "hal/serial_api.h" +#include "hal/us_ticker_api.h" #include "platform/mbed_toolchain.h" #include "platform/mbed_semihost_api.h" #include "platform/mbed_interface.h" @@ -24,6 +26,7 @@ #include "platform/mbed_error.h" #include "platform/mbed_stats.h" #include "platform/mbed_critical.h" +#include "platform/PlatformMutex.h" #include <stdlib.h> #include <string.h> #include <limits.h> @@ -33,6 +36,8 @@ #include <errno.h> #include "platform/mbed_retarget.h" +static SingletonPtr<PlatformMutex> _mutex; + #if defined(__ARMCC_VERSION) # if __ARMCC_VERSION >= 6010050 # include <arm_compat.h> @@ -446,6 +451,7 @@ #if defined(__ARMCC_VERSION) int whence = SEEK_SET; #endif + if (fh < 3) { errno = ESPIPE; return -1; @@ -536,13 +542,21 @@ #if !defined(__ARMCC_VERSION) && !defined(__ICCARM__) -extern "C" int _fstat(int fd, struct stat *st) { - if (fd < 3) { +extern "C" int _fstat(int fh, struct stat *st) { + if (fh < 3) { st->st_mode = S_IFCHR; return 0; } - errno = EBADF; - return -1; + + FileHandle* fhc = filehandles[fh-3]; + if (fhc == NULL) { + errno = EBADF; + return -1; + } + + st->st_mode = fhc->isatty() ? S_IFCHR : S_IFREG; + st->st_size = fhc->size(); + return 0; } #endif @@ -1008,6 +1022,16 @@ return buffer; } +void *operator new(std::size_t count, const std::nothrow_t& tag) +{ + return malloc(count); +} + +void *operator new[](std::size_t count, const std::nothrow_t& tag) +{ + return malloc(count); +} + void operator delete(void *ptr) { if (ptr != NULL) { @@ -1020,3 +1044,22 @@ free(ptr); } } + +/* @brief standard c library clock() function. + * + * This function returns the number of clock ticks elapsed since the start of the program. + * + * @note Synchronization level: Thread safe + * + * @return + * the number of clock ticks elapsed since the start of the program. + * + * */ +extern "C" clock_t clock() +{ + _mutex->lock(); + clock_t t = ticker_read(get_us_ticker_data()); + t /= 1000000 / CLOCKS_PER_SEC; // convert to processor time + _mutex->unlock(); + return t; +}