Software Engineer in C, C++, Python; Embedded Firmware Developer; Test Automation
Dallas, Texas 75225
Email: trg.mike @ yahoo.com Skype: trg.tomike
15+ years of Real-Time and Linux embedded experience; Develop applications and drivers for Windows, FreeRTOS, VxWorks, Linux.
Working knowledge of OOD and TDD, implement algorithms into program code using C++, C, Python, Shell, and Assembly language.
Demonstrated leadership by successfully led a small Software Development Team for 5 years.
B.S. in Computer Science with an emphasis in Real-time Systems Programming. Ability to quickly grasp new technical concepts to shorten learning curve.
C, C++, Python, VB, Assembly
Windows, Linux, FreeRTOS, VxWorks
OS, RTOS, Device Drivers
Visual Studio, Eclipse, NetBeans
Development IDE Tools
ClearCase, SourceSafe, SVN, Bugzilla
Revision Control Tools
ARM, PIC, AVR, MSP430, 8051
ICE, Trace32, JTAG, Serial I/O
LabVIEW, Oscilloscope, Logic Analyzer
Lab Test Tools
B.S. in Computer Science
California State University of Fresno – Fresno, CA
A.S. in Electronics Technology
Fresno City College – Fresno, CA
April 2017 – Present
July 2016 - September 2017
Software Engineer Contractor. Provide Contract Embedded Linux and RTOS software development. Consulting works included:
Embedded real time application development in C, C++ and Python; Develop device drivers for bare metal systems, Linux, and RTOS
Use FreeRTOS for ARM7, ARM9, and ARM Cortex-M microcontrollers; Linux in SoC ARM Raspberry Pi, TI AM335x, and NXP i.MX6
HW peripherals comm protocols (PWM, ADC, DAC, SPI, I2C, UART, USB, RS232); Unit Test, Test Driven Development (TDD), Acceptance Test D D (ATDD)
Setup cross/remote compilation tools, ICE, JTAG, and debuggers; LMAR (Logging, Monitoring, Alerting, Reporting) mechanisms
December 2016 – March 2017
Embedded Software Engineer to support the design, development and test of counter threat measurement system.
Use of TI ARM DSP processors and Code Composer C/C++ to design, implementation, test/debug and integration of large embedded software subsystems.
Drive the analysis of customer requirements and development of internal software requirements to translate into coding.
Develop embedded software drivers related to the use of Flash memory, PWM controllers, A/D and D/A.
June 2014 – July 2016
Software Engineering contractor. Consulting projects and works included:
Development of embedded real-time C++ in all phases of the SDLC (Software Development Life Cycle) including requirements analysis, design, coding, unit test, integration, and verification of Bare Metal, Embedded Linux and FreeRTOS.
Use C/C++ to design, develop, and testing of Xilinx Zynq SOC FPGA ARM core, I2C, SPI, FLASH and TCP/UDP for Turret system.
August 2012 – April 2014
Work as Software Engineer. Primary function was to develop embedded application layer software on top of the QNX platform. The software perform robotic movements for an automated IVD system to process Immunoassays and deliver result data to a central control system. The tasks include system and algorithm design and implementation unit test cases & debug.
Participate in a team-oriented environment to define and develop embedded system control applications.
Analyze existing designs for testability and maintainability and redesign as required. Define Internal and External software interfaces using program and industry standards.
Develop software test strategies including regression analysis perform unit testing in a mock environment. Responsible for developing test plans and test cases for software components.
Write test software in C++ / C using Google Test and Google Mock for a IVD medical instrument. Used a CASE tool for testing, and documented results.
Develope board device driver in the areas of file system, communication, networking. Other duties included documenting system requirements, designing, developing, coding new and existing systems, and testing code with hardware.
Skiva Technologies, Inc.
Feburary 2010 – July 2012
Work as Firmware Engineering contractor. Consulting projects and works included:
Development of BSP and board device driver in the areas of file system, communication, networking for ARM embedded linux platform. Other duties included documenting system requirements, designing, developing, coding new and existing systems, and testing code with hardware.
Using C/C++, Altium to research, design, development, and testing of low power embedded MCU/microcontrollers, I2C, SPI, UART and USB. Design schematic capture and PCB layout.
General Dynamics C4S
March 2009 - January 2010
Software Engineer Contractor - Responsibilities included the development of large, complex DoD JTRS Software Defined Radio systems. Hands on support new feature development and quality improvements, help create project requirements, and provide input to design decisions. Research software design and develop well documented and quality software applying OOP principles and techniques. Develop and document detailed integration and test plans for new and reused code. Participate and conduct peer reviews of software coding.
Work with hardware elements, PowerPC 8544, read schematics and block diagrams.
Usage of TCP/IP, BSD Sockets API. Programming in C/C++ OOP, Green Hills Integrity RTOS Compiler tools, Linux based OS.
Write multithreaded applications, use Clearcase and Clearquest Rational tools for software management.
Use Telelogic DOORS, Rhapsody, Understand C++, Rational Rose, Prismtech tools for Software Defined Radio Waveforms. Work with SCA v2.2.2, CORBA, UML and XML.
October 2006 – January 2009
Software Foundation Engineer - Develop NavNet as a part of TI-Nspire handheld device connectivity interface to and from PC computer. Work within a small team to design and implement PC Windows’s hosted applications such as Computer Link, Connect-to-Class, and Data Collection. Design and program Nucleus based device driver’s components and apps. Integrate wireless AP routers and firewalls into classroom network. Perform software integration and testing with DCSled sensors and probes. Key technologies involved are:
Programming languages using C++, C and Shell Scripting in ARM Nucleus and Windows platforms.
NavNet Connectivity medium included Serial I/O, USB, and TCP/UDP via wireless 802.11 b/g.
Implement wireless network bridge to access point translator for Texas Instruments TI-Nspire technology.
August 2005 - September 2006
Sr Embedded Software Engineer - Design and implement embedded firmware applications utilizing Nucleus RTOS targeting ARM processor for Vehicles Tracking Systems. Develop device drivers for CDMA/GPRS data modem, Zigbee, GPS, RS422, TCP/IP and to facilitate the company’s products development. Other duties included:
Developed System Initialization and Boot code for ARM7 platform as well as driver and interrupt service routines for peripherals, network interfacing, and backend web based data collection.
Developed Software Requirements and High-Level Design Specifications Documents to meet customer expectations.
Worked closely with the sales, customer service and management teams to ensure the mutual understanding of customer issues and project schedules.
Las Vegas, Nevada
October 2001 - July 2005
Join Video Main Team to design next generation of Host Interface Manager for Video Slot Machines, Responsibilities:
Participate as team member to develop and deploy next generation of Host Interfaces for Slot Game Machines.
Perform all tasks in the software development process through implementations, integration, test, and deployment.
Maintain and modify legacy code to correct errors, bugs, and incorporate new functionality.
Develop unit test plan and software tools to validate firmware applications to meet Nevada Gaming Regulations.
Philips Semiconductor, CARD Center
April 2000 - September 2001
Sr Software Engineer - Develop User Interface/MMI using C and Assembly Languages targeting ARM processor for Cellular Handsets. Develop Automatic Test/Calibration software on Automated Test Equipment to facilitate regression test and certification of CDMA/AMPS/GSM Cellular Handsets. Other duties included:
Work with RF/System Engineers to define and implement test procedures for Cellular Handsets.
Design, Code, and Test wireless data communication software and protocols (IS95A, TSB74, J-STD-008).
Work closely with Customers and Manufacturers to ensure testability and calibratability of Cellular Handsets.
January 1999 - March 2000
Software Engineer - Design and develop “C” Developer’s SDK Toolkit for Multi-Host POS Terminals for retail and restaurant merchants Credit/Debit Transactions. Responsible for migrating legacy assembly code to portable ANSI C language.
Develop Point of Sale applications targeting Z80 embedded processor for Multi-Host POS Terminals.
Responsible for Credit/Debit Card and Transaction processing software applications.
Develop firmware driver and API for signature capture and host interface communication for storage and retrieval.
Taught classes in Point of Sale concepts and practical applications of POS software package. Provide technical support for customer base.
DEVELOPMENT SOLUTIONS OFFER
Dell PC Hosted Remote/Cross Software Development System for Embedded Linux ARM SoC Raspberry Pi w/Ubuntu Linux Computer Hardware & Software
# Raspberry Pi ARM SoM Professional Dev Kit Compute Module 3 + CM3 IO Board + 7" HDMI LCD with raspbian lite Linux OS Installed
# Fast Dell OptiPlex Intel CPU SFF or DT Ubuntu Linux 120GB SSD 4GB/8GB PC: Intel CPU; 4GB; 120GB SSD; DVD+RW
# PC software installed: ubuntu-18.04.1-desktop-amd64 Linux; openssh-server SSH Server; tightvncserver TightVNC; teamviewer-host; build-essential: GNU GCC G++ C C++ Compiler; oracle-java8 Oracle Java JDK/JRE; netbeans-8.2-linux NetBeans IDE; clipse-cpp-photon Eclipse IDE.
# build-essential: GNU C C++ Compiler Tools in Raspbian for Remote Development of ARM MCU Raspberry Pi
# gcc-linaro-arm-linux-gnueabihf-raspbian: Linaro GNU C C++ Compiler Tools in host PC for Cross Development of Raspbian ARM Raspberry Pi
# Drivers and Examples: 1-Wire, AD_DA, Audio, CAN, Ethernet, GPIO, I2C, Infrared, ISM_Radio, LCD, LED, Light_bus, PWM, RS-485, SPI, Timers, TP-BUS, UART, USB, Video, WDT
Solution 2: Dell PC Hosted SEGGER GNU Embedded Studio Software Development for ARM MCU w/Ubuntu Linux Computer Hardware & Software
# LinkIt 7697 Cortex-M4 with FPU@192Mhz; IoT application; Wi-Fi 802.11 b/g/n (2.4G); BLE; Pin-out for GPIO, UART, I2C, SPI, PWM, EINT, ADC, IrDA, I2S; Open software development FreeRTOS; 352KB RAM and 4MB Flash
* J-Link BASE Debug Probe; Bus Pirate v3.6 universal serial interface board
# Fast Dell OptiPlex PC Ubuntu Linux and common PC software packages installed
# SEGGER Embedded Studio: a cross development environment C/C++ IDE works with almost any ARM microcontroller. It directly links with the J-Link debug probe. Support for all ARM-based devices
FreeRTOS Real Time Kernel: Mini RTOS kernel for small embedded systems. Preconfigured example programs are included for a variety of microcontroller architectures including ARM7, ARM CORTEX and others.
# CppUTest: A C/C++ based unit xUnit test framework for unit testing and for test-driving development (TDD) your code. Portable and simple to use.
# GoogleTest and GoogleMock: Google's C++ test framework. GoogleMock is a framework imitating the rest of your system during unit tests.
# Unity: Curiously Powerful Unit Testing in C for C. Build with Test-driven Development in mind.
# Argtable: A single-file, ANSI C, command-line parsing library that parses GNU-style command-line options.
# eCLI: The embedded Command Line Interpreter, ecli, allows users to bind in a directory of commands and the associated functions to execute those commands. MIT license.
# zlib: is lossless data compression decompression library for use on virtually any computer hardware and operating system. The zlib data format is itself portable across platforms.
# FatFs: is a generic FAT/exFAT filesystem module for small embedded systems. The FatFs module is written in compliance with ANSI C (C89) and completely separated from the disk I/O layer. Therefore it is independent of the platform. It can be incorporated into small microcontrollers with limited resource, such as 8051, PIC, AVR, ARM, Z80, RX and etc.
# log4cplus: is a simple to use C++ logging API providing thread-safe, flexible, and arbitrarily granular control over log management and configuration. It is modelled after the Java log4j API.
# lwIP Lightweight TCP/IP stack: A small TCP/IP implementation for embedded systems. lwIP is used in many commercial products. lwIP is licenced under a BSD-style license.
# jsmn parser: a minimalistic JSON parser in C. It can be easily integrated into resource-limited or embedded projects.
# AnyRPC: provides a common system to work with a number of different remote procedure call standards for C++. Currently supported RPC standards include: JsonRpc, XmlRpc and MessagePackRpc
# cJSON: Ultralightweight JSON parser in ANSI C. parser, under MIT license.
# mbed TLS: makes it trivially easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products, facilitating this functionality with a minimal coding footprint.
# AWS IoT: SDK for connecting to Amazon Web Services Internet of Things (AWS IoT) from a device using embedded C.
OS: win32 pthread Multi Threaded re-entrant NW: network protocols TCP/IP TCP UDP RPC JSON XML OSS: opensource open source Elasticsearch Logstash FluentD Kibana ELK EFK Nagios Wireshark FW: GoogleTest Google Test GoogleMock Google Mock Cpputest Cunit TECH: data log logger parse store storage visualize visualization TEST: blackbox greybox whitebox unit functional regression stress performance test driven test-driven development TDD