mbed-rtos test programs for DISCO_F746NG. #Test for thread, mutex, semaphore, signals, queues, mail, ISR
Dependencies: mbed-rtos mbed-src
main.cpp@0:225c1da086a1, 2015-11-11 (annotated)
- Committer:
- mzta
- Date:
- Wed Nov 11 07:53:46 2015 +0000
- Revision:
- 0:225c1da086a1
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mzta | 0:225c1da086a1 | 1 | #include "mbed.h" |
mzta | 0:225c1da086a1 | 2 | #include "test_env.h" |
mzta | 0:225c1da086a1 | 3 | #include "rtos.h" |
mzta | 0:225c1da086a1 | 4 | |
mzta | 0:225c1da086a1 | 5 | /******************** |
mzta | 0:225c1da086a1 | 6 | * Switch test case |
mzta | 0:225c1da086a1 | 7 | ********************/ |
mzta | 0:225c1da086a1 | 8 | #define TEST_84_BASIC |
mzta | 0:225c1da086a1 | 9 | //#define TEST_85_MUTEX |
mzta | 0:225c1da086a1 | 10 | //#define TEST_86_SEMAPHORE |
mzta | 0:225c1da086a1 | 11 | //#define TEST_87_SIGNALS |
mzta | 0:225c1da086a1 | 12 | //#define TEST_88_QUEUE |
mzta | 0:225c1da086a1 | 13 | //#define TEST_89_MAIL |
mzta | 0:225c1da086a1 | 14 | //#define TEST_90_TIMER |
mzta | 0:225c1da086a1 | 15 | //#define TEST_91_ISR |
mzta | 0:225c1da086a1 | 16 | |
mzta | 0:225c1da086a1 | 17 | #if defined(TEST_84_BASIC) |
mzta | 0:225c1da086a1 | 18 | |
mzta | 0:225c1da086a1 | 19 | /* |
mzta | 0:225c1da086a1 | 20 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 21 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 22 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 23 | */ |
mzta | 0:225c1da086a1 | 24 | #if (defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 25 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 26 | #elif (defined(TARGET_STM32F030R8) || defined(TARGET_STM32F070RB)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 27 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 28 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 29 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 30 | #else |
mzta | 0:225c1da086a1 | 31 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 32 | #endif |
mzta | 0:225c1da086a1 | 33 | |
mzta | 0:225c1da086a1 | 34 | void print_char(char c = '*') { |
mzta | 0:225c1da086a1 | 35 | printf("%c", c); |
mzta | 0:225c1da086a1 | 36 | fflush(stdout); |
mzta | 0:225c1da086a1 | 37 | } |
mzta | 0:225c1da086a1 | 38 | |
mzta | 0:225c1da086a1 | 39 | DigitalOut led1(LED1); |
mzta | 0:225c1da086a1 | 40 | DigitalOut led2(LED2); |
mzta | 0:225c1da086a1 | 41 | |
mzta | 0:225c1da086a1 | 42 | void led2_thread(void const *argument) { |
mzta | 0:225c1da086a1 | 43 | while (true) { |
mzta | 0:225c1da086a1 | 44 | led2 = !led2; |
mzta | 0:225c1da086a1 | 45 | Thread::wait(1000); |
mzta | 0:225c1da086a1 | 46 | print_char(); |
mzta | 0:225c1da086a1 | 47 | } |
mzta | 0:225c1da086a1 | 48 | } |
mzta | 0:225c1da086a1 | 49 | |
mzta | 0:225c1da086a1 | 50 | int main() { |
mzta | 0:225c1da086a1 | 51 | MBED_HOSTTEST_TIMEOUT(15); |
mzta | 0:225c1da086a1 | 52 | MBED_HOSTTEST_SELECT(wait_us_auto); |
mzta | 0:225c1da086a1 | 53 | MBED_HOSTTEST_DESCRIPTION(Basic thread); |
mzta | 0:225c1da086a1 | 54 | MBED_HOSTTEST_START("RTOS_1"); |
mzta | 0:225c1da086a1 | 55 | |
mzta | 0:225c1da086a1 | 56 | Thread thread(led2_thread, NULL, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 57 | |
mzta | 0:225c1da086a1 | 58 | while (true) { |
mzta | 0:225c1da086a1 | 59 | led1 = !led1; |
mzta | 0:225c1da086a1 | 60 | Thread::wait(500); |
mzta | 0:225c1da086a1 | 61 | } |
mzta | 0:225c1da086a1 | 62 | } |
mzta | 0:225c1da086a1 | 63 | |
mzta | 0:225c1da086a1 | 64 | #elif defined(TEST_85_MUTEX) |
mzta | 0:225c1da086a1 | 65 | |
mzta | 0:225c1da086a1 | 66 | #define THREAD_DELAY 50 |
mzta | 0:225c1da086a1 | 67 | #define SIGNALS_TO_EMIT 100 |
mzta | 0:225c1da086a1 | 68 | |
mzta | 0:225c1da086a1 | 69 | /* |
mzta | 0:225c1da086a1 | 70 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 71 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 72 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 73 | */ |
mzta | 0:225c1da086a1 | 74 | #if (defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 75 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 76 | #elif (defined(TARGET_STM32F030R8) || defined(TARGET_STM32F070RB)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 77 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 78 | #elif defined(TARGET_STM32F334R8) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 79 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 80 | #elif defined(TARGET_STM32F030R8) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 81 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 82 | #elif defined(TARGET_STM32F070RB) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 83 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 84 | #elif defined(TARGET_STM32F072RB) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 85 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 86 | #elif defined(TARGET_STM32F302R8) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 87 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 88 | #else |
mzta | 0:225c1da086a1 | 89 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 90 | #endif |
mzta | 0:225c1da086a1 | 91 | |
mzta | 0:225c1da086a1 | 92 | void print_char(char c = '*') { |
mzta | 0:225c1da086a1 | 93 | printf("%c", c); |
mzta | 0:225c1da086a1 | 94 | fflush(stdout); |
mzta | 0:225c1da086a1 | 95 | } |
mzta | 0:225c1da086a1 | 96 | |
mzta | 0:225c1da086a1 | 97 | Mutex stdio_mutex; |
mzta | 0:225c1da086a1 | 98 | DigitalOut led(LED1); |
mzta | 0:225c1da086a1 | 99 | |
mzta | 0:225c1da086a1 | 100 | volatile int change_counter = 0; |
mzta | 0:225c1da086a1 | 101 | volatile bool changing_counter = false; |
mzta | 0:225c1da086a1 | 102 | volatile bool mutex_defect = false; |
mzta | 0:225c1da086a1 | 103 | |
mzta | 0:225c1da086a1 | 104 | bool manipulate_protected_zone(const int thread_delay) { |
mzta | 0:225c1da086a1 | 105 | bool result = true; |
mzta | 0:225c1da086a1 | 106 | |
mzta | 0:225c1da086a1 | 107 | stdio_mutex.lock(); // LOCK |
mzta | 0:225c1da086a1 | 108 | if (changing_counter == true) { |
mzta | 0:225c1da086a1 | 109 | // 'e' stands for error. If changing_counter is true access is not exclusively |
mzta | 0:225c1da086a1 | 110 | print_char('e'); |
mzta | 0:225c1da086a1 | 111 | result = false; |
mzta | 0:225c1da086a1 | 112 | mutex_defect = true; |
mzta | 0:225c1da086a1 | 113 | } |
mzta | 0:225c1da086a1 | 114 | changing_counter = true; |
mzta | 0:225c1da086a1 | 115 | |
mzta | 0:225c1da086a1 | 116 | // Some action on protected |
mzta | 0:225c1da086a1 | 117 | led = !led; |
mzta | 0:225c1da086a1 | 118 | change_counter++; |
mzta | 0:225c1da086a1 | 119 | print_char('.'); |
mzta | 0:225c1da086a1 | 120 | Thread::wait(thread_delay); |
mzta | 0:225c1da086a1 | 121 | |
mzta | 0:225c1da086a1 | 122 | changing_counter = false; |
mzta | 0:225c1da086a1 | 123 | stdio_mutex.unlock(); // UNLOCK |
mzta | 0:225c1da086a1 | 124 | return result; |
mzta | 0:225c1da086a1 | 125 | } |
mzta | 0:225c1da086a1 | 126 | |
mzta | 0:225c1da086a1 | 127 | void test_thread(void const *args) { |
mzta | 0:225c1da086a1 | 128 | const int thread_delay = int(args); |
mzta | 0:225c1da086a1 | 129 | while (true) { |
mzta | 0:225c1da086a1 | 130 | manipulate_protected_zone(thread_delay); |
mzta | 0:225c1da086a1 | 131 | } |
mzta | 0:225c1da086a1 | 132 | } |
mzta | 0:225c1da086a1 | 133 | |
mzta | 0:225c1da086a1 | 134 | int main() { |
mzta | 0:225c1da086a1 | 135 | MBED_HOSTTEST_TIMEOUT(20); |
mzta | 0:225c1da086a1 | 136 | MBED_HOSTTEST_SELECT(default); |
mzta | 0:225c1da086a1 | 137 | MBED_HOSTTEST_DESCRIPTION(Mutex resource lock); |
mzta | 0:225c1da086a1 | 138 | MBED_HOSTTEST_START("RTOS_2"); |
mzta | 0:225c1da086a1 | 139 | |
mzta | 0:225c1da086a1 | 140 | const int t1_delay = THREAD_DELAY * 1; |
mzta | 0:225c1da086a1 | 141 | const int t2_delay = THREAD_DELAY * 2; |
mzta | 0:225c1da086a1 | 142 | const int t3_delay = THREAD_DELAY * 3; |
mzta | 0:225c1da086a1 | 143 | Thread t2(test_thread, (void *)t2_delay, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 144 | Thread t3(test_thread, (void *)t3_delay, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 145 | |
mzta | 0:225c1da086a1 | 146 | while (true) { |
mzta | 0:225c1da086a1 | 147 | // Thread 1 action |
mzta | 0:225c1da086a1 | 148 | Thread::wait(t1_delay); |
mzta | 0:225c1da086a1 | 149 | manipulate_protected_zone(t1_delay); |
mzta | 0:225c1da086a1 | 150 | if (change_counter >= SIGNALS_TO_EMIT or mutex_defect == true) { |
mzta | 0:225c1da086a1 | 151 | t2.terminate(); |
mzta | 0:225c1da086a1 | 152 | t3.terminate(); |
mzta | 0:225c1da086a1 | 153 | break; |
mzta | 0:225c1da086a1 | 154 | } |
mzta | 0:225c1da086a1 | 155 | } |
mzta | 0:225c1da086a1 | 156 | |
mzta | 0:225c1da086a1 | 157 | fflush(stdout); |
mzta | 0:225c1da086a1 | 158 | MBED_HOSTTEST_RESULT(!mutex_defect); |
mzta | 0:225c1da086a1 | 159 | return 0; |
mzta | 0:225c1da086a1 | 160 | } |
mzta | 0:225c1da086a1 | 161 | |
mzta | 0:225c1da086a1 | 162 | #elif defined(TEST_86_SEMAPHORE) |
mzta | 0:225c1da086a1 | 163 | |
mzta | 0:225c1da086a1 | 164 | #define THREAD_DELAY 75 |
mzta | 0:225c1da086a1 | 165 | #define SEMAPHORE_SLOTS 2 |
mzta | 0:225c1da086a1 | 166 | #define SEM_CHANGES 100 |
mzta | 0:225c1da086a1 | 167 | |
mzta | 0:225c1da086a1 | 168 | /* |
mzta | 0:225c1da086a1 | 169 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 170 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 171 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 172 | */ |
mzta | 0:225c1da086a1 | 173 | #if (defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 174 | #define STACK_SIZE DEFAULT_STACK_SIZE/16 |
mzta | 0:225c1da086a1 | 175 | #elif (defined(TARGET_STM32F030R8) || defined(TARGET_STM32F070RB)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 176 | #define STACK_SIZE DEFAULT_STACK_SIZE/8 |
mzta | 0:225c1da086a1 | 177 | #elif defined(TARGET_STM32F334R8) && (defined(TOOLCHAIN_GCC) || defined(TOOLCHAIN_IAR)) |
mzta | 0:225c1da086a1 | 178 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 179 | #elif defined(TARGET_STM32F103RB) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 180 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 181 | #elif defined(TARGET_STM32F030R8) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 182 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 183 | #elif defined(TARGET_STM32F070RB) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 184 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 185 | #elif defined(TARGET_STM32F072RB) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 186 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 187 | #elif defined(TARGET_STM32F302R8) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 188 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 189 | #else |
mzta | 0:225c1da086a1 | 190 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 191 | #endif |
mzta | 0:225c1da086a1 | 192 | |
mzta | 0:225c1da086a1 | 193 | void print_char(char c = '*') { |
mzta | 0:225c1da086a1 | 194 | printf("%c", c); |
mzta | 0:225c1da086a1 | 195 | fflush(stdout); |
mzta | 0:225c1da086a1 | 196 | } |
mzta | 0:225c1da086a1 | 197 | |
mzta | 0:225c1da086a1 | 198 | #define ORIGINAL 1 |
mzta | 0:225c1da086a1 | 199 | #undef ORIGINAL |
mzta | 0:225c1da086a1 | 200 | |
mzta | 0:225c1da086a1 | 201 | #if ORIGINAL |
mzta | 0:225c1da086a1 | 202 | Semaphore two_slots(SEMAPHORE_SLOTS); |
mzta | 0:225c1da086a1 | 203 | #else |
mzta | 0:225c1da086a1 | 204 | Semaphore *two_slots; |
mzta | 0:225c1da086a1 | 205 | #endif |
mzta | 0:225c1da086a1 | 206 | |
mzta | 0:225c1da086a1 | 207 | volatile int change_counter = 0; |
mzta | 0:225c1da086a1 | 208 | volatile int sem_counter = 0; |
mzta | 0:225c1da086a1 | 209 | volatile bool sem_defect = false; |
mzta | 0:225c1da086a1 | 210 | |
mzta | 0:225c1da086a1 | 211 | void test_thread(void const *delay) { |
mzta | 0:225c1da086a1 | 212 | const int thread_delay = int(delay); |
mzta | 0:225c1da086a1 | 213 | while (true) { |
mzta | 0:225c1da086a1 | 214 | #if ORIGINAL |
mzta | 0:225c1da086a1 | 215 | two_slots.wait(); |
mzta | 0:225c1da086a1 | 216 | #else |
mzta | 0:225c1da086a1 | 217 | two_slots->wait(); |
mzta | 0:225c1da086a1 | 218 | #endif |
mzta | 0:225c1da086a1 | 219 | sem_counter++; |
mzta | 0:225c1da086a1 | 220 | const bool sem_lock_failed = sem_counter > SEMAPHORE_SLOTS; |
mzta | 0:225c1da086a1 | 221 | const char msg = sem_lock_failed ? 'e' : sem_counter + '0'; |
mzta | 0:225c1da086a1 | 222 | print_char(msg); |
mzta | 0:225c1da086a1 | 223 | if (sem_lock_failed) { |
mzta | 0:225c1da086a1 | 224 | sem_defect = true; |
mzta | 0:225c1da086a1 | 225 | } |
mzta | 0:225c1da086a1 | 226 | Thread::wait(thread_delay); |
mzta | 0:225c1da086a1 | 227 | print_char('.'); |
mzta | 0:225c1da086a1 | 228 | sem_counter--; |
mzta | 0:225c1da086a1 | 229 | change_counter++; |
mzta | 0:225c1da086a1 | 230 | #if ORIGINAL |
mzta | 0:225c1da086a1 | 231 | two_slots.release(); |
mzta | 0:225c1da086a1 | 232 | #else |
mzta | 0:225c1da086a1 | 233 | two_slots->release(); |
mzta | 0:225c1da086a1 | 234 | #endif |
mzta | 0:225c1da086a1 | 235 | } |
mzta | 0:225c1da086a1 | 236 | } |
mzta | 0:225c1da086a1 | 237 | |
mzta | 0:225c1da086a1 | 238 | int main (void) { |
mzta | 0:225c1da086a1 | 239 | |
mzta | 0:225c1da086a1 | 240 | #ifndef ORIGINAL |
mzta | 0:225c1da086a1 | 241 | two_slots = new Semaphore(SEMAPHORE_SLOTS); |
mzta | 0:225c1da086a1 | 242 | #endif |
mzta | 0:225c1da086a1 | 243 | |
mzta | 0:225c1da086a1 | 244 | MBED_HOSTTEST_TIMEOUT(20); |
mzta | 0:225c1da086a1 | 245 | MBED_HOSTTEST_SELECT(default_auto); |
mzta | 0:225c1da086a1 | 246 | MBED_HOSTTEST_DESCRIPTION(Semaphore resource lock); |
mzta | 0:225c1da086a1 | 247 | MBED_HOSTTEST_START("RTOS_3"); |
mzta | 0:225c1da086a1 | 248 | |
mzta | 0:225c1da086a1 | 249 | const int t1_delay = THREAD_DELAY * 1; |
mzta | 0:225c1da086a1 | 250 | const int t2_delay = THREAD_DELAY * 2; |
mzta | 0:225c1da086a1 | 251 | const int t3_delay = THREAD_DELAY * 3; |
mzta | 0:225c1da086a1 | 252 | Thread t1(test_thread, (void *)t1_delay, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 253 | Thread t2(test_thread, (void *)t2_delay, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 254 | Thread t3(test_thread, (void *)t3_delay, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 255 | |
mzta | 0:225c1da086a1 | 256 | while (true) { |
mzta | 0:225c1da086a1 | 257 | if (change_counter >= SEM_CHANGES or sem_defect == true) { |
mzta | 0:225c1da086a1 | 258 | t1.terminate(); |
mzta | 0:225c1da086a1 | 259 | t2.terminate(); |
mzta | 0:225c1da086a1 | 260 | t3.terminate(); |
mzta | 0:225c1da086a1 | 261 | break; |
mzta | 0:225c1da086a1 | 262 | } |
mzta | 0:225c1da086a1 | 263 | } |
mzta | 0:225c1da086a1 | 264 | |
mzta | 0:225c1da086a1 | 265 | fflush(stdout); |
mzta | 0:225c1da086a1 | 266 | MBED_HOSTTEST_RESULT(!sem_defect); |
mzta | 0:225c1da086a1 | 267 | return 0; |
mzta | 0:225c1da086a1 | 268 | } |
mzta | 0:225c1da086a1 | 269 | |
mzta | 0:225c1da086a1 | 270 | #elif defined(TEST_87_SIGNALS) |
mzta | 0:225c1da086a1 | 271 | |
mzta | 0:225c1da086a1 | 272 | #define SIGNALS_TO_EMIT 100 |
mzta | 0:225c1da086a1 | 273 | #define SIGNAL_HANDLE_DELEY 25 |
mzta | 0:225c1da086a1 | 274 | #define SIGNAL_SET_VALUE 0x01 |
mzta | 0:225c1da086a1 | 275 | |
mzta | 0:225c1da086a1 | 276 | /* |
mzta | 0:225c1da086a1 | 277 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 278 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 279 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 280 | */ |
mzta | 0:225c1da086a1 | 281 | #if defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8) |
mzta | 0:225c1da086a1 | 282 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 283 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 284 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 285 | #else |
mzta | 0:225c1da086a1 | 286 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 287 | #endif |
mzta | 0:225c1da086a1 | 288 | |
mzta | 0:225c1da086a1 | 289 | DigitalOut led(LED1); |
mzta | 0:225c1da086a1 | 290 | volatile int signal_counter = 0; |
mzta | 0:225c1da086a1 | 291 | |
mzta | 0:225c1da086a1 | 292 | void led_thread(void const *argument) { |
mzta | 0:225c1da086a1 | 293 | while (true) { |
mzta | 0:225c1da086a1 | 294 | // Signal flags that are reported as event are automatically cleared. |
mzta | 0:225c1da086a1 | 295 | Thread::signal_wait(SIGNAL_SET_VALUE); |
mzta | 0:225c1da086a1 | 296 | led = !led; |
mzta | 0:225c1da086a1 | 297 | signal_counter++; |
mzta | 0:225c1da086a1 | 298 | } |
mzta | 0:225c1da086a1 | 299 | } |
mzta | 0:225c1da086a1 | 300 | |
mzta | 0:225c1da086a1 | 301 | int main (void) { |
mzta | 0:225c1da086a1 | 302 | MBED_HOSTTEST_TIMEOUT(20); |
mzta | 0:225c1da086a1 | 303 | MBED_HOSTTEST_SELECT(default_auto); |
mzta | 0:225c1da086a1 | 304 | MBED_HOSTTEST_DESCRIPTION(Signals messaging); |
mzta | 0:225c1da086a1 | 305 | MBED_HOSTTEST_START("RTOS_4"); |
mzta | 0:225c1da086a1 | 306 | |
mzta | 0:225c1da086a1 | 307 | Thread thread(led_thread, NULL, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 308 | bool result = true; |
mzta | 0:225c1da086a1 | 309 | |
mzta | 0:225c1da086a1 | 310 | while (true) { |
mzta | 0:225c1da086a1 | 311 | Thread::wait(2 * SIGNAL_HANDLE_DELEY); |
mzta | 0:225c1da086a1 | 312 | thread.signal_set(SIGNAL_SET_VALUE); |
mzta | 0:225c1da086a1 | 313 | if (signal_counter == SIGNALS_TO_EMIT) { |
mzta | 0:225c1da086a1 | 314 | printf("Handled %d signals\r\n", signal_counter); |
mzta | 0:225c1da086a1 | 315 | break; |
mzta | 0:225c1da086a1 | 316 | } |
mzta | 0:225c1da086a1 | 317 | } |
mzta | 0:225c1da086a1 | 318 | MBED_HOSTTEST_RESULT(result); |
mzta | 0:225c1da086a1 | 319 | return 0; |
mzta | 0:225c1da086a1 | 320 | } |
mzta | 0:225c1da086a1 | 321 | |
mzta | 0:225c1da086a1 | 322 | #elif defined(TEST_88_QUEUE) |
mzta | 0:225c1da086a1 | 323 | |
mzta | 0:225c1da086a1 | 324 | typedef struct { |
mzta | 0:225c1da086a1 | 325 | float voltage; /* AD result of measured voltage */ |
mzta | 0:225c1da086a1 | 326 | float current; /* AD result of measured current */ |
mzta | 0:225c1da086a1 | 327 | uint32_t counter; /* A counter value */ |
mzta | 0:225c1da086a1 | 328 | } message_t; |
mzta | 0:225c1da086a1 | 329 | |
mzta | 0:225c1da086a1 | 330 | #define CREATE_VOLTAGE(COUNTER) (COUNTER * 0.1) * 33 |
mzta | 0:225c1da086a1 | 331 | #define CREATE_CURRENT(COUNTER) (COUNTER * 0.1) * 11 |
mzta | 0:225c1da086a1 | 332 | #define QUEUE_SIZE 16 |
mzta | 0:225c1da086a1 | 333 | #define QUEUE_PUT_DELAY 100 |
mzta | 0:225c1da086a1 | 334 | |
mzta | 0:225c1da086a1 | 335 | /* |
mzta | 0:225c1da086a1 | 336 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 337 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 338 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 339 | */ |
mzta | 0:225c1da086a1 | 340 | #if (defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 341 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 342 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 343 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 344 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 345 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 346 | #else |
mzta | 0:225c1da086a1 | 347 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 348 | #endif |
mzta | 0:225c1da086a1 | 349 | |
mzta | 0:225c1da086a1 | 350 | MemoryPool<message_t, QUEUE_SIZE> mpool; |
mzta | 0:225c1da086a1 | 351 | Queue<message_t, QUEUE_SIZE> queue; |
mzta | 0:225c1da086a1 | 352 | |
mzta | 0:225c1da086a1 | 353 | /* Send Thread */ |
mzta | 0:225c1da086a1 | 354 | void send_thread (void const *argument) { |
mzta | 0:225c1da086a1 | 355 | static uint32_t i = 10; |
mzta | 0:225c1da086a1 | 356 | while (true) { |
mzta | 0:225c1da086a1 | 357 | i++; // Fake data update |
mzta | 0:225c1da086a1 | 358 | message_t *message = mpool.alloc(); |
mzta | 0:225c1da086a1 | 359 | message->voltage = CREATE_VOLTAGE(i); |
mzta | 0:225c1da086a1 | 360 | message->current = CREATE_CURRENT(i); |
mzta | 0:225c1da086a1 | 361 | message->counter = i; |
mzta | 0:225c1da086a1 | 362 | queue.put(message); |
mzta | 0:225c1da086a1 | 363 | Thread::wait(QUEUE_PUT_DELAY); |
mzta | 0:225c1da086a1 | 364 | } |
mzta | 0:225c1da086a1 | 365 | } |
mzta | 0:225c1da086a1 | 366 | |
mzta | 0:225c1da086a1 | 367 | int main (void) { |
mzta | 0:225c1da086a1 | 368 | MBED_HOSTTEST_TIMEOUT(20); |
mzta | 0:225c1da086a1 | 369 | MBED_HOSTTEST_SELECT(default_auto); |
mzta | 0:225c1da086a1 | 370 | MBED_HOSTTEST_DESCRIPTION(Queue messaging); |
mzta | 0:225c1da086a1 | 371 | MBED_HOSTTEST_START("RTOS_5"); |
mzta | 0:225c1da086a1 | 372 | |
mzta | 0:225c1da086a1 | 373 | Thread thread(send_thread, NULL, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 374 | bool result = true; |
mzta | 0:225c1da086a1 | 375 | int result_counter = 0; |
mzta | 0:225c1da086a1 | 376 | |
mzta | 0:225c1da086a1 | 377 | while (true) { |
mzta | 0:225c1da086a1 | 378 | osEvent evt = queue.get(); |
mzta | 0:225c1da086a1 | 379 | if (evt.status == osEventMessage) { |
mzta | 0:225c1da086a1 | 380 | message_t *message = (message_t*)evt.value.p; |
mzta | 0:225c1da086a1 | 381 | const float expected_voltage = CREATE_VOLTAGE(message->counter); |
mzta | 0:225c1da086a1 | 382 | const float expected_current = CREATE_CURRENT(message->counter); |
mzta | 0:225c1da086a1 | 383 | // Check using macros if received values correspond to values sent via queue |
mzta | 0:225c1da086a1 | 384 | bool expected_values = (expected_voltage == message->voltage) && |
mzta | 0:225c1da086a1 | 385 | (expected_current == message->current); |
mzta | 0:225c1da086a1 | 386 | result = result && expected_values; |
mzta | 0:225c1da086a1 | 387 | const char *result_msg = expected_values ? "OK" : "FAIL"; |
mzta | 0:225c1da086a1 | 388 | printf("%3d %.2fV %.2fA ... [%s]\r\n", message->counter, |
mzta | 0:225c1da086a1 | 389 | message->voltage, |
mzta | 0:225c1da086a1 | 390 | message->current, |
mzta | 0:225c1da086a1 | 391 | result_msg); |
mzta | 0:225c1da086a1 | 392 | mpool.free(message); |
mzta | 0:225c1da086a1 | 393 | if (result == false || ++result_counter == QUEUE_SIZE) { |
mzta | 0:225c1da086a1 | 394 | break; |
mzta | 0:225c1da086a1 | 395 | } |
mzta | 0:225c1da086a1 | 396 | } |
mzta | 0:225c1da086a1 | 397 | } |
mzta | 0:225c1da086a1 | 398 | MBED_HOSTTEST_RESULT(result); |
mzta | 0:225c1da086a1 | 399 | return 0; |
mzta | 0:225c1da086a1 | 400 | } |
mzta | 0:225c1da086a1 | 401 | |
mzta | 0:225c1da086a1 | 402 | #elif defined(TEST_89_MAIL) |
mzta | 0:225c1da086a1 | 403 | |
mzta | 0:225c1da086a1 | 404 | typedef struct { |
mzta | 0:225c1da086a1 | 405 | float voltage; /* AD result of measured voltage */ |
mzta | 0:225c1da086a1 | 406 | float current; /* AD result of measured current */ |
mzta | 0:225c1da086a1 | 407 | uint32_t counter; /* A counter value */ |
mzta | 0:225c1da086a1 | 408 | } mail_t; |
mzta | 0:225c1da086a1 | 409 | |
mzta | 0:225c1da086a1 | 410 | #define CREATE_VOLTAGE(COUNTER) (COUNTER * 0.1) * 33 |
mzta | 0:225c1da086a1 | 411 | #define CREATE_CURRENT(COUNTER) (COUNTER * 0.1) * 11 |
mzta | 0:225c1da086a1 | 412 | #define QUEUE_SIZE 16 |
mzta | 0:225c1da086a1 | 413 | #define QUEUE_PUT_DELAY 100 |
mzta | 0:225c1da086a1 | 414 | |
mzta | 0:225c1da086a1 | 415 | /* |
mzta | 0:225c1da086a1 | 416 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 417 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 418 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 419 | */ |
mzta | 0:225c1da086a1 | 420 | #if (defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 421 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 422 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_GCC) |
mzta | 0:225c1da086a1 | 423 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 424 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 425 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 426 | #else |
mzta | 0:225c1da086a1 | 427 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 428 | #endif |
mzta | 0:225c1da086a1 | 429 | |
mzta | 0:225c1da086a1 | 430 | Mail<mail_t, QUEUE_SIZE> mail_box; |
mzta | 0:225c1da086a1 | 431 | |
mzta | 0:225c1da086a1 | 432 | void send_thread (void const *argument) { |
mzta | 0:225c1da086a1 | 433 | static uint32_t i = 10; |
mzta | 0:225c1da086a1 | 434 | while (true) { |
mzta | 0:225c1da086a1 | 435 | i++; // fake data update |
mzta | 0:225c1da086a1 | 436 | mail_t *mail = mail_box.alloc(); |
mzta | 0:225c1da086a1 | 437 | mail->voltage = CREATE_VOLTAGE(i); |
mzta | 0:225c1da086a1 | 438 | mail->current = CREATE_CURRENT(i); |
mzta | 0:225c1da086a1 | 439 | mail->counter = i; |
mzta | 0:225c1da086a1 | 440 | mail_box.put(mail); |
mzta | 0:225c1da086a1 | 441 | Thread::wait(QUEUE_PUT_DELAY); |
mzta | 0:225c1da086a1 | 442 | } |
mzta | 0:225c1da086a1 | 443 | } |
mzta | 0:225c1da086a1 | 444 | |
mzta | 0:225c1da086a1 | 445 | int main (void) { |
mzta | 0:225c1da086a1 | 446 | MBED_HOSTTEST_TIMEOUT(20); |
mzta | 0:225c1da086a1 | 447 | MBED_HOSTTEST_SELECT(default_auto); |
mzta | 0:225c1da086a1 | 448 | MBED_HOSTTEST_DESCRIPTION(Mail messaging); |
mzta | 0:225c1da086a1 | 449 | MBED_HOSTTEST_START("RTOS_6"); |
mzta | 0:225c1da086a1 | 450 | |
mzta | 0:225c1da086a1 | 451 | Thread thread(send_thread, NULL, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 452 | bool result = true; |
mzta | 0:225c1da086a1 | 453 | int result_counter = 0; |
mzta | 0:225c1da086a1 | 454 | |
mzta | 0:225c1da086a1 | 455 | while (true) { |
mzta | 0:225c1da086a1 | 456 | osEvent evt = mail_box.get(); |
mzta | 0:225c1da086a1 | 457 | if (evt.status == osEventMail) { |
mzta | 0:225c1da086a1 | 458 | mail_t *mail = (mail_t*)evt.value.p; |
mzta | 0:225c1da086a1 | 459 | const float expected_voltage = CREATE_VOLTAGE(mail->counter); |
mzta | 0:225c1da086a1 | 460 | const float expected_current = CREATE_CURRENT(mail->counter); |
mzta | 0:225c1da086a1 | 461 | // Check using macros if received values correspond to values sent via queue |
mzta | 0:225c1da086a1 | 462 | bool expected_values = (expected_voltage == mail->voltage) && |
mzta | 0:225c1da086a1 | 463 | (expected_current == mail->current); |
mzta | 0:225c1da086a1 | 464 | result = result && expected_values; |
mzta | 0:225c1da086a1 | 465 | const char *result_msg = expected_values ? "OK" : "FAIL"; |
mzta | 0:225c1da086a1 | 466 | printf("%3d %.2fV %.2fA ... [%s]\r\n", mail->counter, |
mzta | 0:225c1da086a1 | 467 | mail->voltage, |
mzta | 0:225c1da086a1 | 468 | mail->current, |
mzta | 0:225c1da086a1 | 469 | result_msg); |
mzta | 0:225c1da086a1 | 470 | mail_box.free(mail); |
mzta | 0:225c1da086a1 | 471 | if (result == false || ++result_counter == QUEUE_SIZE) { |
mzta | 0:225c1da086a1 | 472 | break; |
mzta | 0:225c1da086a1 | 473 | } |
mzta | 0:225c1da086a1 | 474 | } |
mzta | 0:225c1da086a1 | 475 | } |
mzta | 0:225c1da086a1 | 476 | MBED_HOSTTEST_RESULT(result); |
mzta | 0:225c1da086a1 | 477 | return 0; |
mzta | 0:225c1da086a1 | 478 | } |
mzta | 0:225c1da086a1 | 479 | |
mzta | 0:225c1da086a1 | 480 | #elif defined(TEST_90_TIMER) |
mzta | 0:225c1da086a1 | 481 | |
mzta | 0:225c1da086a1 | 482 | DigitalOut LEDs[4] = { |
mzta | 0:225c1da086a1 | 483 | DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4) |
mzta | 0:225c1da086a1 | 484 | }; |
mzta | 0:225c1da086a1 | 485 | |
mzta | 0:225c1da086a1 | 486 | void print_char(char c = '*') |
mzta | 0:225c1da086a1 | 487 | { |
mzta | 0:225c1da086a1 | 488 | printf("%c", c); |
mzta | 0:225c1da086a1 | 489 | fflush(stdout); |
mzta | 0:225c1da086a1 | 490 | } |
mzta | 0:225c1da086a1 | 491 | |
mzta | 0:225c1da086a1 | 492 | void blink(void const *n) { |
mzta | 0:225c1da086a1 | 493 | static int counter = 0; |
mzta | 0:225c1da086a1 | 494 | const int led_id = int(n); |
mzta | 0:225c1da086a1 | 495 | LEDs[led_id] = !LEDs[led_id]; |
mzta | 0:225c1da086a1 | 496 | if (++counter == 75) { |
mzta | 0:225c1da086a1 | 497 | print_char(); |
mzta | 0:225c1da086a1 | 498 | counter = 0; |
mzta | 0:225c1da086a1 | 499 | } |
mzta | 0:225c1da086a1 | 500 | } |
mzta | 0:225c1da086a1 | 501 | |
mzta | 0:225c1da086a1 | 502 | int main(void) { |
mzta | 0:225c1da086a1 | 503 | MBED_HOSTTEST_TIMEOUT(15); |
mzta | 0:225c1da086a1 | 504 | MBED_HOSTTEST_SELECT(wait_us_auto); |
mzta | 0:225c1da086a1 | 505 | MBED_HOSTTEST_DESCRIPTION(Timer); |
mzta | 0:225c1da086a1 | 506 | MBED_HOSTTEST_START("RTOS_7"); |
mzta | 0:225c1da086a1 | 507 | |
mzta | 0:225c1da086a1 | 508 | RtosTimer led_1_timer(blink, osTimerPeriodic, (void *)0); |
mzta | 0:225c1da086a1 | 509 | RtosTimer led_2_timer(blink, osTimerPeriodic, (void *)1); |
mzta | 0:225c1da086a1 | 510 | RtosTimer led_3_timer(blink, osTimerPeriodic, (void *)2); |
mzta | 0:225c1da086a1 | 511 | RtosTimer led_4_timer(blink, osTimerPeriodic, (void *)3); |
mzta | 0:225c1da086a1 | 512 | |
mzta | 0:225c1da086a1 | 513 | led_1_timer.start(200); |
mzta | 0:225c1da086a1 | 514 | led_2_timer.start(100); |
mzta | 0:225c1da086a1 | 515 | led_3_timer.start(50); |
mzta | 0:225c1da086a1 | 516 | led_4_timer.start(25); |
mzta | 0:225c1da086a1 | 517 | |
mzta | 0:225c1da086a1 | 518 | Thread::wait(osWaitForever); |
mzta | 0:225c1da086a1 | 519 | } |
mzta | 0:225c1da086a1 | 520 | |
mzta | 0:225c1da086a1 | 521 | #elif defined(TEST_91_ISR) |
mzta | 0:225c1da086a1 | 522 | |
mzta | 0:225c1da086a1 | 523 | #define QUEUE_SIZE 5 |
mzta | 0:225c1da086a1 | 524 | #define THREAD_DELAY 250 |
mzta | 0:225c1da086a1 | 525 | #define QUEUE_PUT_ISR_VALUE 128 |
mzta | 0:225c1da086a1 | 526 | #define QUEUE_PUT_THREAD_VALUE 127 |
mzta | 0:225c1da086a1 | 527 | |
mzta | 0:225c1da086a1 | 528 | /* |
mzta | 0:225c1da086a1 | 529 | * The stack size is defined in cmsis_os.h mainly dependent on the underlying toolchain and |
mzta | 0:225c1da086a1 | 530 | * the C standard library. For GCC, ARM_STD and IAR it is defined with a size of 2048 bytes |
mzta | 0:225c1da086a1 | 531 | * and for ARM_MICRO 512. Because of reduce RAM size some targets need a reduced stacksize. |
mzta | 0:225c1da086a1 | 532 | */ |
mzta | 0:225c1da086a1 | 533 | #if defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8) |
mzta | 0:225c1da086a1 | 534 | #define STACK_SIZE DEFAULT_STACK_SIZE/4 |
mzta | 0:225c1da086a1 | 535 | #elif (defined(TARGET_STM32F030R8)) && defined(TOOLCHAIN_IAR) |
mzta | 0:225c1da086a1 | 536 | #define STACK_SIZE DEFAULT_STACK_SIZE/2 |
mzta | 0:225c1da086a1 | 537 | #else |
mzta | 0:225c1da086a1 | 538 | #define STACK_SIZE DEFAULT_STACK_SIZE |
mzta | 0:225c1da086a1 | 539 | #endif |
mzta | 0:225c1da086a1 | 540 | |
mzta | 0:225c1da086a1 | 541 | Queue<uint32_t, QUEUE_SIZE> queue; |
mzta | 0:225c1da086a1 | 542 | |
mzta | 0:225c1da086a1 | 543 | DigitalOut myled(LED1); |
mzta | 0:225c1da086a1 | 544 | |
mzta | 0:225c1da086a1 | 545 | void queue_isr() { |
mzta | 0:225c1da086a1 | 546 | |
mzta | 0:225c1da086a1 | 547 | queue.put((uint32_t*)QUEUE_PUT_ISR_VALUE); |
mzta | 0:225c1da086a1 | 548 | myled = !myled; |
mzta | 0:225c1da086a1 | 549 | } |
mzta | 0:225c1da086a1 | 550 | |
mzta | 0:225c1da086a1 | 551 | void queue_thread(void const *argument) { |
mzta | 0:225c1da086a1 | 552 | while (true) { |
mzta | 0:225c1da086a1 | 553 | queue.put((uint32_t*)QUEUE_PUT_THREAD_VALUE); |
mzta | 0:225c1da086a1 | 554 | Thread::wait(THREAD_DELAY); |
mzta | 0:225c1da086a1 | 555 | } |
mzta | 0:225c1da086a1 | 556 | } |
mzta | 0:225c1da086a1 | 557 | |
mzta | 0:225c1da086a1 | 558 | int main (void) { |
mzta | 0:225c1da086a1 | 559 | MBED_HOSTTEST_TIMEOUT(20); |
mzta | 0:225c1da086a1 | 560 | MBED_HOSTTEST_SELECT(default_auto); |
mzta | 0:225c1da086a1 | 561 | MBED_HOSTTEST_DESCRIPTION(ISR (Queue)); |
mzta | 0:225c1da086a1 | 562 | MBED_HOSTTEST_START("RTOS_8"); |
mzta | 0:225c1da086a1 | 563 | |
mzta | 0:225c1da086a1 | 564 | Thread thread(queue_thread, NULL, osPriorityNormal, STACK_SIZE); |
mzta | 0:225c1da086a1 | 565 | Ticker ticker; |
mzta | 0:225c1da086a1 | 566 | ticker.attach(queue_isr, 1.0); |
mzta | 0:225c1da086a1 | 567 | int isr_puts_counter = 0; |
mzta | 0:225c1da086a1 | 568 | bool result = true; |
mzta | 0:225c1da086a1 | 569 | |
mzta | 0:225c1da086a1 | 570 | while (true) { |
mzta | 0:225c1da086a1 | 571 | osEvent evt = queue.get(); |
mzta | 0:225c1da086a1 | 572 | if (evt.status != osEventMessage) { |
mzta | 0:225c1da086a1 | 573 | printf("QUEUE_GET: Status(0x%02X) ... [FAIL]\r\n", evt.status); |
mzta | 0:225c1da086a1 | 574 | result = false; |
mzta | 0:225c1da086a1 | 575 | break; |
mzta | 0:225c1da086a1 | 576 | } else { |
mzta | 0:225c1da086a1 | 577 | printf("QUEUE_GET: Value(%u) ... [OK]\r\n", evt.value.v); |
mzta | 0:225c1da086a1 | 578 | if (evt.value.v == QUEUE_PUT_ISR_VALUE) { |
mzta | 0:225c1da086a1 | 579 | isr_puts_counter++; |
mzta | 0:225c1da086a1 | 580 | } |
mzta | 0:225c1da086a1 | 581 | if (isr_puts_counter >= QUEUE_SIZE) { |
mzta | 0:225c1da086a1 | 582 | break; |
mzta | 0:225c1da086a1 | 583 | } |
mzta | 0:225c1da086a1 | 584 | } |
mzta | 0:225c1da086a1 | 585 | } |
mzta | 0:225c1da086a1 | 586 | |
mzta | 0:225c1da086a1 | 587 | MBED_HOSTTEST_RESULT(result); |
mzta | 0:225c1da086a1 | 588 | return 0; |
mzta | 0:225c1da086a1 | 589 | } |
mzta | 0:225c1da086a1 | 590 | |
mzta | 0:225c1da086a1 | 591 | #endif |