mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #5063 from 0xc0170/fix_lpticker_test
Fixing lp ticker and sleep manager testspull/5071/head
commit
2955a0adc6
|
@ -72,11 +72,13 @@ void lp_timeout_1s_sleep(void)
|
||||||
{
|
{
|
||||||
complete = false;
|
complete = false;
|
||||||
|
|
||||||
|
sleep_manager_lock_deep_sleep();
|
||||||
timestamp_t start = us_ticker_read();
|
timestamp_t start = us_ticker_read();
|
||||||
lpt.attach(&cb_done, 1);
|
lpt.attach(&cb_done, 1);
|
||||||
sleep();
|
sleep();
|
||||||
while (!complete);
|
while (!complete);
|
||||||
timestamp_t end = us_ticker_read();
|
timestamp_t end = us_ticker_read();
|
||||||
|
sleep_manager_unlock_deep_sleep();
|
||||||
|
|
||||||
TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, end - start);
|
TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, end - start);
|
||||||
TEST_ASSERT_TRUE(complete);
|
TEST_ASSERT_TRUE(complete);
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
using namespace utest::v1;
|
using namespace utest::v1;
|
||||||
|
|
||||||
#define ONE_MILLI_SEC 1000
|
#define PERIOD_US 10000
|
||||||
|
|
||||||
volatile int ticker_count = 0;
|
volatile int ticker_count = 0;
|
||||||
volatile uint32_t callback_trigger_count = 0;
|
volatile uint32_t callback_trigger_count = 0;
|
||||||
|
@ -44,7 +44,7 @@ static const int test_timeout = 240;
|
||||||
Timeout timeout;
|
Timeout timeout;
|
||||||
|
|
||||||
void set_incremeant_count() {
|
void set_incremeant_count() {
|
||||||
timeout.attach_us(set_incremeant_count, ONE_MILLI_SEC);
|
timeout.attach_us(set_incremeant_count, PERIOD_US);
|
||||||
++callback_trigger_count;
|
++callback_trigger_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ void test_case_timeout() {
|
||||||
uint8_t results_size = 0;
|
uint8_t results_size = 0;
|
||||||
|
|
||||||
greentea_send_kv("timing_drift_check_start", 0);
|
greentea_send_kv("timing_drift_check_start", 0);
|
||||||
timeout.attach_us(set_incremeant_count, ONE_MILLI_SEC);
|
timeout.attach_us(set_incremeant_count, PERIOD_US);
|
||||||
|
|
||||||
// wait for 1st signal from host
|
// wait for 1st signal from host
|
||||||
do {
|
do {
|
||||||
|
@ -64,11 +64,11 @@ void test_case_timeout() {
|
||||||
expected_key = strcmp(_key, "base_time");
|
expected_key = strcmp(_key, "base_time");
|
||||||
} while (expected_key);
|
} while (expected_key);
|
||||||
|
|
||||||
greentea_send_kv(_key, callback_trigger_count * ONE_MILLI_SEC);
|
greentea_send_kv(_key, callback_trigger_count * PERIOD_US);
|
||||||
|
|
||||||
// wait for 2nd signal from host
|
// wait for 2nd signal from host
|
||||||
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
|
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
|
||||||
greentea_send_kv(_key, callback_trigger_count * ONE_MILLI_SEC);
|
greentea_send_kv(_key, callback_trigger_count * PERIOD_US);
|
||||||
|
|
||||||
//get the results from host
|
//get the results from host
|
||||||
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
|
greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "mbed.h"
|
#include "mbed.h"
|
||||||
#include "us_ticker_api.h"
|
#include "us_ticker_api.h"
|
||||||
#include "lp_ticker_api.h"
|
#include "lp_ticker_api.h"
|
||||||
|
#include "TimerEvent.h"
|
||||||
|
|
||||||
using namespace utest::v1;
|
using namespace utest::v1;
|
||||||
|
|
||||||
|
@ -39,13 +40,23 @@ static const ticker_data_t *lp_ticker_data = get_lp_ticker_data();
|
||||||
#define SHORT_TIMEOUT (600)
|
#define SHORT_TIMEOUT (600)
|
||||||
|
|
||||||
void cb_done(uint32_t id) {
|
void cb_done(uint32_t id) {
|
||||||
complete_timestamp = us_ticker_read();
|
if ((uint32_t)&delay_event == id) {
|
||||||
complete = true;
|
complete_timestamp = us_ticker_read();
|
||||||
|
complete = true;
|
||||||
|
} else {
|
||||||
|
// Normal ticker handling
|
||||||
|
TimerEvent::irq(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cb_done_deepsleep(uint32_t id) {
|
void cb_done_deepsleep(uint32_t id) {
|
||||||
complete_timestamp = lp_ticker_read();
|
if ((uint32_t)&delay_event == id) {
|
||||||
complete = true;
|
complete_timestamp = lp_ticker_read();
|
||||||
|
complete = true;
|
||||||
|
} else {
|
||||||
|
// Normal ticker handling
|
||||||
|
TimerEvent::irq(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void lp_ticker_delay_us(uint32_t delay_us, uint32_t tolerance)
|
void lp_ticker_delay_us(uint32_t delay_us, uint32_t tolerance)
|
||||||
|
@ -109,11 +120,13 @@ void lp_ticker_1s_sleep()
|
||||||
ticker_remove_event(lp_ticker_data, &delay_event);
|
ticker_remove_event(lp_ticker_data, &delay_event);
|
||||||
delay_ts = lp_ticker_read() + 1000000;
|
delay_ts = lp_ticker_read() + 1000000;
|
||||||
|
|
||||||
|
sleep_manager_lock_deep_sleep();
|
||||||
timestamp_t start = us_ticker_read();
|
timestamp_t start = us_ticker_read();
|
||||||
ticker_insert_event(lp_ticker_data, &delay_event, delay_ts, (uint32_t)&delay_event);
|
ticker_insert_event(lp_ticker_data, &delay_event, delay_ts, (uint32_t)&delay_event);
|
||||||
sleep();
|
sleep();
|
||||||
while (!complete);
|
while (!complete);
|
||||||
timestamp_t end = complete_timestamp;
|
timestamp_t end = complete_timestamp;
|
||||||
|
sleep_manager_unlock_deep_sleep();
|
||||||
|
|
||||||
TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, end - start);
|
TEST_ASSERT_UINT32_WITHIN(LONG_TIMEOUT, 1000000, end - start);
|
||||||
TEST_ASSERT_TRUE(complete);
|
TEST_ASSERT_TRUE(complete);
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
using namespace utest::v1;
|
using namespace utest::v1;
|
||||||
|
|
||||||
|
#define TEST_STACK_SIZE 256
|
||||||
|
|
||||||
void sleep_manager_locking_thread_test()
|
void sleep_manager_locking_thread_test()
|
||||||
{
|
{
|
||||||
for (uint32_t i = 0; i < 100; i++) {
|
for (uint32_t i = 0; i < 100; i++) {
|
||||||
|
@ -37,8 +39,8 @@ void sleep_manager_multithread_test()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
Callback<void()> cb(sleep_manager_locking_thread_test);
|
Callback<void()> cb(sleep_manager_locking_thread_test);
|
||||||
Thread t1;
|
Thread t1(osPriorityNormal, TEST_STACK_SIZE);
|
||||||
Thread t2;
|
Thread t2(osPriorityNormal, TEST_STACK_SIZE);
|
||||||
|
|
||||||
t1.start(callback(cb));
|
t1.start(callback(cb));
|
||||||
Thread::wait(25);
|
Thread::wait(25);
|
||||||
|
|
|
@ -43,7 +43,9 @@ void Ticker::setup(us_timestamp_t t) {
|
||||||
|
|
||||||
void Ticker::handler() {
|
void Ticker::handler() {
|
||||||
insert_absolute(event.timestamp + _delay);
|
insert_absolute(event.timestamp + _delay);
|
||||||
_function();
|
if (_function) {
|
||||||
|
_function();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace mbed
|
} // namespace mbed
|
||||||
|
|
|
@ -64,6 +64,8 @@ void fncs36510_deepsleep(void)
|
||||||
/** Enter into deep sleep mode */
|
/** Enter into deep sleep mode */
|
||||||
__ISB();
|
__ISB();
|
||||||
__WFI();
|
__WFI();
|
||||||
|
__NOP();
|
||||||
|
__NOP();
|
||||||
|
|
||||||
/** Wait for the external 32MHz to be power-ed up & running
|
/** Wait for the external 32MHz to be power-ed up & running
|
||||||
* Re-power down the 32MHz internal osc
|
* Re-power down the 32MHz internal osc
|
||||||
|
@ -115,4 +117,4 @@ void fncs36510_coma(void)
|
||||||
fMacRestoreFrameStoreLUT(MAC_LUT_BackUp); */
|
fMacRestoreFrameStoreLUT(MAC_LUT_BackUp); */
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* DEVICE_SLEEP */
|
#endif /* DEVICE_SLEEP */
|
||||||
|
|
|
@ -3195,7 +3195,7 @@
|
||||||
},
|
},
|
||||||
"OUTPUT_EXT": "hex",
|
"OUTPUT_EXT": "hex",
|
||||||
"post_binary_hook": {"function": "NCS36510TargetCode.ncs36510_addfib"},
|
"post_binary_hook": {"function": "NCS36510TargetCode.ncs36510_addfib"},
|
||||||
"macros": ["CM3", "CPU_NCS36510", "TARGET_NCS36510", "LOAD_ADDRESS=0x3000", "MBED_TICKLESS"],
|
"macros": ["CM3", "CPU_NCS36510", "TARGET_NCS36510", "LOAD_ADDRESS=0x3000"],
|
||||||
"supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
|
"supported_toolchains": ["GCC_ARM", "ARM", "IAR"],
|
||||||
"device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER", "TRNG", "SPISLAVE"],
|
"device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER", "TRNG", "SPISLAVE"],
|
||||||
"release_versions": ["2", "5"]
|
"release_versions": ["2", "5"]
|
||||||
|
|
Loading…
Reference in New Issue