Skip to content

Commit 2955a0a

Browse files
authored
Merge pull request #5063 from 0xc0170/fix_lpticker_test
Fixing lp ticker and sleep manager tests
2 parents cab660d + cf8d6c4 commit 2955a0a

File tree

7 files changed

+35
-14
lines changed

7 files changed

+35
-14
lines changed

TESTS/mbed_drivers/lp_timeout/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,13 @@ void lp_timeout_1s_sleep(void)
7272
{
7373
complete = false;
7474

75+
sleep_manager_lock_deep_sleep();
7576
timestamp_t start = us_ticker_read();
7677
lpt.attach(&cb_done, 1);
7778
sleep();
7879
while (!complete);
7980
timestamp_t end = us_ticker_read();
81+
sleep_manager_unlock_deep_sleep();
8082

8183
TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, end - start);
8284
TEST_ASSERT_TRUE(complete);

TESTS/mbed_drivers/timeout/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@
3636

3737
using namespace utest::v1;
3838

39-
#define ONE_MILLI_SEC 1000
39+
#define PERIOD_US 10000
4040

4141
volatile int ticker_count = 0;
4242
volatile uint32_t callback_trigger_count = 0;
4343
static const int test_timeout = 240;
4444
Timeout timeout;
4545

4646
void set_incremeant_count() {
47-
timeout.attach_us(set_incremeant_count, ONE_MILLI_SEC);
47+
timeout.attach_us(set_incremeant_count, PERIOD_US);
4848
++callback_trigger_count;
4949
}
5050

@@ -56,19 +56,19 @@ void test_case_timeout() {
5656
uint8_t results_size = 0;
5757

5858
greentea_send_kv("timing_drift_check_start", 0);
59-
timeout.attach_us(set_incremeant_count, ONE_MILLI_SEC);
59+
timeout.attach_us(set_incremeant_count, PERIOD_US);
6060

6161
// wait for 1st signal from host
6262
do {
6363
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
6464
expected_key = strcmp(_key, "base_time");
6565
} while (expected_key);
6666

67-
greentea_send_kv(_key, callback_trigger_count * ONE_MILLI_SEC);
67+
greentea_send_kv(_key, callback_trigger_count * PERIOD_US);
6868

6969
// wait for 2nd signal from host
7070
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
71-
greentea_send_kv(_key, callback_trigger_count * ONE_MILLI_SEC);
71+
greentea_send_kv(_key, callback_trigger_count * PERIOD_US);
7272

7373
//get the results from host
7474
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));

TESTS/mbed_hal/lp_ticker/main.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "mbed.h"
2626
#include "us_ticker_api.h"
2727
#include "lp_ticker_api.h"
28+
#include "TimerEvent.h"
2829

2930
using namespace utest::v1;
3031

@@ -39,13 +40,23 @@ static const ticker_data_t *lp_ticker_data = get_lp_ticker_data();
3940
#define SHORT_TIMEOUT (600)
4041

4142
void cb_done(uint32_t id) {
42-
complete_timestamp = us_ticker_read();
43-
complete = true;
43+
if ((uint32_t)&delay_event == id) {
44+
complete_timestamp = us_ticker_read();
45+
complete = true;
46+
} else {
47+
// Normal ticker handling
48+
TimerEvent::irq(id);
49+
}
4450
}
4551

4652
void cb_done_deepsleep(uint32_t id) {
47-
complete_timestamp = lp_ticker_read();
48-
complete = true;
53+
if ((uint32_t)&delay_event == id) {
54+
complete_timestamp = lp_ticker_read();
55+
complete = true;
56+
} else {
57+
// Normal ticker handling
58+
TimerEvent::irq(id);
59+
}
4960
}
5061

5162
void lp_ticker_delay_us(uint32_t delay_us, uint32_t tolerance)
@@ -109,11 +120,13 @@ void lp_ticker_1s_sleep()
109120
ticker_remove_event(lp_ticker_data, &delay_event);
110121
delay_ts = lp_ticker_read() + 1000000;
111122

123+
sleep_manager_lock_deep_sleep();
112124
timestamp_t start = us_ticker_read();
113125
ticker_insert_event(lp_ticker_data, &delay_event, delay_ts, (uint32_t)&delay_event);
114126
sleep();
115127
while (!complete);
116128
timestamp_t end = complete_timestamp;
129+
sleep_manager_unlock_deep_sleep();
117130

118131
TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, end - start);
119132
TEST_ASSERT_TRUE(complete);

TESTS/mbed_hal/sleep_manager_racecondition/main.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
using namespace utest::v1;
2626

27+
#define TEST_STACK_SIZE 256
28+
2729
void sleep_manager_locking_thread_test()
2830
{
2931
for (uint32_t i = 0; i < 100; i++) {
@@ -37,8 +39,8 @@ void sleep_manager_multithread_test()
3739
{
3840
{
3941
Callback<void()> cb(sleep_manager_locking_thread_test);
40-
Thread t1;
41-
Thread t2;
42+
Thread t1(osPriorityNormal, TEST_STACK_SIZE);
43+
Thread t2(osPriorityNormal, TEST_STACK_SIZE);
4244

4345
t1.start(callback(cb));
4446
Thread::wait(25);

drivers/Ticker.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ void Ticker::setup(us_timestamp_t t) {
4343

4444
void Ticker::handler() {
4545
insert_absolute(event.timestamp + _delay);
46-
_function();
46+
if (_function) {
47+
_function();
48+
}
4749
}
4850

4951
} // namespace mbed

targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ void fncs36510_deepsleep(void)
6464
/** Enter into deep sleep mode */
6565
__ISB();
6666
__WFI();
67+
__NOP();
68+
__NOP();
6769

6870
/** Wait for the external 32MHz to be power-ed up & running
6971
* Re-power down the 32MHz internal osc
@@ -115,4 +117,4 @@ void fncs36510_coma(void)
115117
fMacRestoreFrameStoreLUT(MAC_LUT_BackUp); */
116118
}
117119

118-
#endif /* DEVICE_SLEEP */
120+
#endif /* DEVICE_SLEEP */

targets/targets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3195,7 +3195,7 @@
31953195
},
31963196
"OUTPUT_EXT": "hex",
31973197
"post_binary_hook": {"function": "NCS36510TargetCode.ncs36510_addfib"},
3198-
"macros": ["CM3", "CPU_NCS36510", "TARGET_NCS36510", "LOAD_ADDRESS=0x3000", "MBED_TICKLESS"],
3198+
"macros": ["CM3", "CPU_NCS36510", "TARGET_NCS36510", "LOAD_ADDRESS=0x3000"],
31993199
"supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
32003200
"device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER", "TRNG", "SPISLAVE"],
32013201
"release_versions": ["2", "5"]

0 commit comments

Comments
 (0)