From 414c1898c50335354de13be8e2aa986735636bf4 Mon Sep 17 00:00:00 2001 From: yueling hu <502966985@qq.com> Date: Tue, 20 May 2025 08:42:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0bitops=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E5=A2=9E=E9=87=8F=E6=97=B6=E9=97=B4=E8=8E=B7?= =?UTF-8?q?=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/rtdef.h | 27 +++++++++++++++++++++++++++ include/rtthread.h | 1 + src/clock.c | 18 ++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/include/rtdef.h b/include/rtdef.h index 401a47be27c..b0c13796c31 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -1450,6 +1450,33 @@ typedef struct rt_channel *rt_channel_t; /**@}*/ #endif /* RT_USING_DEVICE */ +/* BITOPS */ + +#if defined (ARCH_CPU_64BIT) +#define BITS_PER_LONG 64 +#else +#define BITS_PER_LONG 32 +#endif +#define BITS_PER_LONG_LONG 64 + +#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) + +#define BIT(nr) (1UL << (nr)) +#define BIT_ULL(nr) (1ULL << (nr)) +#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) +#define BIT_WORD(nr) ((nr) / BITS_PER_LONG) +#define BIT_ULL_MASK(nr) (1ULL << ((nr) % BITS_PER_LONG_LONG)) +#define BIT_ULL_WORD(nr) ((nr) / BITS_PER_LONG_LONG) +#define BITS_PER_BYTE 8 +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) + +#define GENMASK(h, l) \ + (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) + +#define GENMASK_ULL(h, l) \ + (((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) + + #ifdef __cplusplus } #endif diff --git a/include/rtthread.h b/include/rtthread.h index a1c0e77a038..c08edc30433 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -98,6 +98,7 @@ void rt_object_put_sethook(void (*hook)(struct rt_object *object)); * clock & timer interface */ rt_tick_t rt_tick_get(void); +rt_tick_t rt_delta_tick_get(rt_tick_t last_time); void rt_tick_set(rt_tick_t tick); void rt_tick_increase(void); void rt_tick_increase_tick(rt_tick_t tick); diff --git a/src/clock.c b/src/clock.c index 3481f22c61c..1d8bc1d59ee 100644 --- a/src/clock.c +++ b/src/clock.c @@ -73,6 +73,24 @@ rt_tick_t rt_tick_get(void) } RTM_EXPORT(rt_tick_get); +/** + * @brief This function will return delta tick from last_time. + * + * @param last_time to consider + * + * @return Return delta tick. + */ + rt_tick_t rt_delta_tick_get(rt_tick_t last_time) + { + rt_tick_t tnow = rt_tick_get(); + if (tnow >= last_time) { + return (tnow - last_time); + } else { + return (UINT32_MAX - last_time + tnow + 1); + } + } + RTM_EXPORT(rt_delta_tick_get); + /** * @brief This function will set current tick. * From 116b2aebb2293f4704e770e5462cb63953af3688 Mon Sep 17 00:00:00 2001 From: htl5241 <50161112+htl5241@users.noreply.github.com> Date: Tue, 20 May 2025 12:05:08 +0800 Subject: [PATCH 2/2] Update clock.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改 --- src/clock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clock.c b/src/clock.c index 1d8bc1d59ee..7a42f80ff95 100644 --- a/src/clock.c +++ b/src/clock.c @@ -86,7 +86,7 @@ RTM_EXPORT(rt_tick_get); if (tnow >= last_time) { return (tnow - last_time); } else { - return (UINT32_MAX - last_time + tnow + 1); + return (RT_TICK_MAX - last_time + tnow + 1); } } RTM_EXPORT(rt_delta_tick_get);