git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9010 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
81b60dab38
commit
572f22cd20
|
@ -98,7 +98,7 @@ include $(CHIBIOS)/os/hal/osal/rt/osal.mk
|
||||||
include $(CHIBIOS)/os/rt/rt.mk
|
include $(CHIBIOS)/os/rt/rt.mk
|
||||||
include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
|
include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
|
||||||
# Other files (optional).
|
# Other files (optional).
|
||||||
include $(CHIBIOS)/test/rt/test.mk
|
include $(CHIBIOS)/test/nasa_osal/test.mk
|
||||||
include $(CHIBIOS)/os/common/abstractions/nasa_osal/nasa_osal.mk
|
include $(CHIBIOS)/os/common/abstractions/nasa_osal/nasa_osal.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
|
#include "ch_test.h"
|
||||||
#include "osapi.h"
|
#include "osapi.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -62,9 +63,10 @@ int main(void) {
|
||||||
|
|
||||||
/* In the ChibiOS/RT OSAL implementation the main() function is an
|
/* In the ChibiOS/RT OSAL implementation the main() function is an
|
||||||
usable thread with priority 128 (NORMALPRIO), here we just sleep
|
usable thread with priority 128 (NORMALPRIO), here we just sleep
|
||||||
in a loop printing a message on the serial port.*/
|
waiting for a button event, then the test suite is executed.*/
|
||||||
while (true) {
|
while (true) {
|
||||||
sdWrite(&SD2, (uint8_t *)"Hello World!\r\n", 14);
|
if (palReadLine(LINE_BUTTON))
|
||||||
|
test_execute((BaseSequentialStream *)&SD2);
|
||||||
OS_TaskDelay(500);
|
OS_TaskDelay(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# List of all the NASA OSAL over ChibiOS/RT test files.
|
||||||
|
TESTSRC = ${CHIBIOS}/test/lib/ch_test.c \
|
||||||
|
${CHIBIOS}/test/nasa_osal/test_root.c \
|
||||||
|
${CHIBIOS}/test/nasa_osal/test_sequence_001.c
|
||||||
|
|
||||||
|
# Required include directories
|
||||||
|
TESTINC = ${CHIBIOS}/test/lib \
|
||||||
|
${CHIBIOS}/test/nasa_osal
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file test_root.c
|
||||||
|
* @brief Test Suite root structures code.
|
||||||
|
*
|
||||||
|
* @addtogroup CH_TEST_ROOT
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hal.h"
|
||||||
|
#include "ch_test.h"
|
||||||
|
#include "osapi.h"
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Module exported variables. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
THD_WORKING_AREA(wa_test1, TASKS_STACK_SIZE);
|
||||||
|
THD_WORKING_AREA(wa_test2, TASKS_STACK_SIZE);
|
||||||
|
THD_WORKING_AREA(wa_test3, TASKS_STACK_SIZE);
|
||||||
|
THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Array of all the test sequences.
|
||||||
|
*/
|
||||||
|
const testcase_t * const *test_suite[] = {
|
||||||
|
test_sequence_001,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Shared code. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file test_root.h
|
||||||
|
* @brief Test Suite root structures header.
|
||||||
|
*
|
||||||
|
* @addtogroup CH_TEST_ROOT
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TEST_ROOT_H_
|
||||||
|
#define _TEST_ROOT_H_
|
||||||
|
|
||||||
|
#include "ch.h"
|
||||||
|
|
||||||
|
#include "test_sequence_001.h"
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Default definitions. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/* Global test suite name, it is printed on top of the test
|
||||||
|
report header.*/
|
||||||
|
#define TEST_SUITE_NAME "NASA OSAL over ChibiOS/RT Test Suite"
|
||||||
|
|
||||||
|
#define TASKS_BASE_PRIORITY 200
|
||||||
|
#define TASKS_STACK_SIZE 256
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* External declarations. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
extern const testcase_t * const *test_suite[];
|
||||||
|
|
||||||
|
extern THD_WORKING_AREA(wa_test1, TASKS_STACK_SIZE);
|
||||||
|
extern THD_WORKING_AREA(wa_test2, TASKS_STACK_SIZE);
|
||||||
|
extern THD_WORKING_AREA(wa_test3, TASKS_STACK_SIZE);
|
||||||
|
extern THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Shared definitions. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
#endif /* _TEST_ROOT_H_ */
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -0,0 +1,453 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hal.h"
|
||||||
|
#include "ch.h"
|
||||||
|
#include "osapi.h"
|
||||||
|
#include "ch_test.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @page test_sequence_001 Threads Functionality
|
||||||
|
*
|
||||||
|
* File: @ref test_sequence_001.c
|
||||||
|
*
|
||||||
|
* <h2>Description</h2>
|
||||||
|
* This sequence tests the NASA OSAL over ChibiOS/RT functionalities related
|
||||||
|
* to threading.
|
||||||
|
*
|
||||||
|
* <h2>Test Cases</h2>
|
||||||
|
* - @subpage test_001_001
|
||||||
|
* .
|
||||||
|
*/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Shared code.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static void test_thread1(void) {
|
||||||
|
|
||||||
|
test_emit_token('A');
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_thread2(void) {
|
||||||
|
|
||||||
|
test_emit_token('B');
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_thread3(void) {
|
||||||
|
|
||||||
|
test_emit_token('C');
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_thread4(void) {
|
||||||
|
|
||||||
|
test_emit_token('D');
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Test cases.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if TRUE || defined(__DOXYGEN__)
|
||||||
|
/**
|
||||||
|
* @page test_001_001 OS_TaskCreate() errors
|
||||||
|
*
|
||||||
|
* <h2>Description</h2>
|
||||||
|
* Parameters checking in OS_TaskCreate() is tested.
|
||||||
|
*
|
||||||
|
* <h2>Conditions</h2>
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
* <h2>Test Steps</h2>
|
||||||
|
* - Testing NULL task_id.
|
||||||
|
* - Testing NULL task_name.
|
||||||
|
* - Testing NULL stack_pointer.
|
||||||
|
* - Testing long task name.
|
||||||
|
* - Testing priority limits.
|
||||||
|
* - Testing insufficient stack size.
|
||||||
|
* - Testing task name or task stack conflict.
|
||||||
|
* .
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void test_001_001_execute(void) {
|
||||||
|
|
||||||
|
/* Testing NULL task_id.*/
|
||||||
|
test_set_step(1);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(NULL, /* Error.*/
|
||||||
|
"failing thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_INVALID_POINTER, "NULL not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing NULL task_name.*/
|
||||||
|
test_set_step(2);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
NULL, /* Error.*/
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_INVALID_POINTER, "NULL not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing NULL stack_pointer.*/
|
||||||
|
test_set_step(3);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"failing thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)NULL, /* Error.*/
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_INVALID_POINTER, "NULL not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing long task name.*/
|
||||||
|
test_set_step(4);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"this is a very very long task name", /* Error.*/
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_ERR_NAME_TOO_LONG, "name limit not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing priority limits.*/
|
||||||
|
test_set_step(5);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"failing thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
0, /* Error.*/
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_ERR_INVALID_PRIORITY, "priority error not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"failing thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
256, /* Error.*/
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_ERR_INVALID_PRIORITY, "priority error not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing insufficient stack size.*/
|
||||||
|
test_set_step(6);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"failing thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
16, /* Error.*/
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_INVALID_INT_NUM, "stack insufficient size not detected");
|
||||||
|
test_assert_sequence("", "task executed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing task name or task stack conflict.*/
|
||||||
|
test_set_step(7);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"running thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"running thread",
|
||||||
|
test_thread2,
|
||||||
|
(uint32 *)wa_test2,
|
||||||
|
sizeof wa_test2,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_ERR_NAME_TAKEN, "name conflict not detected");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"another running thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_ERR_NO_FREE_IDS, "stack conflict not detected");
|
||||||
|
|
||||||
|
OS_TaskDelay(5);
|
||||||
|
test_assert_sequence("A", "task not executed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid,
|
||||||
|
"running thread",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task creation failed");
|
||||||
|
|
||||||
|
OS_TaskDelay(5);
|
||||||
|
test_assert_sequence("A", "task not executed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static const testcase_t test_001_001 = {
|
||||||
|
"OS_TaskCreate() errors",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
test_001_001_execute
|
||||||
|
};
|
||||||
|
#endif /* TRUE */
|
||||||
|
|
||||||
|
#if TRUE || defined(__DOXYGEN__)
|
||||||
|
/**
|
||||||
|
* @page test_001_001 OS_TaskCreate() priority ordering
|
||||||
|
*
|
||||||
|
* <h2>Description</h2>
|
||||||
|
* Four tasks are created at different priorities and in different orders
|
||||||
|
* then their execution order is tested.
|
||||||
|
*
|
||||||
|
* <h2>Conditions</h2>
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
* <h2>Test Steps</h2>
|
||||||
|
* - Tasks are created in priority order from low to high.
|
||||||
|
* - Tasks are made runnable atomically and their execution order tested.
|
||||||
|
* - Tasks are created in priority order from high to low.
|
||||||
|
* - Tasks are made runnable atomically and their execution order tested.
|
||||||
|
* - Tasks are created in an not ordered way.
|
||||||
|
* - Tasks are made runnable atomically and their execution order tested.
|
||||||
|
* .
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void test_001_002_execute(void) {
|
||||||
|
|
||||||
|
/* Tasks are created in priority order from low to high.*/
|
||||||
|
test_set_step(1);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid1, tid2, tid3, tid4;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid4,
|
||||||
|
"running thread 4",
|
||||||
|
test_thread4,
|
||||||
|
(uint32 *)wa_test4,
|
||||||
|
sizeof wa_test4,
|
||||||
|
TASKS_BASE_PRIORITY - 0,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 4 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid3,
|
||||||
|
"running thread 3",
|
||||||
|
test_thread3,
|
||||||
|
(uint32 *)wa_test3,
|
||||||
|
sizeof wa_test3,
|
||||||
|
TASKS_BASE_PRIORITY - 1,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 3 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid2,
|
||||||
|
"running thread 2",
|
||||||
|
test_thread2,
|
||||||
|
(uint32 *)wa_test2,
|
||||||
|
sizeof wa_test2,
|
||||||
|
TASKS_BASE_PRIORITY - 2,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 2 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid1,
|
||||||
|
"running thread 1",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY - 3,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 1 creation failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tasks are made runnable atomically and their execution order tested.*/
|
||||||
|
test_set_step(2);
|
||||||
|
{
|
||||||
|
OS_TaskDelay(5);
|
||||||
|
test_assert_sequence("ABCD", "task order violation");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tasks are created in priority order from high to low.*/
|
||||||
|
test_set_step(3);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid1, tid2, tid3, tid4;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid1,
|
||||||
|
"running thread 1",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY - 3,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 1 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid2,
|
||||||
|
"running thread 2",
|
||||||
|
test_thread2,
|
||||||
|
(uint32 *)wa_test2,
|
||||||
|
sizeof wa_test2,
|
||||||
|
TASKS_BASE_PRIORITY - 2,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 2 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid3,
|
||||||
|
"running thread 3",
|
||||||
|
test_thread3,
|
||||||
|
(uint32 *)wa_test3,
|
||||||
|
sizeof wa_test3,
|
||||||
|
TASKS_BASE_PRIORITY - 1,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 3 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid4,
|
||||||
|
"running thread 4",
|
||||||
|
test_thread4,
|
||||||
|
(uint32 *)wa_test4,
|
||||||
|
sizeof wa_test4,
|
||||||
|
TASKS_BASE_PRIORITY - 0,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 4 creation failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tasks are made runnable atomically and their execution order tested.*/
|
||||||
|
test_set_step(4);
|
||||||
|
{
|
||||||
|
OS_TaskDelay(5);
|
||||||
|
test_assert_sequence("ABCD", "task order violation");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tasks are created in an not ordered way.*/
|
||||||
|
test_set_step(5);
|
||||||
|
{
|
||||||
|
int32 err;
|
||||||
|
uint32 tid1, tid2, tid3, tid4;
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid2,
|
||||||
|
"running thread 2",
|
||||||
|
test_thread2,
|
||||||
|
(uint32 *)wa_test2,
|
||||||
|
sizeof wa_test2,
|
||||||
|
TASKS_BASE_PRIORITY - 2,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 2 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid1,
|
||||||
|
"running thread 1",
|
||||||
|
test_thread1,
|
||||||
|
(uint32 *)wa_test1,
|
||||||
|
sizeof wa_test1,
|
||||||
|
TASKS_BASE_PRIORITY - 3,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 1 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid4,
|
||||||
|
"running thread 4",
|
||||||
|
test_thread4,
|
||||||
|
(uint32 *)wa_test4,
|
||||||
|
sizeof wa_test4,
|
||||||
|
TASKS_BASE_PRIORITY - 0,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 4 creation failed");
|
||||||
|
|
||||||
|
err = OS_TaskCreate(&tid3,
|
||||||
|
"running thread 3",
|
||||||
|
test_thread3,
|
||||||
|
(uint32 *)wa_test3,
|
||||||
|
sizeof wa_test3,
|
||||||
|
TASKS_BASE_PRIORITY - 1,
|
||||||
|
0);
|
||||||
|
test_assert(err == OS_SUCCESS, "task 3 creation failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tasks are made runnable atomically and their execution order tested.*/
|
||||||
|
test_set_step(6);
|
||||||
|
{
|
||||||
|
OS_TaskDelay(5);
|
||||||
|
test_assert_sequence("ABCD", "task order violation");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static const testcase_t test_001_002 = {
|
||||||
|
"OS_TaskCreate() priority ordering",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
test_001_002_execute
|
||||||
|
};
|
||||||
|
#endif /* TRUE */
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Exported data.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sequence brief description.
|
||||||
|
*/
|
||||||
|
const testcase_t * const test_sequence_001[] = {
|
||||||
|
#if TRUE || defined(__DOXYGEN__)
|
||||||
|
&test_001_001,
|
||||||
|
#endif
|
||||||
|
#if TRUE || defined(__DOXYGEN__)
|
||||||
|
&test_001_002,
|
||||||
|
#endif
|
||||||
|
NULL
|
||||||
|
};
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TEST_SEQUENCE_001_H_
|
||||||
|
#define _TEST_SEQUENCE_001_H_
|
||||||
|
|
||||||
|
extern const testcase_t * const test_sequence_001[];
|
||||||
|
|
||||||
|
#endif /* _TEST_SEQUENCE_001_H_ */
|
Loading…
Reference in New Issue