@@ -38,54 +38,36 @@ volatile uint32_t multi_counter;
38
38
DigitalOut led1 (LED1);
39
39
DigitalOut led2 (LED2);
40
40
41
- Ticker *volatile ticker1;
42
- Ticker *volatile ticker2;
43
41
Timer gtimer;
44
-
45
42
volatile int ticker_count = 0 ;
46
- volatile bool print_tick = false ;
47
-
48
- void ticker_callback_1_switch_to_2 (void );
49
- void ticker_callback_2_switch_to_1 (void );
50
43
51
- void increment_ticker_counter (void )
52
- {
53
- ++callback_trigger_count;
54
- }
55
44
56
45
void switch_led1_state (void )
57
46
{
58
- led1 = !led1;
47
+ // blink 3 times per second
48
+ if ((callback_trigger_count % 333 ) == 0 ) {
49
+ led1 = !led1;
50
+ }
59
51
}
60
52
61
53
void switch_led2_state (void )
62
54
{
63
- led2 = !led2;
55
+ // blink 3 times per second
56
+ // make led2 blink at the same callback_trigger_count value as led1
57
+ if (((callback_trigger_count - 1 ) % 333 ) == 0 ) {
58
+ led2 = !led2;
59
+ }
64
60
}
65
61
66
- void ticker_callback_1_switch_to_2 (void )
62
+ void ticker_callback_1 (void )
67
63
{
68
64
++callback_trigger_count;
69
- // If ticker is NULL then it is being or has been deleted
70
- if (ticker1) {
71
- ticker1->detach ();
72
- }
73
- if (ticker2) {
74
- ticker2->attach_us (ticker_callback_2_switch_to_1, ONE_MILLI_SEC);
75
- }
76
65
switch_led1_state ();
77
66
}
78
67
79
- void ticker_callback_2_switch_to_1 (void )
68
+ void ticker_callback_2 (void )
80
69
{
81
70
++callback_trigger_count;
82
- // If ticker is NULL then it is being or has been deleted
83
- if (ticker2) {
84
- ticker2->detach ();
85
- }
86
- if (ticker1) {
87
- ticker1->attach_us (ticker_callback_1_switch_to_2, ONE_MILLI_SEC);
88
- }
89
71
switch_led2_state ();
90
72
}
91
73
@@ -110,9 +92,8 @@ void increment_multi_counter(void)
110
92
111
93
/* Tests is to measure the accuracy of Ticker over a period of time
112
94
*
113
- * 1) DUT would start to update callback_trigger_count every milli sec, in 2x callback we use 2 tickers
114
- * to update the count alternatively.
115
- * 2) Host would query what is current count base_time, Device responds by the callback_trigger_count
95
+ * 1) DUT would start to update callback_trigger_count every milli sec
96
+ * 2) Host would query what is current count base_time, Device responds by the callback_trigger_count.
116
97
* 3) Host after waiting for measurement stretch. It will query for device time again final_time.
117
98
* 4) Host computes the drift considering base_time, final_time, transport delay and measurement stretch
118
99
* 5) Finally host send the results back to device pass/fail based on tolerance.
@@ -123,9 +104,14 @@ void test_case_1x_ticker()
123
104
char _key[11 ] = { };
124
105
char _value[128 ] = { };
125
106
int expected_key = 1 ;
107
+ Ticker ticker;
108
+
109
+ led1 = 1 ;
110
+ led2 = 1 ;
111
+ callback_trigger_count = 0 ;
126
112
127
113
greentea_send_kv (" timing_drift_check_start" , 0 );
128
- ticker1-> attach_us (&increment_ticker_counter , ONE_MILLI_SEC);
114
+ ticker. attach_us (&ticker_callback_1 , ONE_MILLI_SEC);
129
115
130
116
// wait for 1st signal from host
131
117
do {
@@ -144,18 +130,32 @@ void test_case_1x_ticker()
144
130
TEST_ASSERT_EQUAL_STRING_MESSAGE (" pass" , _key," Host side script reported a fail..." );
145
131
}
146
132
147
- void test_case_2x_callbacks ()
133
+ /* Tests is to measure the accuracy of Ticker over a period of time
134
+ *
135
+ * 1) DUT would start to update callback_trigger_count every milli sec, we use 2 tickers
136
+ * to update the count alternatively.
137
+ * 2) Host would query what is current count base_time, Device responds by the callback_trigger_count
138
+ * 3) Host after waiting for measurement stretch. It will query for device time again final_time.
139
+ * 4) Host computes the drift considering base_time, final_time, transport delay and measurement stretch
140
+ * 5) Finally host send the results back to device pass/fail based on tolerance.
141
+ * 6) More details on tests can be found in timing_drift_auto.py
142
+ */
143
+ void test_case_2x_ticker ()
148
144
{
149
145
char _key[11 ] = { };
150
146
char _value[128 ] = { };
151
147
int expected_key = 1 ;
148
+ Ticker ticker1, ticker2;
152
149
153
150
led1 = 0 ;
154
- led2 = 0 ;
151
+ led2 = 1 ;
155
152
callback_trigger_count = 0 ;
156
153
154
+ ticker1.attach_us (ticker_callback_1, 2 * ONE_MILLI_SEC);
155
+ // delay second ticker to have a pair of tickers tick every one millisecond
156
+ wait_us (ONE_MILLI_SEC);
157
157
greentea_send_kv (" timing_drift_check_start" , 0 );
158
- ticker1-> attach_us (ticker_callback_1_switch_to_2, ONE_MILLI_SEC);
158
+ ticker2. attach_us (ticker_callback_2, 2 * ONE_MILLI_SEC);
159
159
160
160
// wait for 1st signal from host
161
161
do {
@@ -307,39 +307,6 @@ void test_attach_us_time(void)
307
307
}
308
308
309
309
310
- utest::v1::status_t one_ticker_case_setup_handler_t (const Case *const source, const size_t index_of_case)
311
- {
312
- ticker1 = new Ticker ();
313
- return greentea_case_setup_handler (source, index_of_case);
314
- }
315
-
316
- utest::v1::status_t two_ticker_case_setup_handler_t (const Case *const source, const size_t index_of_case)
317
- {
318
- ticker1 = new Ticker ();
319
- ticker2 = new Ticker ();
320
- return utest::v1::greentea_case_setup_handler (source, index_of_case);
321
- }
322
-
323
- utest::v1::status_t one_ticker_case_teardown_handler_t (const Case *const source, const size_t passed, const size_t failed, const utest::v1::failure_t reason)
324
- {
325
- Ticker *temp1 = ticker1;
326
- ticker1 = NULL ;
327
- delete temp1;
328
- return utest::v1::greentea_case_teardown_handler (source, passed, failed, reason);
329
- }
330
-
331
- utest::v1::status_t two_ticker_case_teardown_handler_t (const Case *const source, const size_t passed, const size_t failed, const utest::v1::failure_t reason)
332
- {
333
- Ticker *temp1 = ticker1;
334
- Ticker *temp2 = ticker2;
335
- ticker1 = NULL ;
336
- ticker2 = NULL ;
337
- delete temp1;
338
- delete temp2;
339
- return utest::v1::greentea_case_teardown_handler (source, passed, failed, reason);
340
- }
341
-
342
-
343
310
// Test cases
344
311
Case cases[] = {
345
312
Case (" Test attach for 0.01s and time measure" , test_attach_time<10000 >),
@@ -351,8 +318,8 @@ Case cases[] = {
351
318
Case (" Test detach" , test_detach),
352
319
Case (" Test multi call and time measure" , test_multi_call_time),
353
320
Case (" Test multi ticker" , test_multi_ticker),
354
- Case (" Test timers: 1x ticker" , one_ticker_case_setup_handler_t , test_case_1x_ticker, one_ticker_case_teardown_handler_t ),
355
- Case (" Test timers: 2x callbacks " , two_ticker_case_setup_handler_t ,test_case_2x_callbacks, two_ticker_case_teardown_handler_t )
321
+ Case (" Test timers: 1x ticker" , test_case_1x_ticker),
322
+ Case (" Test timers: 2x ticker " , test_case_2x_ticker )
356
323
};
357
324
358
325
utest::v1::status_t greentea_test_setup (const size_t number_of_cases)
0 commit comments