|  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
 
 
 
        The PowerPC / Power Architecture is a 32-bit flat mode processor. The smxPPC scheduler is written primarily in C. 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. All initialized data is in section .data. All   uninitialized data is in section .bss and code is in section .text. 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 TQM5200Freescale 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 |  
 
  Test mode library calls contain additional code for error checking. Hence, the test mode libraries are somewhat larger (roughly 15%).Key: cw = CodeWarrior C/C++ v8.1dc = 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
 
 
 
  
    | Notes |  |  
    |  | 
      Available with smxNet. Available with smxPEG. |  
 
 |