RTSC Technical Overview - EclipseCon France 2015
Download
Report
Transcript RTSC Technical Overview - EclipseCon France 2015
Real-Time Software Components
A Scalable Component Model for Embedded C Development
Dave Russo, Texas Instruments
Introducing Real-Time
Component
(RTSC)
© 2008
Texas
made available under the EPL v1.0
© 2008 by Texas Instruments;
made Software
available
under the
EPL| v1.0
| by
Feb
12,Instruments;
2008
1
Outline
what problem does RTSC solve
what distinguishes RTSC from existing solutions
“brief” technical overview of RTSC
existing use of RTSC and what’s next
summary and questions
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
2
In 25 Words Or Less ....
RTSC is a C-based software component model
for developing, delivering, and deploying
re-usable real-time software targeted
for diverse embedded platforms
QUALITY
without compromising system performance !
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
3
RTSC Components
Key Characteristics
dual-existence
Benefits
increased design-time optimizations
• target-code: runs on resource limited HW
• meta-code: runs on rich client platforms
meta-code manages component lifecycle
• build of component (including target-side)
• integration during application assembly
• monitoring during test and after deployment
• transparently bind alternate implementations
• objects can be created at design-time
• no embedded runtime requirements
enables new tooling opportunities
• meta-code can proxy for target-code
• components differentiate in meta-domain
Application
Application
RTSC Component C
RTSC Component B
target-code
meta-code
RTSC
A
A Component
target-code
meta-code
(C)
(JavaScript)
target-code
meta-code
(C)
(JavaScript)
target-code
C
B
target-code
A
target-code
(C)
(C)
target-code
(C)
(JavaScript)
Rich Client Platform
Embedded Platform
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
4
Component-Based Systems
Essential Characteristics
S
R
S
R
S′
INTERCHANGABILITY
R
T
C
REUSABILTY
Basic Requirements
FORMAL SPECIFICATIONS
UNIFORM PACKAGING
CONFIGURABLE ASSEMBLY
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
5
Programming-In-The-Large
logical & physical software container
headers, libraries, progs, scripts, docs, ...
managed,
versioned, delivered as a whole
7
multiple targets, platforms, configurations
explicit dependencies on other packages
106 – 10 lines of source code
concrete & closed
abstract & open
encapsulates cohesive { types, fxns }
external client contract — “spec”
internal implementation — “body”
abstract module — spec but no body
extended & implemented by others
enables generic client applications
PACKAGE
MODULE
INTERFACE
standard C
functions & structs
10s
100s
1000s
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
6
RTSC Specification
separates specification from implementation
INTERFACE SPECIFICATION
C-like declarations, assertions, commentary
bridges SW design • development phases
package ti_std;
interface IA
{
enum E {E1, E2};
Int fxn1();
}
RTSC
.h
eliminates tedious maintenance of headers
leverages advanced programming patterns
readily integrates with other SW tooling
.xdc
#include
MODULE IMPLEMENTATION
MODULE SPECIFICATION
package my_pkg;
module ModA
inherits ti_std.IA
{
config Int max;
Int32 fxn2(E e);
}
RTSC
.h
#include
generated headers
.xdc
// natural map to ANSI C
// formalize best practices
// implement specified fxns
// access specified configs
// call legacy C or ASM fxns
// fun-to-write, easy-to-read
.c
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
7
RTSC Packaging
physical organization reflects logical design
PACKAGE SPECIFICATION
contents remain intact during deployment
requires your_pkg [1,3];
version dependencies to ensure integrity
package my_pkg [2,4,5] {
interface … ;
module … ;
}
portable makefiles for build • test • release
manage diverse set of targets & platforms
.xdc
PACKAGE MANIFESTATION
universal OS-independent + CM-agnostic
PACKAGE DEPLOYMENT
package-repository path
c:/work; h:/share; …
my_pkg/
source files
generated files
my_pkg/
special files
your_pkg/
ti_std/
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
8
RTSC Configuration
CONFIGURATION META-PROGRAM
model program structure prior to link / load
expressed in powerful C-like meta-language
// include modules
ModA = xdc.useModule("my_pkg.ModA");
ModB = xdc.useModule("your_pkg.ModB");
per-package participation during validation
per-package contribution during generation
// initialize module-wide configs
ModA.max = 64;
automate error-prone integration processes
// create static instances
inst = ModB.create({x:10, y:20});
enable new levels of program optimization
// assign program-level properties
Program.global.inst = inst;
Program.stack = 256;
.cfg
XDCscript
package
agents
TARGET APPLICATION PROGRAM
#include <my_pkg/ModA.h>
#include <your_pkg/ModB.h>
main() {
ModA_fxn1();
ModB_fxn2(inst);
…
}
JavaScript
Program
information model
program
validation
program
generation
target libraries
data
tables
misc
code
linker
cmds
.c
.obj
COMPONENT ASSEMBLY
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
9
Multiple Implementations
Application Configuration
platform: 'ti.platforms.evm6446'
'ti.platforms.omap3430'
target:
'ti.targets.C64'
Benefits
platform
binding
Task = xdc.useModule('ti.bios.Task');
MP4 = xdc.useModule('ti.omapsw.mpeg4.ENC');
app
G723 = xdc.useModule('3p.codecs.g723.ENC'); config
MP4.profile = "base";
script
:
Platform Package
ti.platforms.omap3430
ti.platforms.evm6446
C64
rev 3
2
HWA21
timer21
Targets Package
ti.targets
C64
C28
C55
…
DSP/BIOS Package
ti.bios
platform
independent
timer3
timer
2
timer
1
DMA3
DMA
DMA1 2
extensible to any platform and target
app-specific implementation selection
package-specific platform adaptation
config, package, and platform validation
one configuration tool for all content
Package
MEG4MEG4
Package
ti.omapsw.mpeg4
ti.omapsw.mpeg4
G723 Package
3p.codecs.g723
platform
independent
platform
platform
independent
independent
G726 Package
3p.codecs.g726
timerBC timer C
timer
timer
HWA
B
C
timer
BC B
HWA
Btimer
timer
HWA
timer
B
DMA
HWA
B
HWA
HWA
1
HWA
DMA1
1 1B
HWA
B
platform
independent
RTSC enables rapid tuned (re)assembly of binary components
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
10
Extended Object Lifecycle
1needs
implementation,
runtime memory
2 usage
manager
models
no memory allocation required
uniform
“run-once”
instance
instance
lifecycle
creation
APIs
code
no runtime initialization errors
built-in
dead error
lifecycle
handling
monitoring
code
only “core” module methods used
// include modules
ModB = xdc.useModule("your_pkg.ModB");
#include <stdlib.h>
<your_pkg/ModB.h>
#include
<your_pkg/ModB.h>
ModB_Handle
mybee;
ModB_Handle mybee;
main() {
main(int
argc, char
*argv[])
{
/* initialize
system
*/
/*
initialize
system */
ModB_Params
params;
ModB_Params
params;
ModB_Params_init(¶ms);
ModB_Params_init(¶ms);
params.x = 10; params.y = 20;
params.x
= atoi(argv[1]);
mybee = ModB_create(¶ms);
mybee
= ModB_create(¶ms);
if (mybee
== NULL) …
if start
(mybeereal-time
== NULL) processing
…
/*
*/
forstart
/*
(;;) real-time
{
processing */
for
ModB_fxn2(mybee);
(;;) {
…
} ModB_fxn2(mybee);
…
} }
}
// create static instances
Program.global.mybee =
ModB.create({x:10, y:20});
RTSC
#include <your_pkg/ModB.h>
#include <xdc/cfg/global.h>
main() {
for (;;) {
ModB_fxn2(mybee);
…
}
}
A single RTSC module supports both static and runtime use
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
11
Real-Time Monitoring
/* create a decoder for the app */
var dec = Packages.my_pkg.Decoder("app.out");
/* open stream of of events */
var file = java.io.FileReader("output.dat");
/* read next event from the file into buf */
while (readEvent(file, buf) != -1) {
/* decode the event and print it */
var e = dec.apply(buf);
print(e.eventMsg);
}
package my_pkg;
public class Decoder {
public Decoder(File file) {
}
:
}
public class Server {
public Server
(Decoder decoder,InputStream in){…}
public Event getNextEvent() {…}
public bool enable() {…}
public bool disable() {…}
}
fast deterministic “printf” trace
minimal footprint (100’s of bytes vs. 35K bytes)
host-side control, interpretation, analysis
rich package-specific interpretation
#include <my_pkg/Log.h>
void Log_printf(char
Log_value(int value)
*fmt,{…) {
`copy args
valueto
tocircular
circularbuf`
buf`
}
H
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
12
Real-Time Monitoring
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
13
Case Study: DSP/BIOS
4th most popular* embedded RTOS
single binary bundle of RTSC packages
supports 19 targets and over 120 devices
1. VxWorks
2, 3. WinCE, XP
4. DSP/BIOS
5. RH Linux
used in cell phones, barcode scan, heart defib
scales from 2KB MSP430 to 60KB C64x
Sources are 94% platform independent
* 2006 Embedded System Design
DSP/BIOS
Lines of Code
Targets
20
6%
15
31%
C64-specific
IDL
10
42%
XDCscript
Portable C
5
21%
0
2000 2001 2002 2003 2004
…
2008
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
14
XDCtools
Accelerate Adoption
focus on “ease-of-use”
emphasize compatibility
better docs — RTSCpedia
Eclipse integration (CDT, …)
open-source XDCtools (EPL)
basic tools & utilities
package
life-cycle support
program
life-cycle support
program
run-time support
meta-language — XDCscript
ANSI C
specification language — XDCspec
XDCtools
1.x
1999
2004
xDAIS
2.x
2006
DSP/BIOS 5.x
CodecEngine
3.x
2007
2009
SYS/BIOS 6.x
% target software
managed content
specified content
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
15
What’s Next?
Tooling
Content
CDT Integration (new targets …)
Inter-Component-Comm Framework(s)
Unit-Test Framework (TPTP)
Application-Specific Frameworks (SDR)
UML & Modeling Integration (EMF)
Advanced Diagnostics & Trace (SODA)
Refactoring & Design Tools (???)
OS Integration (Linux, VxWorks, …)
Infrastructure
Enhanced RT Monitoring
Design-By-Contract
Portable RPC Support
C++ Binding
basic tools & utilities
package
life-cycle support
program
life-cycle support
meta-language — XDCscript
program
run-time support
ANSI C
specification language — XDCspec
Community suggestions (and contributions) are welcome
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
16
Summary
RTSC enables “write once, deploy widely” for deeply embedded SW
Dual-domain breaks the “generality vs. application-optimized” standoff
XDCtools is successfully being used by thousands of TI customers
RTSC bridges the gap between embedded-C and component-centric tools
http://wiki.eclipse.org/DSDP/RTSC
RTSC Project Proposal: currently in the proposal stage
RTSC White Paper: high-level overview of the XDCtools technology
RTSC Component Primer: how to create & use RTSC components
XDCtools: the starting point for the RTSC project’s code base
Introducing Real-Time Software Component (RTSC) | © 2008 by Texas Instruments; made available under the EPL v1.0
17