| Area | Experience length |
|---|---|
| C Language | 20+ years, 440k LOC lifetime |
| Systems level programming | 20+ years |
| Driver programming | 17 years |
| QNX 4 programming | 12 years |
| QNX Neutrino (QNX 6) programming | 10 years |
| UNIX / POSIX programming | 7 years |
| Courseware development and presentation | 6 years |
| Hardware design and diagnosis | 9 months |
| VAX/VMS programming | 6 months |
| iRMX-86 programming | 6 months |
Click here for a summary of books and articles I've written.
Click here for the Word version of this resume (may be slightly out of date).
Click http://www.linkedin.com/in/robertkrten for recommendations and referrals.
I am seeking contract positions where I can make a difference with my extensive knowledge of QNX and realtime, embedded expertise. Requirements analysis, system architecture, and high-level design through to implementation and coding are my strengths. I am confident in designing complete systems from start to finish, or I can work on small pieces as required.
Note that some of these overlap.
At Semiconductor Insights, I'm responsible for software reverse engineering in support of patent litigation. My main responsibilities include disassembling and decompiling various assembler code (ARM, PPC, PIC, MIPS, x86) and preparing high level documentation (C language code, flowcharts, algorithmic descriptions, etc.) of the functionality of said code. This is then wrapping into a report or preliminary claim and sent to the customer.
Worked on software components of the SynCardia CardioWestTM temporary Total Artificial Heart (TAHt), a class III medical device. This is a QNX/Neutrino-based project. I participated in the architecture of the software components, and implemented the Data Manager, Alarm Manager, Watchdog Manager, as well as a system logger. The Data and Alarm Managers are responsible for getting inputs from various parts of the system, and writing the data to persistent storage as well as further distributing data to other registered modules.
I worked in two main project areas:
The BSP work part covered a broad range of activities from verifying functionality, writing support code, building images, through to fixing hardware. I've worked on BSPs for the KaRO Triton PXA270 (an Intel ARM-based evaluation board with an LCD), AMPRO Littleboard (x86), and an e300-based PowerPC custom board.
I have also written just over 300 slides of a training course for the QNX Graphics Framework, a separate TDK (Technology Development Kit) that features 2D and 3D graphics for embedded systems featuring an embedded version of openGL.
This a very long contract (2.5 years), and involved at least the following tasks:
The GammaCell 40/1000/3000 Blood Irradiator project is a stand-alone CE-mark (medical device) blood and blood product irradiator. It uses gamma radiation produced by a Cesium 137 source. There are a number of motors and sensors, a user interface (implemented via a serial protocol) on a vacuum tube fluorescent 4x20 display, as well as an interface to a bar code scanner (with ARC/CBS and ISBT-128 database) and other devices via RS-232 serial protocol. The project is based on QNX 6 (Neutrino).
The Avanza Table is a computer-controlled CE-mark (medical device) table used with the Equinox Radiation Therapy machine (described below) that is adjustable under operator or computer control. It's based on an 8051 microprocessor.
The Equinox Radiation Therapy machine is a Cobalt-60 based CE-mark (medical device) radiation therapy machine that delivers controlled doses of gamma radiation for cancer treatment. It's controlled by a dual x86 QNX 6-based control system.
Helped to port over 350k lines of code from QNX 4 to QNX Neutrino 2. The project is a process control system which performs bottle inspection, and consisted of several dozen closely cooperating processes. The main challenges here involved moving from Watcom C to GCC, rearchitecting proxy concepts to use Neutrino's pulses, moving the individual drivers to be resource managers, and general "how to" consulting.
Wrote The QNX Cookbook -- Recipes for Programmers book, which consists of 6 major projects explained in detail, including a RAM-disk filesystem, data acquisition driver, high-availability component, and others.
Worked on data acquisition drivers for PCL-711, ISO-813, and DIO-144 cards under QNX Neutrino 6.2. The device drivers present the same resource manager interface regardless of their capabilities, and another driver, called ADIOS (Analog Digital I/O Server) reads the values from all installed drivers and pops them into a shared memory interface which is organized as a ring buffer. The ring buffer interface has an API which allows easy picking of the last N samples. Additional utilities are responsible for displaying the last N samples from the ring buffer, as well as a tag-based database parser that reads a plain text file and constructs a parse tree based on the analog and digital I/O points, labelling each with a user-supplied tag and span (range).
Responsible for updating an internal document, "IOS Device Drivers", written for Cisco IOS version 12. The document was last updated around 1998, so there were a lot of changes.
Developed QNX training videos. This is approximately 9 hours of video, explaining the QNX Neutrino operating system concepts such as threads, processes, message passing, and device drivers. Development involved video production, generation of (lots of) custom software tools for image manipulation (size conversions and anti-aliasing), wave file cleanup (silence detection and cleanup), and image-to-quicktime movie tools, as well as course content conversion for TV resolution. Also converted the courseware into a Video-on-demand style of Computer Based Training (CBT) involving the generation of yet more custom software tools.
Created a pSOS-to-QNX migration guide. This guide points out the major pieces of the pSOS operating system that need to be taken into consideration when porting source code from pSOS to QNX 6 (Neutrino).
Responsible for general consulting to their QNX development team, as well as the production of miscellaneous tools. One such tool, for example, is a system monitor, that can detect memory overruns, stack usage, cpu usage, etc., and then take actions based on a script file. Another interesting tool allows multiple threads to be identified by symbolic name within a multi-threaded program, especially when some threads are loaded from DLLs. Yet another tool intercepts IPC messages and logs them to a set of rotating log files.
Analyzing OMNX system for scalability and architecture, design, and implementation. This contract involves taking the OMNX process control system (based on QNX 4) and analyzing the sourcebase for correct design principles, as well as writing testcases for regression testing using Expect, TCL, and dejagnu. Also wrote a universal client for testing (allowing arbitrary messages to be generated, including fixed strings, random strings, counters, and fillers), and a reflective shared memory driver for ARCNet which allows two machines to have shared memory between themselves over the ARCNet bus (ported the ARCNet driver to QNX 4 and wrote a simple protocol stack).
Worked on developing a set of courseware for the CRS-1 router project (then known as "HFR"). Responsibilities included scoping out the depth of the training materials required, putting together the actual slides, and presentation.
Designed a high-availability infrastructure for the QNX Neutrino (QNX 6) operating system (everything from cold/warm/hot standby to in-service upgrade strategies to load-sharing and load-balancing). Wrote three chapters of a device-drivers "developers" book (USB, io-net, and the graphics infrastructure).
Worked on drivers for the Cisco GSR 12000 project. This involved writing a device driver for a high-speed (gigabit range) switching fabric. Also worked on Primary/Standby arbitration module for redundant RPs. (If you're currently at Cisco, do an EDCS search for "krten" in the author field :-))
This short term contract involved porting MATROX's "Genesis" frame grabber software written for Windows/NT to QNX 4, and also making notes of what needs to be done for QNX Neutrino (QNX 6). This contract was completed to the satisfaction of the customer.
Developed and presented two courses:
Also, I developed the prototype version of the "qnet" native network manager for Neutrino (QNX 6), which included writing a transport layer and network layer for Ethernet / IP, and interfacing to the kernel.
Finally, I wrote a significant portion of the "Building Embedded Systems" manual, which describes how to develop programs and systems for the Neutrino operating system.
This short-term contract involved porting the DIPIX XPG frame grabber device driver from Windows/NT to QNX 4. Contract involved DMA and interrupt handler development work, and was fixed price. The contract was completed on schedule, with no additional follow-on support required.
Taught 3 day 'Introduction to Call Processing' course twice per month. This course gives an overview of all aspects of call processing, from originator going off hook to digit collection, translation, routing, termination, billing, supervision, etc. Marks averaging around 90%. Also presented this course in India (Bombay & Bangalore).
Automated DMS-100 Central Office Switch base level testcases using T language and the AGE automation package. Testcases developed under HP/UX with custom BNR tools. Created the T-Language Analyzer, a sophisticated 'lint'-like package for the T-Language, consisting of a preprocessor, tokenizer, recursive-descent parser, and multiple analyzers. Wrote the T-Language Analyzer in a weekend because management said it couldn't be done in less than 6 months.
Developed Pascal and 8086 software to exercise hardware modules in an 80186 based test fixture. The test software would verify operation of analog, digital, and custom I/O circuitry, and then print a report. Also, wrote scripts to perform module testing of C code. Wrote test procedures to validate components of the CF-UTTH Avionics Management System Control and Display Unit (AMS/CDU). Wrote validation scripts for IIDS project using XRAY x86 simulator on VAX/VMS at a rate 3 to 4 times faster than any of the other contractors on the project and got commended for it.
Installation and support of OS/2 based data acquisition and control package. Project was based in C, using named pipes for intertask communication. Documentation was written to describe configuration.
Responsible for documenting the requirements, detailed design, and software test plans for a small microcontroller based Radar system (the CMR-91). Also, fixed code bugs, added features, and performed testing of the system. Project was based in C (for 8051 microcontroller). Later, designed and built hardware testjig, with diagnostic software.
Responsible for coding portions of their software in C from pseudo-code. The software involved complex mathematics, and was hosted under the UNIX operating system. Later, I was involved with graphing functions, optimizing subroutines to run faster, generate Postscript output, and documentation.
Responsible for specific ANSI C programming tasks, including:
In addition, this project consisted of about 2k lines of shell script for startup, shutdown, backup, etc. applications. The script language used was QNX 2.15 "sh", which was primitive and many workarounds had to be implemented (such as subroutine calls and global variables).
During this period, I was responsible for most of DATEM's software product line. I designed, documented, and maintained a diverse range of products, across several operating systems, including:
The operating systems that these projects were ported to were MS-DOS, VAX / VMS, XENIX, iRMX86 and 286, OS/2, and QNX 2.
Other duties included product support, scheduling, and customer presentations / sales calls.
Omzig corporation was in the business of developing background resident MS-DOS telecommunications software for electronic mail and telex. I was responsible for most of the initial implementation of key components of this product.
Later, as the project progressed, I was promoted to the position of manager of the product verification department. There, I was responsible for designing and implementing software and hardware test procedures, including building hardware jigs. One such jig, for example, allowed the capture of keystrokes from a PC-compatible keyboard onto a hard disk. Later, those keystrokes could be "replayed" directly into the keyboard port of a test machine, allowing the analysis of timing related bugs, as well as the initiation of repetitive reliability testing.
I've been involved in many projects over the years purely for my own edification:
Computers, fortunately or unfortunately, are my main hobby. I've restored a 1976-vintage PDP-8/E computer, which involved hardware repair, maintenance, and diagnostics work, as well as programming in PAL-8 (the PDP-8's assembly language) for testing. My next project was the restoration of an even earlier (1969 vintage) computer, the PDP-8/I, which is based on straight 74-series TTL gates. Next, I restored my PDP-12 minicomputer, which is even bigger than the PDP-8/I :-)
Other projects have included a Caller-ID interface that connects to my TV set, so that I can see who's calling while watching a movie by simply switching to the TV's auxilliary input line. The project also involves a 500 megabyte reverse-phone number lookup database, and writing a device driver under FreeBSD for a YUV framebuffer video card for use with MPLAYER and a (custom) video manager.
I also like to experiment with ray-tracing, and have been playing with fractal terrain generation and POVRay interfacing.
Click here to return to the home page.
Click here to see Robert Krten's home page.