Donald Meyers / Mbed OS evan
Committer:
djmeyers
Date:
Sat Mar 18 22:37:16 2017 +0000
Revision:
0:06ee5f8a484a
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djmeyers 0:06ee5f8a484a 1 /*
djmeyers 0:06ee5f8a484a 2 * Copyright (c) 2016 ARM Limited. All rights reserved.
djmeyers 0:06ee5f8a484a 3 * SPDX-License-Identifier: Apache-2.0
djmeyers 0:06ee5f8a484a 4 * Licensed under the Apache License, Version 2.0 (the License); you may
djmeyers 0:06ee5f8a484a 5 * not use this file except in compliance with the License.
djmeyers 0:06ee5f8a484a 6 * You may obtain a copy of the License at
djmeyers 0:06ee5f8a484a 7 *
djmeyers 0:06ee5f8a484a 8 * http://www.apache.org/licenses/LICENSE-2.0
djmeyers 0:06ee5f8a484a 9 *
djmeyers 0:06ee5f8a484a 10 * Unless required by applicable law or agreed to in writing, software
djmeyers 0:06ee5f8a484a 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
djmeyers 0:06ee5f8a484a 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
djmeyers 0:06ee5f8a484a 13 * See the License for the specific language governing permissions and
djmeyers 0:06ee5f8a484a 14 * limitations under the License.
djmeyers 0:06ee5f8a484a 15 */
djmeyers 0:06ee5f8a484a 16
djmeyers 0:06ee5f8a484a 17 #include "pal_rtos_test_utils.h"
djmeyers 0:06ee5f8a484a 18 #include "pal_rtos.h"
djmeyers 0:06ee5f8a484a 19 #include "unity_fixture.h"
djmeyers 0:06ee5f8a484a 20
djmeyers 0:06ee5f8a484a 21 #include "pal.h"
djmeyers 0:06ee5f8a484a 22
djmeyers 0:06ee5f8a484a 23 threadsArgument_t threadsArg;
djmeyers 0:06ee5f8a484a 24 timerArgument_t timerArgs;
djmeyers 0:06ee5f8a484a 25
djmeyers 0:06ee5f8a484a 26 void palThreadFunc1(void const *argument)
djmeyers 0:06ee5f8a484a 27 {
djmeyers 0:06ee5f8a484a 28 palThreadID_t threadID = 10;
djmeyers 0:06ee5f8a484a 29 uint32_t* threadStorage = NULL;
djmeyers 0:06ee5f8a484a 30 threadsArgument_t *tmp = (threadsArgument_t*)argument;
djmeyers 0:06ee5f8a484a 31 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 32 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 33 TEST_PRINTF("palThreadFunc1::before mutex\n");
djmeyers 0:06ee5f8a484a 34 status = pal_osMutexWait(mutex1, 100);
djmeyers 0:06ee5f8a484a 35 TEST_PRINTF("palThreadFunc1::after mutex: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 36 TEST_PRINTF("palThreadFunc1::after mutex (expected): 0x%08x\n", PAL_ERR_RTOS_TIMEOUT);
djmeyers 0:06ee5f8a484a 37 TEST_ASSERT_EQUAL(PAL_ERR_RTOS_TIMEOUT, status);
djmeyers 0:06ee5f8a484a 38 return; // for Mutex scenario, this should end here
djmeyers 0:06ee5f8a484a 39 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 40
djmeyers 0:06ee5f8a484a 41 tmp->arg1 = 10;
djmeyers 0:06ee5f8a484a 42
djmeyers 0:06ee5f8a484a 43 threadID = pal_osThreadGetId();
djmeyers 0:06ee5f8a484a 44 TEST_PRINTF("palThreadFunc1::Thread ID is %d\n", threadID);
djmeyers 0:06ee5f8a484a 45
djmeyers 0:06ee5f8a484a 46 threadStorage = pal_osThreadGetLocalStore();
djmeyers 0:06ee5f8a484a 47 if (threadStorage == g_threadStorage)
djmeyers 0:06ee5f8a484a 48 {
djmeyers 0:06ee5f8a484a 49 TEST_PRINTF("Thread storage updated as expected\n");
djmeyers 0:06ee5f8a484a 50 }
djmeyers 0:06ee5f8a484a 51 TEST_ASSERT_EQUAL(threadStorage, g_threadStorage);
djmeyers 0:06ee5f8a484a 52 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 53 status = pal_osMutexRelease(mutex1);
djmeyers 0:06ee5f8a484a 54 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 55 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 56 TEST_PRINTF("palThreadFunc1::STAAAAM\n");
djmeyers 0:06ee5f8a484a 57
djmeyers 0:06ee5f8a484a 58 }
djmeyers 0:06ee5f8a484a 59
djmeyers 0:06ee5f8a484a 60 void palThreadFunc2(void const *argument)
djmeyers 0:06ee5f8a484a 61 {
djmeyers 0:06ee5f8a484a 62
djmeyers 0:06ee5f8a484a 63 palThreadID_t threadID = 10;
djmeyers 0:06ee5f8a484a 64 threadsArgument_t *tmp = (threadsArgument_t*)argument;
djmeyers 0:06ee5f8a484a 65 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 66 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 67 TEST_PRINTF("palThreadFunc2::before mutex\n");
djmeyers 0:06ee5f8a484a 68 status = pal_osMutexWait(mutex2, 300);
djmeyers 0:06ee5f8a484a 69 TEST_PRINTF("palThreadFunc2::after mutex: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 70 TEST_PRINTF("palThreadFunc2::after mutex (expected): 0x%08x\n", PAL_SUCCESS);
djmeyers 0:06ee5f8a484a 71 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 72 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 73
djmeyers 0:06ee5f8a484a 74 tmp->arg2 = 20;
djmeyers 0:06ee5f8a484a 75
djmeyers 0:06ee5f8a484a 76 threadID = pal_osThreadGetId();
djmeyers 0:06ee5f8a484a 77 TEST_PRINTF("palThreadFunc2::Thread ID is %d\n", threadID);
djmeyers 0:06ee5f8a484a 78 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 79 status = pal_osMutexRelease(mutex2);
djmeyers 0:06ee5f8a484a 80 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 81 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 82 TEST_PRINTF("palThreadFunc2::STAAAAM\n");
djmeyers 0:06ee5f8a484a 83 }
djmeyers 0:06ee5f8a484a 84
djmeyers 0:06ee5f8a484a 85 void palThreadFunc3(void const *argument)
djmeyers 0:06ee5f8a484a 86 {
djmeyers 0:06ee5f8a484a 87
djmeyers 0:06ee5f8a484a 88 palThreadID_t threadID = 10;
djmeyers 0:06ee5f8a484a 89 threadsArgument_t *tmp = (threadsArgument_t*)argument;
djmeyers 0:06ee5f8a484a 90
djmeyers 0:06ee5f8a484a 91 #ifdef SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 92 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 93 uint32_t semaphoresAvailable = 10;
djmeyers 0:06ee5f8a484a 94 status = pal_osSemaphoreWait(semaphore1, 200, &semaphoresAvailable);
djmeyers 0:06ee5f8a484a 95
djmeyers 0:06ee5f8a484a 96 if (PAL_SUCCESS == status)
djmeyers 0:06ee5f8a484a 97 {
djmeyers 0:06ee5f8a484a 98 TEST_PRINTF("palThreadFunc3::semaphoresAvailable: %d\n", semaphoresAvailable);
djmeyers 0:06ee5f8a484a 99 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 100 }
djmeyers 0:06ee5f8a484a 101 else if(PAL_ERR_RTOS_TIMEOUT == status)
djmeyers 0:06ee5f8a484a 102 {
djmeyers 0:06ee5f8a484a 103 TEST_PRINTF("palThreadFunc3::semaphoresAvailable: %d\n", semaphoresAvailable);
djmeyers 0:06ee5f8a484a 104 TEST_PRINTF("palThreadFunc3::status: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 105 TEST_PRINTF("palThreadFunc3::failed to get Semaphore as expected\n", status);
djmeyers 0:06ee5f8a484a 106 TEST_ASSERT_EQUAL(PAL_ERR_RTOS_TIMEOUT, status);
djmeyers 0:06ee5f8a484a 107 return;
djmeyers 0:06ee5f8a484a 108 }
djmeyers 0:06ee5f8a484a 109 pal_osDelay(6000);
djmeyers 0:06ee5f8a484a 110 #endif //SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 111 tmp->arg3 = 30;
djmeyers 0:06ee5f8a484a 112 threadID = pal_osThreadGetId();
djmeyers 0:06ee5f8a484a 113 TEST_PRINTF("palThreadFunc3::Thread ID is %d\n", threadID);
djmeyers 0:06ee5f8a484a 114
djmeyers 0:06ee5f8a484a 115 #ifdef SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 116 status = pal_osSemaphoreRelease(semaphore1);
djmeyers 0:06ee5f8a484a 117 TEST_PRINTF("palThreadFunc3::pal_osSemaphoreRelease res: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 118 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 119 #endif //SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 120 TEST_PRINTF("palThreadFunc3::STAAAAM\n");
djmeyers 0:06ee5f8a484a 121 }
djmeyers 0:06ee5f8a484a 122
djmeyers 0:06ee5f8a484a 123 void palThreadFunc4(void const *argument)
djmeyers 0:06ee5f8a484a 124 {
djmeyers 0:06ee5f8a484a 125 palThreadID_t threadID = 10;
djmeyers 0:06ee5f8a484a 126 threadsArgument_t *tmp = (threadsArgument_t*)argument;
djmeyers 0:06ee5f8a484a 127 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 128 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 129 TEST_PRINTF("palThreadFunc4::before mutex\n");
djmeyers 0:06ee5f8a484a 130 status = pal_osMutexWait(mutex1, 200);
djmeyers 0:06ee5f8a484a 131 TEST_PRINTF("palThreadFunc4::after mutex: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 132 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 133 pal_osDelay(3500); //wait 3.5 seconds to make sure that the next thread arrive to this point
djmeyers 0:06ee5f8a484a 134 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 135
djmeyers 0:06ee5f8a484a 136
djmeyers 0:06ee5f8a484a 137 tmp->arg4 = 40;
djmeyers 0:06ee5f8a484a 138
djmeyers 0:06ee5f8a484a 139 threadID = pal_osThreadGetId();
djmeyers 0:06ee5f8a484a 140 TEST_PRINTF("Thread ID is %d\n", threadID);
djmeyers 0:06ee5f8a484a 141
djmeyers 0:06ee5f8a484a 142
djmeyers 0:06ee5f8a484a 143
djmeyers 0:06ee5f8a484a 144 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 145 status = pal_osMutexRelease(mutex1);
djmeyers 0:06ee5f8a484a 146 TEST_PRINTF("palThreadFunc4::after release mutex: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 147 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 148 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 149 TEST_PRINTF("palThreadFunc4::STAAAAM\n");
djmeyers 0:06ee5f8a484a 150 }
djmeyers 0:06ee5f8a484a 151
djmeyers 0:06ee5f8a484a 152 void palThreadFunc5(void const *argument)
djmeyers 0:06ee5f8a484a 153 {
djmeyers 0:06ee5f8a484a 154 palThreadID_t threadID = 10;
djmeyers 0:06ee5f8a484a 155 threadsArgument_t *tmp = (threadsArgument_t*)argument;
djmeyers 0:06ee5f8a484a 156 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 157 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 158 TEST_PRINTF("palThreadFunc5::before mutex\n");
djmeyers 0:06ee5f8a484a 159 status = pal_osMutexWait(mutex1, 4500);
djmeyers 0:06ee5f8a484a 160 TEST_PRINTF("palThreadFunc5::after mutex: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 161 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 162 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 163 tmp->arg5 = 50;
djmeyers 0:06ee5f8a484a 164
djmeyers 0:06ee5f8a484a 165 threadID = pal_osThreadGetId();
djmeyers 0:06ee5f8a484a 166 TEST_PRINTF("Thread ID is %d\n", threadID);
djmeyers 0:06ee5f8a484a 167 #ifdef MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 168 status = pal_osMutexRelease(mutex1);
djmeyers 0:06ee5f8a484a 169 TEST_PRINTF("palThreadFunc5::after release mutex: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 170 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 171 #endif //MUTEX_UNITY_TEST
djmeyers 0:06ee5f8a484a 172 TEST_PRINTF("palThreadFunc5::STAAAAM\n");
djmeyers 0:06ee5f8a484a 173 }
djmeyers 0:06ee5f8a484a 174
djmeyers 0:06ee5f8a484a 175 void palThreadFunc6(void const *argument)
djmeyers 0:06ee5f8a484a 176 {
djmeyers 0:06ee5f8a484a 177 palThreadID_t threadID = 10;
djmeyers 0:06ee5f8a484a 178 threadsArgument_t *tmp = (threadsArgument_t*)argument;
djmeyers 0:06ee5f8a484a 179 #ifdef SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 180 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 181 uint32_t semaphoresAvailable = 10;
djmeyers 0:06ee5f8a484a 182 status = pal_osSemaphoreWait(123456, 200, &semaphoresAvailable); //MUST fail, since there is no semaphore with ID=3
djmeyers 0:06ee5f8a484a 183 TEST_PRINTF("palThreadFunc6::semaphoresAvailable: %d\n", semaphoresAvailable);
djmeyers 0:06ee5f8a484a 184 TEST_ASSERT_EQUAL(PAL_ERR_RTOS_PARAMETER, status);
djmeyers 0:06ee5f8a484a 185 return;
djmeyers 0:06ee5f8a484a 186 #endif //SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 187 tmp->arg6 = 60;
djmeyers 0:06ee5f8a484a 188
djmeyers 0:06ee5f8a484a 189 threadID = pal_osThreadGetId();
djmeyers 0:06ee5f8a484a 190 TEST_PRINTF("Thread ID is %d\n", threadID);
djmeyers 0:06ee5f8a484a 191 #ifdef SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 192 status = pal_osSemaphoreRelease(123456);
djmeyers 0:06ee5f8a484a 193 TEST_PRINTF("palThreadFunc6::pal_osSemaphoreRelease res: 0x%08x\n", status);
djmeyers 0:06ee5f8a484a 194 TEST_ASSERT_EQUAL(PAL_ERR_RTOS_PARAMETER, status);
djmeyers 0:06ee5f8a484a 195 #endif //SEMAPHORE_UNITY_TEST
djmeyers 0:06ee5f8a484a 196 TEST_PRINTF("palThreadFunc6::STAAAAM\n");
djmeyers 0:06ee5f8a484a 197 }
djmeyers 0:06ee5f8a484a 198
djmeyers 0:06ee5f8a484a 199
djmeyers 0:06ee5f8a484a 200 void palTimerFunc1(void const *argument)
djmeyers 0:06ee5f8a484a 201 {
djmeyers 0:06ee5f8a484a 202 g_timerArgs.ticksInFunc1 = pal_osKernelSysTick();
djmeyers 0:06ee5f8a484a 203 TEST_PRINTF("ticks in palTimerFunc1: 0 - %d\n", g_timerArgs.ticksInFunc1);
djmeyers 0:06ee5f8a484a 204 TEST_PRINTF("Once Timer function was called\n");
djmeyers 0:06ee5f8a484a 205 }
djmeyers 0:06ee5f8a484a 206
djmeyers 0:06ee5f8a484a 207 void palTimerFunc2(void const *argument)
djmeyers 0:06ee5f8a484a 208 {
djmeyers 0:06ee5f8a484a 209 g_timerArgs.ticksInFunc2 = pal_osKernelSysTick();
djmeyers 0:06ee5f8a484a 210 TEST_PRINTF("ticks in palTimerFunc2: 0 - %d\n", g_timerArgs.ticksInFunc2);
djmeyers 0:06ee5f8a484a 211 TEST_PRINTF("Periodic Timer function was called\n");
djmeyers 0:06ee5f8a484a 212 }
djmeyers 0:06ee5f8a484a 213
djmeyers 0:06ee5f8a484a 214 void palThreadFuncCustom1(void const *argument)
djmeyers 0:06ee5f8a484a 215 {
djmeyers 0:06ee5f8a484a 216 TEST_PRINTF("palThreadFuncCustom1 was called\n");
djmeyers 0:06ee5f8a484a 217 }
djmeyers 0:06ee5f8a484a 218
djmeyers 0:06ee5f8a484a 219 void palThreadFuncCustom2(void const *argument)
djmeyers 0:06ee5f8a484a 220 {
djmeyers 0:06ee5f8a484a 221 TEST_PRINTF("palThreadFuncCustom2 was called\n");
djmeyers 0:06ee5f8a484a 222 }
djmeyers 0:06ee5f8a484a 223
djmeyers 0:06ee5f8a484a 224 void palThreadFuncCustom3(void const *argument)
djmeyers 0:06ee5f8a484a 225 {
djmeyers 0:06ee5f8a484a 226 TEST_PRINTF("palThreadFuncCustom3 was called\n");
djmeyers 0:06ee5f8a484a 227 }
djmeyers 0:06ee5f8a484a 228
djmeyers 0:06ee5f8a484a 229 void palThreadFuncCustom4(void const *argument)
djmeyers 0:06ee5f8a484a 230 {
djmeyers 0:06ee5f8a484a 231 TEST_PRINTF("palThreadFuncCustom4 was called\n");
djmeyers 0:06ee5f8a484a 232 }
djmeyers 0:06ee5f8a484a 233
djmeyers 0:06ee5f8a484a 234 void palRunThreads()
djmeyers 0:06ee5f8a484a 235 {
djmeyers 0:06ee5f8a484a 236 palStatus_t status = PAL_SUCCESS;
djmeyers 0:06ee5f8a484a 237 palThreadID_t threadID1 = NULLPTR;
djmeyers 0:06ee5f8a484a 238 palThreadID_t threadID2 = NULLPTR;
djmeyers 0:06ee5f8a484a 239 palThreadID_t threadID3 = NULLPTR;
djmeyers 0:06ee5f8a484a 240 palThreadID_t threadID4 = NULLPTR;
djmeyers 0:06ee5f8a484a 241 palThreadID_t threadID5 = NULLPTR;
djmeyers 0:06ee5f8a484a 242 palThreadID_t threadID6 = NULLPTR;
djmeyers 0:06ee5f8a484a 243
djmeyers 0:06ee5f8a484a 244 uint32_t *stack1 = malloc(THREAD_STACK_SIZE);
djmeyers 0:06ee5f8a484a 245 uint32_t *stack2 = malloc(THREAD_STACK_SIZE);
djmeyers 0:06ee5f8a484a 246 uint32_t *stack3 = malloc(THREAD_STACK_SIZE);
djmeyers 0:06ee5f8a484a 247 uint32_t *stack4 = malloc(THREAD_STACK_SIZE);
djmeyers 0:06ee5f8a484a 248 uint32_t *stack5 = malloc(THREAD_STACK_SIZE);
djmeyers 0:06ee5f8a484a 249 uint32_t *stack6 = malloc(THREAD_STACK_SIZE);
djmeyers 0:06ee5f8a484a 250
djmeyers 0:06ee5f8a484a 251 status = pal_init(NULL);
djmeyers 0:06ee5f8a484a 252 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 253
djmeyers 0:06ee5f8a484a 254 status = pal_osThreadCreate(palThreadFunc1, &g_threadsArg, PAL_osPriorityIdle, THREAD_STACK_SIZE, stack1, (palThreadLocalStore_t *)g_threadStorage, &threadID1);
djmeyers 0:06ee5f8a484a 255 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 256
djmeyers 0:06ee5f8a484a 257 status = pal_osThreadCreate(palThreadFunc2, &g_threadsArg, PAL_osPriorityLow, THREAD_STACK_SIZE, stack2, NULL, &threadID2);
djmeyers 0:06ee5f8a484a 258 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 259
djmeyers 0:06ee5f8a484a 260 status = pal_osThreadCreate(palThreadFunc3, &g_threadsArg, PAL_osPriorityNormal, THREAD_STACK_SIZE, stack3, NULL, &threadID3);
djmeyers 0:06ee5f8a484a 261 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 262
djmeyers 0:06ee5f8a484a 263 status = pal_osThreadCreate(palThreadFunc4, &g_threadsArg, PAL_osPriorityBelowNormal, THREAD_STACK_SIZE, stack4, NULL, &threadID4);
djmeyers 0:06ee5f8a484a 264 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 265
djmeyers 0:06ee5f8a484a 266 status = pal_osThreadCreate(palThreadFunc5, &g_threadsArg, PAL_osPriorityAboveNormal, THREAD_STACK_SIZE, stack5, NULL, &threadID5);
djmeyers 0:06ee5f8a484a 267 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 268
djmeyers 0:06ee5f8a484a 269 status = pal_osThreadCreate(palThreadFunc6, &g_threadsArg, PAL_osPriorityHigh, THREAD_STACK_SIZE, stack6, NULL, &threadID6);
djmeyers 0:06ee5f8a484a 270 TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
djmeyers 0:06ee5f8a484a 271
djmeyers 0:06ee5f8a484a 272
djmeyers 0:06ee5f8a484a 273 free(stack1);
djmeyers 0:06ee5f8a484a 274 free(stack2);
djmeyers 0:06ee5f8a484a 275 free(stack3);
djmeyers 0:06ee5f8a484a 276 free(stack4);
djmeyers 0:06ee5f8a484a 277 free(stack5);
djmeyers 0:06ee5f8a484a 278 free(stack6);
djmeyers 0:06ee5f8a484a 279 }