Nathan Yonkee / Mbed 2 deprecated Nucleo_sinewave_output_copy

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:16:49 2018 -0700
Revision:
10:46a4cf51ee38
Parent:
9:d58e77ebd769
remove mbed-os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 9:d58e77ebd769 1 /*
Nathan Yonkee 9:d58e77ebd769 2 * Copyright (c) 2013-2017, ARM Limited, All Rights Reserved
Nathan Yonkee 9:d58e77ebd769 3 * SPDX-License-Identifier: Apache-2.0
Nathan Yonkee 9:d58e77ebd769 4 *
Nathan Yonkee 9:d58e77ebd769 5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
Nathan Yonkee 9:d58e77ebd769 6 * not use this file except in compliance with the License.
Nathan Yonkee 9:d58e77ebd769 7 * You may obtain a copy of the License at
Nathan Yonkee 9:d58e77ebd769 8 *
Nathan Yonkee 9:d58e77ebd769 9 * http://www.apache.org/licenses/LICENSE-2.0
Nathan Yonkee 9:d58e77ebd769 10 *
Nathan Yonkee 9:d58e77ebd769 11 * Unless required by applicable law or agreed to in writing, software
Nathan Yonkee 9:d58e77ebd769 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Nathan Yonkee 9:d58e77ebd769 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Nathan Yonkee 9:d58e77ebd769 14 * See the License for the specific language governing permissions and
Nathan Yonkee 9:d58e77ebd769 15 * limitations under the License.
Nathan Yonkee 9:d58e77ebd769 16 */
Nathan Yonkee 9:d58e77ebd769 17 #include "mbed.h"
Nathan Yonkee 9:d58e77ebd769 18 #include "greentea-client/test_env.h"
Nathan Yonkee 9:d58e77ebd769 19 #include "utest/utest.h"
Nathan Yonkee 9:d58e77ebd769 20 #include "unity/unity.h"
Nathan Yonkee 9:d58e77ebd769 21
Nathan Yonkee 9:d58e77ebd769 22 #if defined(MBED_RTOS_SINGLE_THREAD)
Nathan Yonkee 9:d58e77ebd769 23 #error [NOT_SUPPORTED] test not supported
Nathan Yonkee 9:d58e77ebd769 24 #endif
Nathan Yonkee 9:d58e77ebd769 25
Nathan Yonkee 9:d58e77ebd769 26 using utest::v1::Case;
Nathan Yonkee 9:d58e77ebd769 27
Nathan Yonkee 9:d58e77ebd769 28 #define TEST_STACK_SIZE 256
Nathan Yonkee 9:d58e77ebd769 29 #define ONE_MILLI_SEC 1000
Nathan Yonkee 9:d58e77ebd769 30
Nathan Yonkee 9:d58e77ebd769 31 volatile uint32_t elapsed_time_ms = 0;
Nathan Yonkee 9:d58e77ebd769 32 static const int test_timeout = 40;
Nathan Yonkee 9:d58e77ebd769 33
Nathan Yonkee 9:d58e77ebd769 34
Nathan Yonkee 9:d58e77ebd769 35 void update_tick_thread(Mutex *mutex)
Nathan Yonkee 9:d58e77ebd769 36 {
Nathan Yonkee 9:d58e77ebd769 37 while (true) {
Nathan Yonkee 9:d58e77ebd769 38 Thread::wait(1);
Nathan Yonkee 9:d58e77ebd769 39 mutex->lock();
Nathan Yonkee 9:d58e77ebd769 40 ++elapsed_time_ms;
Nathan Yonkee 9:d58e77ebd769 41 mutex->unlock();
Nathan Yonkee 9:d58e77ebd769 42 }
Nathan Yonkee 9:d58e77ebd769 43 }
Nathan Yonkee 9:d58e77ebd769 44
Nathan Yonkee 9:d58e77ebd769 45
Nathan Yonkee 9:d58e77ebd769 46 /** Tests is to measure the accuracy of Thread::wait() over a period of time
Nathan Yonkee 9:d58e77ebd769 47
Nathan Yonkee 9:d58e77ebd769 48 Given
Nathan Yonkee 9:d58e77ebd769 49 a thread updating elapsed_time_ms every milli sec
Nathan Yonkee 9:d58e77ebd769 50 and host script for time measurement accuracy check (More details on tests can be found in timing_drift_auto.py)
Nathan Yonkee 9:d58e77ebd769 51 When host query what is current count base_time
Nathan Yonkee 9:d58e77ebd769 52 Then Device responds by the elapsed_time_ms
Nathan Yonkee 9:d58e77ebd769 53 When host query what is current count final_time
Nathan Yonkee 9:d58e77ebd769 54 Then Device responds by the elapsed_time_ms
Nathan Yonkee 9:d58e77ebd769 55 When host computes the drift considering base_time, final_time, transport delay and measurement stretch
Nathan Yonkee 9:d58e77ebd769 56 Then host send the results back to device pass/fail based on tolerance
Nathan Yonkee 9:d58e77ebd769 57 */
Nathan Yonkee 9:d58e77ebd769 58 void test(void)
Nathan Yonkee 9:d58e77ebd769 59 {
Nathan Yonkee 9:d58e77ebd769 60 char _key[11] = { };
Nathan Yonkee 9:d58e77ebd769 61 char _value[128] = { };
Nathan Yonkee 9:d58e77ebd769 62 int expected_key = 1;
Nathan Yonkee 9:d58e77ebd769 63 Mutex mutex;
Nathan Yonkee 9:d58e77ebd769 64 uint32_t elapsed_time;
Nathan Yonkee 9:d58e77ebd769 65
Nathan Yonkee 9:d58e77ebd769 66 Thread tick_thread(osPriorityHigh, TEST_STACK_SIZE);
Nathan Yonkee 9:d58e77ebd769 67 tick_thread.start(callback(update_tick_thread, &mutex));
Nathan Yonkee 9:d58e77ebd769 68
Nathan Yonkee 9:d58e77ebd769 69 greentea_send_kv("timing_drift_check_start", 0);
Nathan Yonkee 9:d58e77ebd769 70
Nathan Yonkee 9:d58e77ebd769 71 // wait for 1st signal from host
Nathan Yonkee 9:d58e77ebd769 72 do {
Nathan Yonkee 9:d58e77ebd769 73 greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
Nathan Yonkee 9:d58e77ebd769 74 expected_key = strcmp(_key, "base_time");
Nathan Yonkee 9:d58e77ebd769 75 } while (expected_key);
Nathan Yonkee 9:d58e77ebd769 76
Nathan Yonkee 9:d58e77ebd769 77 mutex.lock();
Nathan Yonkee 9:d58e77ebd769 78 elapsed_time = elapsed_time_ms;
Nathan Yonkee 9:d58e77ebd769 79 mutex.unlock();
Nathan Yonkee 9:d58e77ebd769 80 // send base_time
Nathan Yonkee 9:d58e77ebd769 81 greentea_send_kv(_key, elapsed_time * ONE_MILLI_SEC);
Nathan Yonkee 9:d58e77ebd769 82
Nathan Yonkee 9:d58e77ebd769 83 // wait for 2nd signal from host
Nathan Yonkee 9:d58e77ebd769 84 greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
Nathan Yonkee 9:d58e77ebd769 85
Nathan Yonkee 9:d58e77ebd769 86 mutex.lock();
Nathan Yonkee 9:d58e77ebd769 87 elapsed_time = elapsed_time_ms;
Nathan Yonkee 9:d58e77ebd769 88 mutex.unlock();
Nathan Yonkee 9:d58e77ebd769 89 // send final_time
Nathan Yonkee 9:d58e77ebd769 90 greentea_send_kv(_key, elapsed_time * ONE_MILLI_SEC);
Nathan Yonkee 9:d58e77ebd769 91
Nathan Yonkee 9:d58e77ebd769 92 //get the results from host
Nathan Yonkee 9:d58e77ebd769 93 greentea_parse_kv(_key, _value, sizeof(_key), sizeof(_value));
Nathan Yonkee 9:d58e77ebd769 94
Nathan Yonkee 9:d58e77ebd769 95 TEST_ASSERT_EQUAL_STRING_MESSAGE("pass", _key,"Host side script reported a fail...");
Nathan Yonkee 9:d58e77ebd769 96 }
Nathan Yonkee 9:d58e77ebd769 97
Nathan Yonkee 9:d58e77ebd769 98 Case cases[] = {
Nathan Yonkee 9:d58e77ebd769 99 Case("Test Thread::wait accuracy", test)
Nathan Yonkee 9:d58e77ebd769 100 };
Nathan Yonkee 9:d58e77ebd769 101
Nathan Yonkee 9:d58e77ebd769 102 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
Nathan Yonkee 9:d58e77ebd769 103 {
Nathan Yonkee 9:d58e77ebd769 104 GREENTEA_SETUP(test_timeout, "timing_drift_auto");
Nathan Yonkee 9:d58e77ebd769 105 return utest::v1::greentea_test_setup_handler(number_of_cases);
Nathan Yonkee 9:d58e77ebd769 106 }
Nathan Yonkee 9:d58e77ebd769 107
Nathan Yonkee 9:d58e77ebd769 108 utest::v1::Specification specification(greentea_test_setup, cases);
Nathan Yonkee 9:d58e77ebd769 109
Nathan Yonkee 9:d58e77ebd769 110 int main()
Nathan Yonkee 9:d58e77ebd769 111 {
Nathan Yonkee 9:d58e77ebd769 112 utest::v1::Harness::run(specification);
Nathan Yonkee 9:d58e77ebd769 113 }