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: STM32L452_Nucleo_ticker
Fork of mbed-dev by
Diff: platform/mbed_retarget.cpp
- Revision:
- 175:af195413fb11
- Parent:
- 174:b96e65c34a4d
- Child:
- 177:d650f5d4c87a
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;
+}
