2525#include " rtos/Kernel.h"
2626#include " mbed.h"
2727
28+ using namespace std ::chrono_literals;
2829
2930using utest::v1::Case;
3031
3132#define TEST_REPEAT_COUNT 1000
32- #define NUM_WAIT_TICKS 1000
33+ #define NUM_WAIT_TICKS rtos::Kernel::Clock::duration (1s)
3334
34- // all in [us]
35- #define ONE_SECOND 1000000
36- #define SMALL_DELTA 1500 // 0.15%
37- #define BIG_DELTA 15000 // 1.5%
35+ #define ONE_SECOND Timer::duration (1s)
36+ #define SMALL_DELTA Timer::duration (1500us) // 0.15%
37+ #define BIG_DELTA Timer::duration (15000us) // 1.5%
3838
3939/* * Test if kernel ticker frequency is 1kHz
4040
@@ -46,22 +46,23 @@ void test_frequency()
4646{
4747 uint32_t freq = osKernelGetTickFreq ();
4848 TEST_ASSERT_EQUAL_UINT32_MESSAGE (1000 , freq, " Expected SysTick frequency is 1kHz" );
49+ TEST_ASSERT_TRUE_MESSAGE ((std::ratio_equal<rtos::Kernel::Clock::period, std::milli>::value), " Expected Kernel::Clock frequency is 1kHz" );
4950}
5051
5152/* * Test if kernel ticker increments by one
5253
5354 Given a RTOS kernel ticker
54- When perform subsequent calls of @a rtos::Kernel::get_ms_count
55+ When perform subsequent calls of @a rtos::Kernel::Clock::now
5556 Then subsequent reads should not differ by more than one
5657 */
5758void test_increment (void )
5859{
5960 for (uint32_t i = 0 ; i < TEST_REPEAT_COUNT; i++) {
60- const uint64_t start = rtos::Kernel::get_ms_count ();
61+ auto start = rtos::Kernel::Clock::now ();
6162 while (true ) {
62- uint64_t diff = rtos::Kernel::get_ms_count () - start;
63- if (diff != 0 ) {
64- TEST_ASSERT_EQUAL_UINT64 (1 , diff);
63+ rtos::Kernel::Clock::duration diff = rtos::Kernel::Clock::now () - start;
64+ if (diff. count () != 0 ) {
65+ TEST_ASSERT_EQUAL_INT64 (1 , diff. count () );
6566 break ;
6667 }
6768 }
@@ -71,35 +72,35 @@ void test_increment(void)
7172/* * Test if kernel ticker interval is 1ms
7273
7374 Given a RTOS kernel ticker
74- When perform subsequent calls of @a rtos::Kernel::get_ms_count
75+ When perform subsequent calls of @a rtos::Kernel::Clock::now
7576 Then the ticker interval should be 1ms
7677 */
7778void test_interval ()
7879{
79- uint64_t start, stop;
80+ Kernel::Clock::time_point start, stop;
8081 Timer timer;
8182
82- start = rtos::Kernel::get_ms_count ();
83+ start = rtos::Kernel::Clock::now ();
8384 // wait for tick
8485 do {
85- stop = rtos::Kernel::get_ms_count ();
86- } while (( stop - start) == 0 );
86+ stop = rtos::Kernel::Clock::now ();
87+ } while (stop == start );
8788 timer.start ();
8889 start = stop;
8990
9091 // wait for NUM_WAIT_TICKS ticks
9192 do {
92- stop = rtos::Kernel::get_ms_count ();
93+ stop = rtos::Kernel::Clock::now ();
9394 } while ((stop - start) != NUM_WAIT_TICKS);
9495 timer.stop ();
95- TEST_ASSERT_EQUAL_UINT64 (NUM_WAIT_TICKS, (stop - start));
96+ TEST_ASSERT_EQUAL_INT64 (NUM_WAIT_TICKS. count () , (stop - start). count ( ));
9697
9798#if defined(NO_SYSTICK) || defined(MBED_TICKLESS)
9899 // On targets with NO_SYSTICK/MBED_TICKLESS enabled, systick is emulated by lp_ticker what makes it less accurate
99100 // for more details https://os.mbed.com/docs/latest/reference/tickless.html
100- TEST_ASSERT_UINT64_WITHIN (BIG_DELTA, ONE_SECOND, timer.read_high_resolution_us ());
101+ TEST_ASSERT_INT64_WITHIN (BIG_DELTA. count () , ONE_SECOND. count () , timer.read_duration (). count ());
101102#else
102- TEST_ASSERT_UINT64_WITHIN (SMALL_DELTA, ONE_SECOND, timer.read_high_resolution_us ());
103+ TEST_ASSERT_INT64_WITHIN (SMALL_DELTA. count () , ONE_SECOND. count () , timer.read_duration (). count ());
103104#endif
104105}
105106
0 commit comments