From bf2856a0e14daed33e1055ab5f24393d53e40250 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sat, 2 Mar 2013 02:11:48 +0100 Subject: digital/ucoolib/ucoolib/arch: add yield to save CPU cycles on host --- digital/ucoolib/ucoolib/arch/arch.host.cc | 13 +++++++++++++ digital/ucoolib/ucoolib/arch/arch_common.arm.hh | 6 ++++++ digital/ucoolib/ucoolib/arch/arch_common.hh | 8 ++++++++ 3 files changed, 27 insertions(+) (limited to 'digital/ucoolib') diff --git a/digital/ucoolib/ucoolib/arch/arch.host.cc b/digital/ucoolib/ucoolib/arch/arch.host.cc index 1e242544..ed8c503e 100644 --- a/digital/ucoolib/ucoolib/arch/arch.host.cc +++ b/digital/ucoolib/ucoolib/arch/arch.host.cc @@ -26,6 +26,8 @@ #include #include +#include +#include namespace ucoo { @@ -60,4 +62,15 @@ halt_perror () abort (); } +void +yield () +{ + // Do a small delay. + struct timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 100 * 1000 * 1000; + while (nanosleep (&ts, &ts) == -1 && errno == EINTR) + ; +} + } // namespace ucoo diff --git a/digital/ucoolib/ucoolib/arch/arch_common.arm.hh b/digital/ucoolib/ucoolib/arch/arch_common.arm.hh index 4cfeebe6..6fff9a9f 100644 --- a/digital/ucoolib/ucoolib/arch/arch_common.arm.hh +++ b/digital/ucoolib/ucoolib/arch/arch_common.arm.hh @@ -48,6 +48,12 @@ irq_restore (irq_flags_t flags) : "memory", "cc"); } +inline void +yield () +{ + // Nothing, the CPU is ours! +} + } // namespace ucoo #endif // ucoolib_arch_arch_common_arm_hh diff --git a/digital/ucoolib/ucoolib/arch/arch_common.hh b/digital/ucoolib/ucoolib/arch/arch_common.hh index 2b5b71c7..3a3b89af 100644 --- a/digital/ucoolib/ucoolib/arch/arch_common.hh +++ b/digital/ucoolib/ucoolib/arch/arch_common.hh @@ -32,4 +32,12 @@ # error "not implemented for this target" #endif +namespace ucoo { + +/// Give some time to other tasks when running in a tight loop. +void +yield (); + +} // namespace ucoo + #endif // ucoolib_arch_arch_common_hh -- cgit v1.2.3