Senior level software developer with 30 years of experience building application stacks and creating software for the desktop or software that runs on embedded or real time operating systems. โข Special knowledge of cross-platform, multi-threaded and multi-process differences.
Experience
2021 โ Now
2021 โ Now
NASA Ames Research Center, Mountain View, California
๐ก๐๐ฆ๐ ๐ฉ๐๐ฃ๐๐ฅ (๐ฉ๐ผ๐น๐ฎ๐๐ถ๐น๐ฒ๐ ๐๐ป๐๐ฒ๐๐๐ถ๐ด๐ฎ๐๐ถ๐ป๐ด ๐ฃ๐ผ๐น๐ฎ๐ฟ ๐๐ ๐ฝ๐น๐ผ๐ฟ๐ฎ๐๐ถ๐ผ๐ป ๐ฅ๐ผ๐๐ฒ๐ฟ)
โข Implemented the Flash File System for NASA Amesโ VIPER. The file system uses Tuxera's Reliance File System over a FlashFX Translation Layer. The raw NAND flash module resides on a Broadreach DMOAB board and is accessible via the PCI backplane. The flash module uses Micron dies and the programming complies with ONFI (Open-NAND Flash Interface) protocol. The flash module provides hardware TMR and we added BCH EDAC. We optimized the file system for performance.
โข Created a flash emulation layer that FlashFX can use. This emulation communicates over UDP (or TCP) to a host server which maintains a large bit file representing the flash media. This flash emulation is implemented under the Reliance+FlashFX and is included in our RAD750 emulation via QEMU.
โข Development of the flash filesystem includes two flash geometries: the VIPER flight unit and the legacy LADEE development unit.
โข Developed background tasks that trigger memory scrubbing of the flash disks. This task also triggers compactions when necessary. Adjusted the parameters of these tasks to achieve overall flash disk performance.
โข Created a memory scrub cFS app that can send commands to the file system in order to report performance or usage stats or set flash disk scrubbing parameters. The app also reports file system EDACs as they occur.
โข Implemented YAMCS ground system descriptions for file system commanding and telemetry points using XTCE.
โข Developed bit error testing capability that can inject TMR errors during page reads or page writes.
2018 โ 2021
NASA Ames Research Center, Mountain View, California
๐ก๐๐ฆ๐ ๐๐ถ๐ผ๐ฆ๐ฒ๐ป๐๐ถ๐ป๐ฒ๐น ๐ฆ๐ฝ๐ฎ๐ฐ๐ฒ๐ฐ๐ฟ๐ฎ๐ณ๐ ๐๐น๐ถ๐ด๐ต๐ ๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ
โข Implemented EDAC (Error Detection and Correction) reporting for the NASA Amesโ BioSentinel satellite. The low-level VxWorks ISR gets called when the Reed-Solomon / BCH code doesnโt agree with its corresponding word in SDRAM / MRAM. The ISR scrubs the memory and packages a message which gets sent over the NASA Goddard cFS (core Flight System) bus which is then communicated to the ground system via telemetry.
โข Constructed and tested the Flash Memory File System stack for NASA Amesโ BioSentinel satellite and includes WindRiverโs Highly Reliable File System (HRFS) over FlashFX Translation Layer over low level bit-banging GPIO code to affect page reads/writes and block erases. We also partitioned the 24 GiB raw NAND flash into three segments so that we could implement TMR (triple modal redundancy). A flash page is streamed in parallel to the three regions on the flash module. Also added EDAC with BCH codes for the case when TMR fails.
โข Unlike our flight boards, our NEXYS 4 DDR dev boards do not have onboard flash. So I created a flash emulation layer that performs UDP to a host-side server that affects the page reads/writes and block erases to/from an 8 GiB file (no TMR). This is implemented in lieu of the GPIO code used on the flight unit.
โข Developed background tasks that periodically scrub the flash disk memory.
โข Created a memory scrub cFS app that can adjust flash file system parameters and report EDACs when they occur.
โข Implemented ground software descriptions for the flash file system using NASA's ITOS (Integrated Test and Operations System).
โข Implemented an in-flight VxWorks kernel patch facility that allows us to uplink a full VxWorks image patch. The patch uses binary file differences so that the uplink works with small patch files.
2015 โ 2018
NASA Research Park, Moffett Field, California
๐ ๐ผ๐ฑ๐ฒ๐น ๐๐ฎ๐๐ฒ๐ฑ ๐ฆ๐๐๐๐ฒ๐บ๐ ๐๐ป๐ด๐ถ๐ป๐ฒ๐ฒ๐ฟ๐ถ๐ป๐ด (๐ ๐๐ฆ๐) ๐ฆ๐ผ๐ณ๐๐๐ฎ๐ฟ๐ฒ ๐๐ฒ๐๐ฒ๐น๐ผ๐ฝ๐บ๐ฒ๐ป๐
โข Wrote an XMI (XML Metadata Interchange) parser / generator in C++. This allows MEI to do data exchange between UML / SysML models in Rhapsody Systems Architect, Enterprise Architect or Papyrus and models in MATLAB / Simulink.
๐ ๐ถ๐๐๐ถ๐น๐ฒ ๐๐ฒ๐ณ๐ฒ๐ป๐๐ฒ ๐๐ด๐ฒ๐ป๐ฐ๐ ๐ ๐ถ๐๐๐ถ๐น๐ฒ ๐ฆ๐ถ๐บ๐๐น๐ฎ๐๐ถ๐ผ๐ป ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ
โข Performed stability analysis for Sensor Sim, a multirate system composed of Simulink diagrams, S-functions, generated realtime scheduler and other Linux layers.
โข Developed a rate monotonic scheduler for use on Concurrentโs iHawk multicore platform.
โข Developed Simulink software to acquire and process images from a SMPTE board.
โข Created a shared memory connection between Simulink tasks and a handwritten airborne processor.
โข Investigated multicore real time performance in both the Sensor Sim and MDA missile simulation programs. Added performance logging capabilities.
โข Created a block in Simulink to schedule subsystem code on separate threads (CPUs).
โข Restructured an image processing algorithm to perform operations in parallel.
โข Created a priority-based dynamic scheduling layer that keeps CPUs busy and alleviates the user from the labor-intensive load balancing exercises.
โข Created an event chart that shows when tasks are computing, for how long and on which CPUs. It also shows the scheduling latencies, and which CPUs are idle and which ones are computing.
โข Enhanced the dynamic scheduling algorithm to distribute its algorithm on multiple CPUs. This allowed for an order of magnitude more events per second to be scheduled. It also reduced the periodic jitter to acceptable values.
2003 โ 2014
2003 โ 2014
Mountain View, California
โข Reworked the Xmath lexer/parser from using Lex/Yacc to using Flex/Bison.
โข Refactored many C++ classes in Xmath to eliminate illegal mechanisms using template, functors and inheritance where appropriate.
โข Restructured Xmath, a matrix math package, into a pure IPC server architecture.
โข Defined a platform abstraction for MATRIXx using C++ classes and templates.
โข Enhanced MATRIXx framework by creating the client interface to the Xmath server.
โข Made external SystemBuild simulator libraries customizable from within the product. For this feature, the user annotates the model with code they want to call and we generate the makefile, invoke it creating DLLs (or shareable objects) and dynamically link the result back into the simulator.
โข Created a user command player/recorder feature for VeriStand, an HIL (hardware in the loop) desktop tool.
โข Developed new ODE/DAE solvers for the LabVIEW simulator. The solvers added were Adams-Moulton, Gearโs method for implicit systems, the SDIRK family, the Radau IIA family as well as DASSL. The solver coefficients were derived using Maple in quad precision as a future-proofing strategy.
โข Implemented an event location mechanism for the continuous-time simulator. The algorithm works with a vector of nonlinear functions, is guaranteed to converge; has cubic convergence in the first three iterations; is superlinear thereafter.
โข Developed ODE interpolants for each solver for use in the event root finder where the accuracy in the interpolation over the previous step uses information from the solver.
โข Wrote compiler transformations which convert low level DSP blocks into LabVIEW diagram equivalents.
1999 โ 2002
1999 โ 2002
โข Retargeted the OSEK RTOS kernel to the Mitsubishi M32R processor. The OSEK design provisions the kernel using static resources (tasks, queues, semaphores, etc).
โข Implemented the protocol stack (IDB-C) for the automotive market. This effort implemented the link and transport layers of the ITS Data Bus (IDB) protocol. The physical layer was CAN. Thus the name IDB-C. This implementation was written to adhere to the SAE specification J2366/1.
โข Led the release of Tornado 3.1 / VxWorksAE 1.1 for the Hitachi SuperH.
Education
California Polytechnic State University-San Luis Obispo