From d88e0eac026e2bd1599510bb6e96fccc4082dd2a Mon Sep 17 00:00:00 2001 From: dongjiuzhu1 Date: Mon, 22 Jul 2024 12:59:40 +0800 Subject: [PATCH] drivers/sensors: Fixed the overflow problem of uint32_t subtracting large from small. Signed-off-by: likun17 --- drivers/sensors/sensor.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/sensors/sensor.c b/drivers/sensors/sensor.c index 389085dd11..6fa359e0d6 100644 --- a/drivers/sensors/sensor.c +++ b/drivers/sensors/sensor.c @@ -399,7 +399,7 @@ static void sensor_generate_timing(FAR struct sensor_upperhalf_s *upper, static bool sensor_is_updated(FAR struct sensor_upperhalf_s *upper, FAR struct sensor_user_s *user) { - long delta = upper->state.generation - user->state.generation; + long delta = (long long)upper->state.generation - user->state.generation; if (delta <= 0) { @@ -431,7 +431,7 @@ static void sensor_catch_up(FAR struct sensor_upperhalf_s *upper, long delta; circbuf_peek(&upper->timing, &generation, TIMING_BUF_ESIZE); - delta = generation - user->state.generation; + delta = (long long)generation - user->state.generation; if (delta > 0) { user->bufferpos = upper->timing.tail / TIMING_BUF_ESIZE;