diff --git a/readme.txt b/readme.txt index a751fe1b0..9ef696309 100644 --- a/readme.txt +++ b/readme.txt @@ -77,11 +77,13 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process, *** 0.7.0 *** - NEW: Memory Pools functionality added, this mechanism allows constant-time allocation/freeing of constant size objects. It can be used to dynamically - allocate kernel objects like Semaphores, Mutexes, Threads etc it can also - handle application-defined objects. The allocator is, of course, thread-safe. + allocate kernel objects like Semaphores, Mutexes, Threads etc, of course it + is also possible to handle application-defined objects. The allocator is + thread-safe. - NEW: Kernel-provided sbrk() function, it is used internally by the Memory Pools but can also be used by the C runtime. There is also an option to meke the Memory Pools use an user-provided sbrk() function. +- Added a Memory Pools test case to the test suite. *** 0.6.10 *** - FIX: Fixed a case-sensitiveness error in lpc214x_ssp.c, it affected only diff --git a/src/chpools.c b/src/chmempools.c similarity index 100% rename from src/chpools.c rename to src/chmempools.c diff --git a/src/kernel.mk b/src/kernel.mk index febd8fa9c..1aa60125b 100644 --- a/src/kernel.mk +++ b/src/kernel.mk @@ -6,4 +6,4 @@ KERNSRC = ../../src/chinit.c ../../src/chdebug.c \ ../../src/chsem.c ../../src/chmtx.c \ ../../src/chevents.c ../../src/chmsg.c \ ../../src/chsleep.c ../../src/chqueues.c \ - ../../src/chserial.c ../../src/chpools.c + ../../src/chserial.c ../../src/chmempools.c diff --git a/test/test.c b/test/test.c index 1a0b9a4ec..96bd43938 100644 --- a/test/test.c +++ b/test/test.c @@ -24,6 +24,7 @@ #include "testsem.h" #include "testmtx.h" #include "testmsg.h" +#include "testpools.h" #include "testbmk.h" /* @@ -34,10 +35,15 @@ static const struct testcase *tests[] = { &testrdy2, &testsem1, &testsem2, +#ifdef CH_USE_MUTEXES &testmtx1, &testmtx2, &testmtx3, +#endif &testmsg1, +#ifdef CH_USE_MEMPOOLS + &testpools1, +#endif &testbmk1, &testbmk2, &testbmk3, diff --git a/test/test.mk b/test/test.mk index ce890a855..73e6e1bc0 100644 --- a/test/test.mk +++ b/test/test.mk @@ -1,3 +1,4 @@ # List of all the ChibiOS/RT test files. TESTSRC = ../../test/test.c ../../test/testrdy.c ../../test/testsem.c \ - ../../test/testmtx.c ../../test/testmsg.c ../../test/testbmk.c + ../../test/testmtx.c ../../test/testmsg.c ../../test/testpools.c \ + ../../test/testbmk.c diff --git a/test/testmtx.c b/test/testmtx.c index 526a64ffa..2243b375f 100644 --- a/test/testmtx.c +++ b/test/testmtx.c @@ -21,6 +21,8 @@ #include "test.h" +#ifdef CH_USE_MUTEXES + #define ALLOWED_DELAY 5 static Mutex m1, m2; @@ -219,3 +221,5 @@ const struct testcase testmtx3 = { mtx3_teardown, mtx3_execute }; + +#endif /* CH_USE_MUTEXES */ diff --git a/test/testpools.c b/test/testpools.c new file mode 100644 index 000000000..a86eecedd --- /dev/null +++ b/test/testpools.c @@ -0,0 +1,63 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include + +#include "test.h" + +#ifdef CH_USE_MEMPOOLS + +static MemoryPool mp1; + +static char *pools1_gettest(void) { + + return "Memory Pools, allocation and enqueuing test"; +} + +static void pools1_setup(void) { + + chPoolInit(&mp1, UserStackSize(THREADS_STACK_SIZE)); +} + +static void pools1_teardown(void) { +} + +static void pools1_execute(void) { + int i; + + /* Adding the WAs to the pool. */ + for (i = 0; i < 5; i++) + chPoolFree(&mp1, wa[i]); + + /* Empting the pool again. */ + for (i = 0; i < 5; i++) + test_assert(chPoolAlloc(&mp1, FALSE) != NULL, "pool list empty"); + + /* Now must be empty. */ + test_assert(chPoolAlloc(&mp1, FALSE) == NULL, "pool list not empty"); +} + +const struct testcase testpools1 = { + pools1_gettest, + pools1_setup, + pools1_teardown, + pools1_execute +}; + +#endif /* CH_USE_MEMPOOLS */ diff --git a/test/testpools.h b/test/testpools.h new file mode 100644 index 000000000..413d1eb76 --- /dev/null +++ b/test/testpools.h @@ -0,0 +1,25 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _TESTPOOLS_H_ +#define _TESTPOOLS_H_ + +extern const struct testcase testpools1; + +#endif /* _TESTPOOLS_H_ */