Products       Learn       Buy       Support       Company
 
  Home > Products > Kernel > smxPPC
   
 
Kernel Products


smxPPC™


PowerPC and Power Architecture RTOS Kernel

smxPPC is the smx real-time multitasking RTOS kernel for PowerPC / Power Architecture processors. This datasheet only lists details for this architecture. For full information see


Processors Supported
  • 400, 500, 600, 700, 800, 5200, and 8200 Series

smxPPC uses the PIT interrupt as the time base. smx functions, the smx scheduler, and your application can be optimized for a specific processor by setting one compiler directive.

Development Tools Supported

  • Metrowerks CodeWarrior Compiler/BDM Debugger with point and click smx awareness and the smx Graphical Analysis Tool (GAT)
  • MetaWare High C/C++ Compiler
  • Freescale Graphical Configuration Tool (GCT) for MPC5xx processors
  • Diab Data C/C++ Compiler
  • SDS SingleStep Simulator/BDM Debugger with point and click smx awareness
  • Lauterbach TRACE32 with smx awareness

Development System Requirements
  • Windows 95, 98, Millennium, NT, 2000, or XP

smxPPC Development Kit Contents
  • Pre-made EABI-compliant ELF/DWARF smxPPC libraries
  • Source code platform for easy start
  • User's Guide, Reference Manual, and smxPPC Quick Start Manual
  • Site development license
  • Royalty-free license for one developed product

Easy Upgrade From Other Processors

smxPPC shares the same code base with smxARM and smxCF. Therefore it is easy to migrate between smxPPC and these other processor versions of smx. If you have experience with smx on one processor then you are already down the learning curve for the other processors.

Stack Flexibility

Stack-pool stacks are supported by smxPPC. These are fixed-size stacks that are loaned to tasks, then returned to the stack pool when tasks stop, so other tasks can use them.

smxPPC also permits allocating heap stacks. Stacks may be allocated from the heap for tasks requiring stacks larger or smaller than the fixed-size stack-pool stacks.

Saving Floating Point State

smxPPC makes it easy for tasks using floating point to save and restore the floating point registers when they are suspended and resumed. Also these registers are saved only for tasks that use floating point. This way, tasks not using floating point are not burdened with the extra overhead.

Debugger Support

smxPPC supports symbolic debugging for any debugger or emulator that can read the ELF/DWARF or COFF file format.

smxAware takes symbolic debugging a step further by enabling the CodeWarrior debugger to be smx-aware. When the interface is enabled, smxAware is aware of all tasks and smx objects running in the system.

With smxAware you can:
  • Set task-specific breakpoints. The breakpoint will be triggered only if it is hit while the specified task is running.
  • Display information about kernel specific objects such as tasks, semaphores, exchanges, events, heaps, stacks etc. with the Kernel Objects dialog box under the Data menu.
  • Display task specific variables in the Watch and Read windows.
  • Display custom user application objects.
  • Display trace strings sent from the user's code

Lauterbach TRACE32 Support

Lauterbach has implemented excellent smx-awareness for their TRACE32 emulator consisting of:

  • Display of all smxobjects with attributes
  • Analyzer listing showing task switches
  • Task profiling and statistics
  • Task stack usage
  • Task context display
  • smx pull-down menu

PowerPC / Power Architecture Specifics

  1. The PowerPC / Power Architecture is a 32-bit flat mode processor.
  2. The smxPPC scheduler is written primarily in C.
  3. smxPPC was designed so applications could be programmed primarily in C. Therefore assembly macros GET_CHAR, LOCKX, PGET_CHAR, PPUT_CHAR, PUT_CHAR, STACK_CHECK and TESTX are not provided.
  4. All initialized data is in section .data. All uninitialized data is in section .bss and code is in section .text.
  5. Time base: The PowerPC / Power Architecture has a built in time base. smxPPC uses the Programmable Interval Timer (PIT) to generate a periodic tick interrupt. The tick (interrupt) rate should be in the range of 1 msec to 100 msec. See the smx User's Guide Chapter 13 for more on timing.

Boards Supported

  • Freescale MPC860ADS and FADS
  • Freescale MBX860
  • Embedded Planet RPX-Lite 823/850/860
  • Embedded Planet RPX-Classic 860/860T
  • Embedded Planet RPX-Classic Low Fat
  • Phast 855T
  • EST SBC8260
  • ESD EPPC/405GP
  • IBM 405GP Walnut
  • Phytec 565 Core
  • Embedded Planet EP852
  • Embedded Planet EP866
  • EST SBC Basic 860
  • ESD CPCI 405
  • Espace 850
  • TQComponents TQM5200
  • Freescale Lite 5200

Boards using any variant of the 555/565/5200/823/850/860/405 processor are very easy to support.

Drivers for the 823/850/860/8260
  • Ethernet 10baseT: SCC1, SCC2, SCC3, or SCC4[1]
  • Ethernet 100baseT (860T and 855T)
  • PPP driver[1]
  • PCMCIA driver[1]
  • UART: SMC1, SMC2
  • UART: SCC1, SCC2, SCC3, SCC4
  • 823 LCD Driver[2]
  • 823 SPI Touch Screen Driver[2]
  • ROM to RAM load and run
  • MMU support
  • Data Cache
  • Instruction Cache

Drivers for the 405GP
  • Ethernet 100baseT[1]
  • PPP driver[1]
  • UART (FIFO mode)
  • Compact Flash File drive

Drivers for the 555/565
  • SCI1 and SCI2 UARTS
  • CANopen


860 UART driver notes:
The SMC and SCC UARTS are designed to be flexible and easy to use. All of the UARTS can be used in character, block or PPP mode, and all can be used simultaneously.

MMU driver notes:
smx implements an easy to use table to set up the memory and cache regions. smx also has a workaround for the Data Cache Corruption bug (MPC860 errata CPU6 and MPC823 errata CPU2). Because of this bug many RTOS companies do not support the data cache on MPC8xx rev A and B parts.

smxPPC™ Sample Execution Times

 
clock cycles microsec  
Function Conditions
V
N
V
N
bump_task No preempt
264
244
5.3
4.9
bump_task Preempt
376
352
7.5
7.0
create_rq 4 levels
392
252
7.8
5.0
create_task Unbound
184
180
3.7
3.6
create_xchg 1 level
204
184
4.1
3.7
create_xchg 2 level
268
248
5.3
5.0
interrupt latency Maximum
30
26
0.6
0.5
interrupt response Interrupt->isr->lsr->task
443
383
8.8
7.7
receive Message waiting
136
124
2.7
2.5
receive_stop Message waiting(task restarts)
404
308
8.1
6.1
send No task waiting
242
136
4.8
2.7
send Waiting task put into rq
292
252
5.8
5.0
start idle task Unbound and not in a queue
356
280
7.1
5.6
stop task In rq
288
144
5.7
2.9
task switch Due to task suspend and resume
344
284
6.9
5.7

The number of clock cycles are valid for any PowerPC / Power Architecture processor that can execute one instruction per clock (assuming 100% cache hit rate). All times assume an MPC860 with 100% cache hit rate.

V is unoptimized code with extensive stack and parameter checking. Built with the command line mak L V 8.

N is optimized code with basic stack checking. Built with the command line mak L N 8.

smxPPC™ RAM Usage

RAM usage is the sum of:
Sample Sizes*
Stack Pool (shared stacks)
8400
Near Heap Space:
   Control Blocks
3200
   lsr queue
160
   Error Buffer (optional)
800
   Handle Table (smxDLM, smxProbe)
800
   Bound Stacks
a/r
   Call Trace Buffer (smxProbe)
a/r
   Task Trace Buffer (smxProbe)
a/r
Dynamically Allocated Regions
   Block and Message Pools
3000
smx Global Variables
500

Total
16.5K

Stack Pool: The value shown is for 7 stacks of 1200 bytes. 1200 bytes is larger than most tasks require, but it is a good starting point.

Control Blocks are generally 12 to 28 bytes. One control block is needed for every smx object (i.e. tasks, semaphores, pipes, messages, etc) and for each lower level of the ready queue, semaphore, and exchanges.

Heap space: Add to these the amount of heap required by the application.

DAR's (dynamically allocated regions) are blocks of memory from which pools may be allocated.

smx global variables include the configuration table and handles such as ct (current task) and rq_top (top task in ready queue).

*Sample Sizes: These numbers reflect data usage by a medium-sized application. The stack pool usage reflects 7 medium stacks. It is better to have smaller stack pool stacks and use bound stacks where larger ones are necessary. Control block usage is a total of all control blocks needed by this particular sample application: 15 tasks, 7 stacks, 100 queue levels, 5 timers, 18 messages, 8 pipes, 2 buckets, 6 pools, and 14 blocks. The number of control blocks allocated of each type and the sizes of the heaps, dar, lsr queue, handle table, error buffers are user-tuneable to the requirements of the application.

smxPPC™ Function Sizes

smx function
cw n
cw t
dc n
dc t
  bump_msg
360
536
392
556
  bump_task
840
992
900
1032
  clear_q
2196
2244
2248
2288
  count
552
748
592
764
  count_stop
704
900
744
916
  create_cx
156
264
160
248
  create_eq
136
184
144
184
  create_et
144
144
152
152
  create_nbpool
160
208
216
256
  create_nmsg
328
436
336
428
  create_npool
496
616
524
624
+create_pool
624
1052
640
1012
+create_rq
216
264
224
264
+create_sem
360
488
340
432
+create_task
432
528
404
484
  create_xchg
500
720
468
616
  delete_cx
112
264
116
252
  delete_eq
88
204
92
204
  delete_et
408
460
452
500
  delete_msg
120
224
120
224
  delete_pool
220
372
264
400
  delete_sem
136
252
176
288
+delete_task
824
928
924
1000
  delete_xchg
172
324
224
356
  error
32
932
32
2982
  find_next
208
312
224
320
  find_pool
140
252
132
252
+get_block
152
312
156
308
  get_msg
112
240
120
240
+get_nblocks
312
384
336
400
+go_smx
2132
2172
2480
2516
  hook
124
204
128
204
  handle table
1144
1168
1385
1405
  invoke
164
188
184
204
  keep_time
468
504
552
576
  locate
308
568
300
548
  ncallocx
76
76
80
80
  nfreex
256
304
248
288
  nheapchkx
44
44
44
44
  nheapinix
320
392
304
364
  nheapsetx
344
368
352
372
  nheapwalkx
580
628
584
624
  nmallocx
480
552
484
544
  nreallocx
484
556
488
548
  pget_char
896
1100
968
1144
  pget_char_stop
1136
1340
1200
1376
+pput_char
920
1124
980
1156
  pput_char_stop
1176
1380
1220
1396
  put_msg
192
368
204
372
  qsize
580
908
656
944
  read_timer
192
292
216
316
  receive
984
1136
1064
1204
+receive_stop
900
1052
992
1124
+rel_all_block
112
192
124
204
+rel_all_msg
140
220
184
264
+rel_block
68
132
68
136
  rel_nblock
100
148
108
152
  reset_flags
76
128
80
128
+resume
516
596
528
596
  resume_to
600
676
584
672
  sendx
680
912
716
932
  set_flags
436
488
456
504
+signalx
840
952
860
964
  sleepx
332
380
396
436
  sleep_stop
328
376
388
428
+sort_nblocks
316
340
360
380
+startx
784
968
832
996
  start_timer
352
424
360
420
  stop
676
756
728
796
  stop_timer
232
308
256
336
  suspend
628
708
688
756
  test
508
648
560
688
  test_flags
632
756
656
764
  test_flags_stop
620
744
644
752
  test_stop
796
936
860
988
  unlockx
100
176
104
180
  scheduler
2008
3168
3305
4693
+min kernel
9648
11704
10432
12236
  max kernel
37020
47340
40810
52496

Key:
cw = CodeWarrior C/C++ v8.1
dc = Diab Data C/C++ v5.1
n = Non-Test Mode
t = Test Mode
Conditions: optimization off, event buffer logging off, DEBUGVER off
+ = indicates calls included for a reasonable minimum kernel
Test mode library calls contain additional code for error checking. Hence, the test mode libraries are somewhat larger (roughly 15%).

Notes  
 
  1. Available with smxNet.
  2. Available with smxPEG.


     back to top
 
  Register for More Info
 
 

 
Home       Sitemap       Contact