Embedded Software
The Embedded Software Line offers services concerning all the software lifecycle aspects in an embedded system; starting from the Requirement Analysis, we select standards, methods and tools, we design the software architecture, codify and verify the application, and then we integrate the hardware components and validate the overall system.
This proposal refers to three technological areas: Firmware development, Software development, Integration&Testing. Each area has a valid intersection point in our Labs, where we evaluate or develop new products exchanging knowledge and experiences.
Firmware development
In our world, firmware refers to the lower layers of embedded software systems, where real time aspects are the main hints. The hardware — both microprocessors and DSPs, — is strictly tied to our packages, including BSP, PSP, O.S. customization, middleware and specific small applications.
The operating system (VxWorks, Mqx, Psos, Linux R.T., etc..) may be present or not. Sometimes a simple scheduler is supplied.
Languages ranges among Assembler (rarely), C and Ada. C++ is more and more applied.
Communication protocols are very often involved: field busses like CAN/CANopen, Modbus, Profibus, LON, and/or TCL protocols like Ethernet, TCP/IP, SDH, SONET, TCP/IP family, SIP, SNMP.
Porting from a HW platform to another may be required. The use of remote debugging (JTAG and/or BDM) is mandatory.
Software development
Software refers to the upper layers of embedded systems. Typically it implements core applications, by using Man Machine & Graphical Interface, Data Bases, Communication Stacks, application frameworks, etc.
The operating system is always present (VxWorks, XP embedded, WinCE, Linux, etc..) , while common languages are C++ , C# and Java. Cross developing is based on a variety of IDEs and frameworks (Tornado, Microtask, Green Hills, gcc, etc..).
Sometimes part of the software side of an embedded application is PC resident : configurations , monitors, simulators and other packages are included in the Skytechnology proposal. Visual Basic, Visual C++, C# and Java are typical languages for such programs. .net , J2EE are common development environment.
Integration & Testing
Integration and testing involves two different entities: system and software.
So, as software systems grow more complex, the need to test software thoroughly at every stage of the development lifecycle, is becoming absolutely necessary.
In addition to consolidated methods and techniques, dynamic testing (unit and integration testing) has repeatedly been shown to be highly effective in finding defects early in the lifecycle, minimizing the cost implications of faults.
Environment suites, tools and protocols can widely change depending by the application type, rules and constraints that apply to the specific test or integration project.
We covered a wide range of experiences moving from the development and testing of safety-critical railway and airborne applications, dealing with severe standard constraints (i.e. Sil4 for Cenelec EN50128, Do178b) and tools (GCC – Linux, SpLint, IPL Cantata++, SVN, Lauterbach Trace32) to Networking (C on VxWorks) and UMTS for the Telco market sector (Omnitracker, Flexelint). Thanks to such wide knowledge of languages (C,C++,Java), OS (Linux, VxVorks, etc) and protocols (CAN, Profibus, Modbus, SONET, etc) we are able to make the effort that has to be putted in place by customer for testing and integration projects, more affordable.