2424#include " rtos/Kernel.h"
2525#include " mbed.h"
2626
27+ using namespace std ::chrono_literals;
2728
2829using utest::v1::Case;
2930
3031#define TEST_REPEAT_COUNT 1000
31- #define NUM_WAIT_TICKS 1000
32+ #define NUM_WAIT_TICKS rtos::Kernel::Clock::duration (1s)
3233
33- // all in [us]
34- #define ONE_SECOND 1000000
35- #define SMALL_DELTA 1500 // 0.15%
36- #define BIG_DELTA 15000 // 1.5%
34+ #define ONE_SECOND Timer::duration (1s)
35+ #define SMALL_DELTA Timer::duration (1500us) // 0.15%
36+ #define BIG_DELTA Timer::duration (15000us) // 1.5%
3737
3838/* * Test if kernel ticker frequency is 1kHz
3939
@@ -45,22 +45,23 @@ void test_frequency()
4545{
4646 uint32_t freq = osKernelGetTickFreq ();
4747 TEST_ASSERT_EQUAL_UINT32_MESSAGE (1000 , freq, " Expected SysTick frequency is 1kHz" );
48+ TEST_ASSERT_TRUE_MESSAGE ((std::ratio_equal<rtos::Kernel::Clock::period, std::milli>::value), " Expected Kernel::Clock frequency is 1kHz" );
4849}
4950
5051/* * Test if kernel ticker increments by one
5152
5253 Given a RTOS kernel ticker
53- When perform subsequent calls of @a rtos::Kernel::get_ms_count
54+ When perform subsequent calls of @a rtos::Kernel::Clock::now
5455 Then subsequent reads should not differ by more than one
5556 */
5657void test_increment (void )
5758{
5859 for (uint32_t i = 0 ; i < TEST_REPEAT_COUNT; i++) {
59- const uint64_t start = rtos::Kernel::get_ms_count ();
60+ auto start = rtos::Kernel::Clock::now ();
6061 while (true ) {
61- uint64_t diff = rtos::Kernel::get_ms_count () - start;
62- if (diff != 0 ) {
63- TEST_ASSERT_EQUAL_UINT64 (1 , diff);
62+ rtos::Kernel::Clock::duration diff = rtos::Kernel::Clock::now () - start;
63+ if (diff. count () != 0 ) {
64+ TEST_ASSERT_EQUAL_INT64 (1 , diff. count () );
6465 break ;
6566 }
6667 }
@@ -70,35 +71,35 @@ void test_increment(void)
7071/* * Test if kernel ticker interval is 1ms
7172
7273 Given a RTOS kernel ticker
73- When perform subsequent calls of @a rtos::Kernel::get_ms_count
74+ When perform subsequent calls of @a rtos::Kernel::Clock::now
7475 Then the ticker interval should be 1ms
7576 */
7677void test_interval ()
7778{
78- uint64_t start, stop;
79+ Kernel::Clock::time_point start, stop;
7980 Timer timer;
8081
81- start = rtos::Kernel::get_ms_count ();
82+ start = rtos::Kernel::Clock::now ();
8283 // wait for tick
8384 do {
84- stop = rtos::Kernel::get_ms_count ();
85- } while (( stop - start) == 0 );
85+ stop = rtos::Kernel::Clock::now ();
86+ } while (stop == start );
8687 timer.start ();
8788 start = stop;
8889
8990 // wait for NUM_WAIT_TICKS ticks
9091 do {
91- stop = rtos::Kernel::get_ms_count ();
92+ stop = rtos::Kernel::Clock::now ();
9293 } while ((stop - start) != NUM_WAIT_TICKS);
9394 timer.stop ();
94- TEST_ASSERT_EQUAL_UINT64 (NUM_WAIT_TICKS, (stop - start));
95+ TEST_ASSERT_EQUAL_INT64 (NUM_WAIT_TICKS. count () , (stop - start). count ( ));
9596
9697#if defined(NO_SYSTICK) || defined(MBED_TICKLESS)
9798 // On targets with NO_SYSTICK/MBED_TICKLESS enabled, systick is emulated by lp_ticker what makes it less accurate
9899 // for more details https://os.mbed.com/docs/latest/reference/tickless.html
99- TEST_ASSERT_UINT64_WITHIN (BIG_DELTA, ONE_SECOND, timer.read_high_resolution_us ());
100+ TEST_ASSERT_INT64_WITHIN (BIG_DELTA. count () , ONE_SECOND. count () , timer.read_duration (). count ());
100101#else
101- TEST_ASSERT_UINT64_WITHIN (SMALL_DELTA, ONE_SECOND, timer.read_high_resolution_us ());
102+ TEST_ASSERT_INT64_WITHIN (SMALL_DELTA. count () , ONE_SECOND. count () , timer.read_duration (). count ());
102103#endif
103104}
104105
0 commit comments