Charles Arthur
7811 Potrero
510 235 7190
charlesaarthur@earthlink.net
Experienced software engineer with skills in Windows programming, real time operating systems, and data base programming. Major strengths in C++, C, C#, embedded process control and instrumentation, MFC, Visual Basic, assembly language, STL, SQL, protected/real mode, numerical analysis, process simulation,. Analog and control systems engineering.
C/C++ (Microsoft, GNU), C#, Assembler (80x86, TMS320F, 8051, 68302, PIC16c72, 6811), Visual Basic( 6.0 and .net), STL, ACCESS, ODBC, TCP/IP.
Digital and analog circuit design, embedded systems, control loops, Ethernet, ATM, telephony, data acquisition boards, electrometer, DSP algorithms, spectroscopy, switching power supplies, and vacuum environments. Experienced with oscilloscopes, logic analyzers, in-circuit emulators, and related hardware and software diagnostic tools.
Win32 C++ object-oriented (MFC and .net) applications development.
Real time, high performance systems architecture.
Device drivers: DOS, Window NT, embedded processors.
Multi-threaded and multitasking applications.
Data communications.
SQL and Database applications.
Numerical analysis.
Well developed diagnostic skills.
2007
Consultant for JDS Uniphase
Migrated a Visual Basic 6 application which I created in previous years to Visual Studio C# 2005. Upgrade provides many advantages over previous product including 1) true object oriented design, 2) absence of versioning problems inherent in previous Microsoft development, 3) implementation which does not require separate dll for graphics, and 4) double buffered graphics.
Created real time control of refrigeration system within an industrial laser product. This is an additional control loop which runs on the existing laser control system I wrote. An outside vendor provided a refrigerator which included an Allen Bradley 620 Programmable Logic Controller. A large part of my job was to implement the DF1 protocol within the laser; this protocol is native to the PLC.
Using C# 2005, wrote and installed a full simulation package of refrigerator and PLC. Production department used it for testing laser when a physical refrigerator is not present. Package also improved robustness of product by evaluating what happens when random packets between the laser and the PLC are corrupted.
2006
Consultant for Lightwave Electronics and JDS Uniphase
Developed full user interface for laser product which I previously developed entire control system for. Visual Basic 6 application and Visual C++ dynamic link library provides real time graphics and data logging as well as an unlimited number of windows.
Consultant for Powerlinx Electronics
Developed hardware, protocol, and software for full remote control video system. Peer to peer communication at 2.4 GHz performed in Chipcon CC2510 microprocessor. Programmed in C using IAR Systems development system.
2004- Consultant for Adaptive Systems, San Jose
2005
Developed pure software I2C bus interface among three Atmel 8052 processors. Used Keil Compiler; 95% of code was C, 5% assembly.
2004 Consultant for Neoguide Systems, Campbell
Developed Hardware Abstraction Layer Interface for Embedded Processor using TMS320F2812. Modules included Content Addressable Network (CAN) bus, motor interface, PWM, UARTs, timers, AD/C. Development tools included Code Composer Studio and DSP/BIOS real time operating system.
2002-
Consultant for Lightwave Electronics,
2003
Wrote rs232 low level driver for Philips XA-SA3 microprocessor using Tasking XA development studio. Entire code written in C. Also implemented all high level commands that are invoked via serial port. Debugging uncovered compiler errors which were corrected by redefining C structures. Used Nohau ICE for debugging. Wrote graphical user interface program in Visual Basic 6 which is user interface to target embedded system described above. Over 10,000 lines of code. Includes real time data logging and graphs, password protection. Can be run in pure simulation mode where it does not need to connect to a live target for full functionality. Complete FAT32 format with support for long filenames was implemented. Entire code is also simulated in a Windows 98 console window; the only differences between the simulation code and actual target code is the lowest level routines that actually read/write data. 95% of code written in Visual C++, other 5% was written in assembly for fast flash sector write.
Wrote manufacturing test program which tested target from Windows 98 environment using WIN32 rs232 functions. Code was multi-threaded and required multiple semaphores. Test environment ran under Labview.
1998 -
Principal Engineer for Telekom Advanced Systems:
2001
Ported Red Hat Linux to proprietary 80486 sc400 platform. Full Linux ext2 file system was loaded into flash memory; only other file device was one of a floppy, ls120, zip, or magnetic/optical floppy drive. Wrote proprietary flash file driver based on existing ram disk driver which is part of standard Linux. Kernel and file system were loaded in one step to target using our own Kermit file transfer program, which is described below. User programs are also loaded via Kermit, although user programs required static link.
Wrote, installed, and verified complete flash file system additon to smx ertfs ( product name ‘embedded real time file system’ from ebs software ). As flash hardware requires expensive erasure operations to change any ‘0’ to a ‘1’, proprietary code was written to keep track of and move sectors requiring such an erasure to new clean sectors. Special control and book keeping sectors keep track of all this information; these sectors were spread through out the flash parts to equalize number of erasures through device. Redundant control blocks and FAT tables included checksums for detecting bad sectors and taking appropriate actions. Complete FAT32 format with support for long filenames was implemented. Entire code is also simulated in a Windows 98 console window; the only differences between the simulation code and actual target code is the lowest level routines that actually read/write data. 95% of code written in Visual C++, other 5% was written in assembly for fast flash sector write.
Wrote, tested and installed a loader which loaded entire 750 kB WIN 32 application into proprietary hardware running under smx. As computer boots into dos real mode, loader switches to 32 bit protected mode using modifications of pmeasy, ( product name for smx ‘protected mode easy’ ), loads the application from the flash file system, provides all required fixups, and executes it. Loader was written 30% in Visual C++ 1.52, 30% in Visual C++ 5.0, and 40% in protected mode assembly language. Application required several DPMI services, which were modified from smx product.
Wrote, tested, and installed a mini BIOS which tested and prepared the hardware and then called the above loader. POST included code that detects amount and configuration of DRAM and sets hardware automatically. As application never uses DOS services nor BIOS services after loading; new BIOS was under 10 kb. BIOS written entirely in real mode assembly.
Wrote, tested, and installed Kermit receiver for above application which is used to download a new application into the flash file system. Code could run standalone in console window in host, or in the appllication on the target. As the serial driver on the target dealt only with 7 bit data, this Kermit negotiated with Windows 98 Hyperterminal for 7 bit encoding. This Kermit also provided Sliding Window Protocol which was used with Windows 98 Warthen Kermit ( a shareware Kermit ) for faster file transfer. Two versions of this Kermit were required; one for real mode and the other for protected mode; protected mode version uses proprietary rs232 driver.
Designed, programmed, simulated, and verified embedded 8051 controller which provided keyboard and lcd display facilities to host. Simulation included full 8051 opcodes and all peripherals including uart, lcd controller, keyboard, and a/d converter which measures ambient temperature. Keyboard code included key debounce.
1997-1998
Consultant associated with San Andreas Systems;
Wrote and tested serial port driver for MicroChip 17c756 processor. Protocol includes synchronization and error recovery between master and slave processors running identical interrupt service routines. To save space, a single circular buffer is used for both transmit and receive data. All code written in C and runs equally well on the target processor, on target processor simulation on a pc, and on virtual 8086 boxes using win32 api calls which are compiled using Visual C++ 5.0.
Provided non-linear curve fit for an oxygen sensor using MicroChip 16c72 series microprocessor. Entire code written in assembly. Hard coded several tables within processor. Processor continuously performed a/d measurement, curve-fit algorithm, bcd output to seven segment display, and pwm output for chart recorder.
Wrote MFC user interface for Win32 program which displays information in several 'views' simultaneously including 1) parsed tree format, 2) raw data dump, and 3) text edit boxes. Used MFC classes CtreeCtrl, CtreeView, CScrollView. Written entirely in VC++ 6.0.
Ported user supplied device driver to Windows NT 4.0. Driver consisted of I/O mapped analog to digital converter, quadrature encoder, and returned large amounts of returned data. Used Vireo Softsware Driver::Works tools, NT DDK, NT SDK , Visual C++ 5.0, and Visual Basic 6.0 program to access, test, and verify driver.
On existing client product, obtained additional ram data space by reconfiguring memory strategy. Program detected presence and location of global descriptor table and page tables. Rewrote the latter in real time to map 64k extended block into upper memory area. Task also required emm386 knowledge, protected mode programming skills, and writing a custom memory allocation routine.
Wrote client/server suite which utilized Win32 sockets for passing messages. Handshake messages included 'Hello Server' and was based on Viktor Volkman prototype code from Window's Developer's Journal. Much of client code was also placed into dll, as per client request. Code written entirely in VC++ 6.0.
Wrote 450 kByte Visual Basic 5.0 application that processes medical billing information text files into 100 MByte Access 97 database. Program also groups, displays and allows operator input via friendly user interface. The outputs from the application are reports that are sent automatically to clients indicating errors in their inputs. This program was primary tool that enabled a four-fold increase in claims processing.
Implemented automation/server suite using MFC 5.0 and OLE that enabled customers to perform RDBM queries and reports without requiring the user to use SQL. Suite gained access to Access 97 database using ODBC.
Added major Codeview database functionality to existing MFC application called Planware. Added modules read real estate parcel information from county archives and processes information into dBase IV compatible files which are then read as part of existing Planware application. Parsing data required SQL processing.
1997
Consultant. Magnetic Semiconductors,
Wrote multi-threaded Win32 CAD package for analyzing electrical performance of new generation semiconductor memory cells. Used Visual C++ 5.0 MFC to provide 2-D contours of voltage, mobility, and current density within MOSFET cell. Simulation accurately accounted for short channel effects, drift velocity saturation, and mobility modulation due to transverse electric fields. Algorithms included conjugate gradient and Newton-Rapheson techniques to solve 11000 nonlinear simultaneous equations. User chose solution method from menu; object oriented techniques were used to call proper algorithms via virtual function calls. That is, one class implemented conjugate gradient algorithms and a class derived from it implemented biconjugate gradient algorithm. Program was OLE server, which allowed output to be embedded into Microsoft Word documents automatically.
1994-1997
Principal Engineer. Tut Systems,
Wrote real time operating system, RS232 drivers, and user interface for MC68EN302 processor using SDS C++ compiler and development system. User interface was VT100 terminal. Six screens reported alarms, configuration and status of TCP/IP bridge/router. Processor also communicated to a/d converter and NVRAM via SDI bus.
Wrote user configuration and
diagnostic programs for Ethernet ISA product. Used
attractive GUI for user interface. Configuration routines detect/change
port address and IRQ. Diagnostic routines count good and corrupted
packets.
Simulated and evaluated DSP algorithms for data communication over telephone wires in homes. Starting from measured step response of in-home wiring which was measured on Tektronix TDS oscilloscope and transferred to a PC, the performance of IIR, convolution, and training routines was measured via simulation. Visual C++ 4.0 and MFC were used for menu and graphical displays.
Provided a bar graph display for manufacturing testing and diagnostic. Used 8051 to obtain data from rs232 link, provide validity analysis via internal timing, and multiplex segment display.
· MS
EECS,
· BS
EECS,