Cortex-M3 optimization.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@834 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
gdisirio 2009-03-12 18:46:53 +00:00
parent 93c5d059c0
commit f43dbdc61b
4 changed files with 32 additions and 41 deletions

View File

@ -27,71 +27,74 @@ Settings: SYSCLK=72, ACR=0x12 (2 wait states)
--- Test Case 3.3 (Mutexes, priority inheritance, complex case) --- Test Case 3.3 (Mutexes, priority inheritance, complex case)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 4.1 (CondVar, signal test) --- Test Case 3.4 (CondVar, signal test)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 4.2 (CondVar, broadcast test) --- Test Case 3.5 (CondVar, broadcast test)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 5.1 (Messages, dispatch test) --- Test Case 3.6 (CondVar, inheritance boost test)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts) --- Test Case 4.1 (Messages, dispatch test)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 7.1 (Events, wait and broadcast) --- Test Case 5.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test) --- Test Case 6.1 (Events, wait and broadcast)
--- Size : 17220 bytes, not fragmented
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, allocation and enqueuing test) --- Test Case 7.1 (Heap, allocation and fragmentation test)
--- Size : 17236 bytes, not fragmented
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap) --- Test Case 8.1 (Memory Pools, allocation and enqueuing test)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool) --- Test Case 9.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.1 (Benchmark, context switch #1, optimal) --- Test Case 9.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
---------------------------------------------------------------------------
--- Test Case 10.1 (Benchmark, context switch #1, optimal)
--- Score : 216992 msgs/S, 433984 ctxswc/S --- Score : 216992 msgs/S, 433984 ctxswc/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.2 (Benchmark, context switch #2, empty ready list) --- Test Case 10.2 (Benchmark, context switch #2, empty ready list)
--- Score : 178664 msgs/S, 357328 ctxswc/S
--- Result: SUCCESS
---------------------------------------------------------------------------
--- Test Case 11.3 (Benchmark, context switch #3, 4 threads in ready list)
--- Score : 178663 msgs/S, 357326 ctxswc/S --- Score : 178663 msgs/S, 357326 ctxswc/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.4 (Benchmark, threads creation/termination, worst case) --- Test Case 10.3 (Benchmark, context switch #3, 4 threads in ready list)
--- Score : 164735 threads/S --- Score : 178663 msgs/S, 357326 ctxswc/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.5 (Benchmark, threads creation/termination, optimal) --- Test Case 10.4 (Benchmark, threads creation/termination, worst case)
--- Score : 210633 threads/S --- Score : 168598 threads/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.6 (Benchmark, mass reschedulation, 5 threads) --- Test Case 10.5 (Benchmark, threads creation/termination, optimal)
--- Score : 216994 threads/S
--- Result: SUCCESS
---------------------------------------------------------------------------
--- Test Case 10.6 (Benchmark, mass reschedulation, 5 threads)
--- Score : 55551 reschedulations/S, 333306 ctxswc/S --- Score : 55551 reschedulations/S, 333306 ctxswc/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.7 (Benchmark, I/O Queues throughput) --- Test Case 10.7 (Benchmark, I/O Queues throughput)
--- Score : 489472 bytes/S --- Score : 489472 bytes/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.8 (Benchmark, virtual timers set/reset) --- Test Case 10.8 (Benchmark, virtual timers set/reset)
--- Score : 647110 timers/S --- Score : 647110 timers/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.9 (Benchmark, semaphores wait/signal) --- Test Case 10.9 (Benchmark, semaphores wait/signal)
--- Score : 823324 wait+signal/S --- Score : 823324 wait+signal/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
--- Test Case 11.10 (Benchmark, mutexes lock/unlock) --- Test Case 10.10 (Benchmark, mutexes lock/unlock)
--- Score : 601124 lock+unlock/S --- Score : 601124 lock+unlock/S
--- Result: SUCCESS --- Result: SUCCESS
--------------------------------------------------------------------------- ---------------------------------------------------------------------------

View File

@ -42,19 +42,6 @@ void port_halt(void) {
} }
} }
/**
* Start a thread by invoking its work function.
* If the work function returns @p chThdExit() is automatically invoked.
*/
/** @cond never */
__attribute__((naked, weak))
/** @endcond */
void threadstart(void) {
asm volatile ("blx r1 \n\t" \
"bl chThdExit");
}
/** /**
* System Timer vector. * System Timer vector.
* This interrupt is used as system tick. * This interrupt is used as system tick.

View File

@ -155,8 +155,8 @@ struct context {
tp->p_ctx.r13->basepri = BASEPRI_USER; \ tp->p_ctx.r13->basepri = BASEPRI_USER; \
tp->p_ctx.r13->lr_exc = (regarm_t)0xFFFFFFFD; \ tp->p_ctx.r13->lr_exc = (regarm_t)0xFFFFFFFD; \
tp->p_ctx.r13->r0 = arg; \ tp->p_ctx.r13->r0 = arg; \
tp->p_ctx.r13->r1 = pf; \ tp->p_ctx.r13->lr_thd = chThdExit; \
tp->p_ctx.r13->pc = threadstart; \ tp->p_ctx.r13->pc = pf; \
tp->p_ctx.r13->xpsr = (regarm_t)0x01000000; \ tp->p_ctx.r13->xpsr = (regarm_t)0x01000000; \
} }
@ -303,7 +303,6 @@ struct context {
extern "C" { extern "C" {
#endif #endif
void port_halt(void); void port_halt(void);
void threadstart(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -87,6 +87,8 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
the macro chSysGetTime() in chTimeNow(), the old names are still recognized the macro chSysGetTime() in chTimeNow(), the old names are still recognized
but marked as deprecated (fixes the bug 2678953 but goes a bit further by but marked as deprecated (fixes the bug 2678953 but goes a bit further by
introducing a new API category "Time"). introducing a new API category "Time").
- OPT: Small optimization to the Cortex-M3 port code, improved thread
related performance scores and smaller code.
- Removed testcond.c|h and moved the test cases into testmtx.c. Mutexes and - Removed testcond.c|h and moved the test cases into testmtx.c. Mutexes and
condvars have to be tested together. condvars have to be tested together.
- Added architecture diagram to the documentation. - Added architecture diagram to the documentation.