Skip to content

Commit 20013d7

Browse files
committed
RTOS: SysTimer: Update tests
Use a mock ticker object instead of the lp_ticker for update_tick() and get_time() tests.
1 parent 044eb1e commit 20013d7

File tree

3 files changed

+79
-6
lines changed

3 files changed

+79
-6
lines changed

TESTS/mbedmicro-rtos-mbed/systimer/main.cpp

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "greentea-client/test_env.h"
2626
#include "unity.h"
2727
#include "utest.h"
28+
#include "ticker_api.h"
2829

2930
extern "C" {
3031
#include "rtx_lib.h"
@@ -56,6 +57,11 @@ class SysTimerTest: public rtos::internal::SysTimer {
5657
{
5758
}
5859

60+
SysTimerTest(const ticker_data_t *data) :
61+
SysTimer(data), _sem(0, 1)
62+
{
63+
}
64+
5965
virtual ~SysTimerTest()
6066
{
6167
}
@@ -66,6 +72,65 @@ class SysTimerTest: public rtos::internal::SysTimer {
6672
}
6773
};
6874

75+
timestamp_t mock_ticker_timestamp;
76+
77+
void mock_ticker_init()
78+
{
79+
}
80+
81+
uint32_t mock_ticker_read()
82+
{
83+
return mock_ticker_timestamp;
84+
}
85+
86+
void mock_ticker_disable_interrupt()
87+
{
88+
}
89+
90+
void mock_ticker_clear_interrupt()
91+
{
92+
}
93+
94+
void mock_ticker_set_interrupt(timestamp_t timestamp)
95+
{
96+
}
97+
98+
void mock_ticker_fire_interrupt()
99+
{
100+
}
101+
102+
const ticker_info_t *mock_ticker_get_info()
103+
{
104+
static const ticker_info_t mock_ticker_info = {
105+
.frequency = 1000000,
106+
.bits = 32
107+
};
108+
return &mock_ticker_info;
109+
}
110+
111+
ticker_interface_t mock_ticker_interface = {
112+
.init = mock_ticker_init,
113+
.read = mock_ticker_read,
114+
.disable_interrupt = mock_ticker_disable_interrupt,
115+
.clear_interrupt = mock_ticker_clear_interrupt,
116+
.set_interrupt = mock_ticker_set_interrupt,
117+
.fire_interrupt = mock_ticker_fire_interrupt,
118+
.get_info = mock_ticker_get_info,
119+
};
120+
121+
ticker_event_queue_t mock_ticker_event_queue;
122+
123+
const ticker_data_t mock_ticker_data = {
124+
.interface = &mock_ticker_interface,
125+
.queue = &mock_ticker_event_queue
126+
};
127+
128+
void mock_ticker_reset()
129+
{
130+
mock_ticker_timestamp = 0;
131+
mock_ticker_event_queue = {0};
132+
}
133+
69134
/** Test tick count is zero upon creation
70135
*
71136
* Given a SysTimer
@@ -91,14 +156,14 @@ void test_created_with_zero_tick_count(void)
91156
*/
92157
void test_update_tick(void)
93158
{
94-
SysTimerTest st;
159+
mock_ticker_reset();
160+
SysTimerTest st(&mock_ticker_data);
95161
st.suspend(TEST_TICKS * 2);
96162
TEST_ASSERT_EQUAL_UINT32(0, st.resume());
97163
TEST_ASSERT_EQUAL_UINT32(0, st.get_tick());
98-
us_timestamp_t test_ticks_elapsed_ts = st.get_time() + DELAY_US;
99164

100165
st.suspend(TEST_TICKS * 2);
101-
while (st.get_time() <= test_ticks_elapsed_ts) {}
166+
mock_ticker_timestamp = DELAY_US;
102167
TEST_ASSERT_EQUAL_UINT32(TEST_TICKS - 1, st.resume());
103168
TEST_ASSERT_EQUAL_UINT32(TEST_TICKS - 1, st.get_tick());
104169

@@ -115,12 +180,13 @@ void test_update_tick(void)
115180
*/
116181
void test_get_time(void)
117182
{
118-
SysTimerTest st;
183+
mock_ticker_reset();
184+
SysTimerTest st(&mock_ticker_data);
119185
us_timestamp_t t1 = st.get_time();
120186

121-
wait_us(DELAY_US);
187+
mock_ticker_timestamp = DELAY_US;
122188
us_timestamp_t t2 = st.get_time();
123-
TEST_ASSERT_UINT64_WITHIN(DELAY_DELTA_US, DELAY_US, t2 - t1);
189+
TEST_ASSERT_EQUAL_UINT64(DELAY_US, t2 - t1);
124190
}
125191

126192
/** Test cancel_tick

rtos/TARGET_CORTEX/SysTimer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ SysTimer::SysTimer() :
5050
_suspended = false;
5151
}
5252

53+
SysTimer::SysTimer(const ticker_data_t *data) :
54+
TimerEvent(data), _start_time(0), _tick(0)
55+
{
56+
_start_time = ticker_read_us(_ticker_data);
57+
}
58+
5359
void SysTimer::setup_irq()
5460
{
5561
#if (defined(NO_SYSTICK))

rtos/TARGET_CORTEX/SysTimer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class SysTimer: private mbed::TimerEvent, private mbed::NonCopyable<SysTimer> {
4949
public:
5050

5151
SysTimer();
52+
SysTimer(const ticker_data_t *data);
5253
virtual ~SysTimer();
5354

5455
/**

0 commit comments

Comments
 (0)