Skip to content

Commit

Permalink
tests: benchmarks: power_consumption: Allow controlled thread suspension
Browse files Browse the repository at this point in the history
Test was suspending test thread from the timer interrupt at random
(but periodic) point. Some drivers which are tested in that framework
handles power management in the thread context. Randomly suspending
the test thread could lead to a case where driver did not finish
requested operation and system goes to s2ram in the middle of the
driver operation. Extending the test framework to allow more
controlled thread suspension. Timer can indicate to the thread that
is shall be suspended and thread calls self suspension when ready.

Signed-off-by: Krzysztof Chruściński <[email protected]>
  • Loading branch information
nordic-krch committed Jan 13, 2025
1 parent 118ee39 commit 2de8734
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion tests/benchmarks/power_consumption/common/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_ALIAS(led2), gpios);
static bool state = true;
extern void thread_definition(void);

/* Some tests require that test thread controls when the moment when it is
* suspended. In that case test implements this function and returns true to
* indicated that test thread will take case of the suspension and it can
* be skipped in the common code.
*/
__weak bool self_suspend_req(void)
{
return false;
}

K_THREAD_DEFINE(thread_id, 500, thread_definition, NULL, NULL, NULL,
5, 0, 0);

Expand All @@ -24,7 +34,9 @@ void timer_handler(struct k_timer *dummy)
} else {
state = true;
gpio_pin_set_dt(&led, 0);
k_thread_suspend(thread_id);
if (self_suspend_req() == false) {
k_thread_suspend(thread_id);
}
}
}

Expand Down

0 comments on commit 2de8734

Please sign in to comment.