Gary Stringham

November 30, 2009

The Dangers of Read-Modify-Write

In registers containing several read/write configuration bits, a device driver often needs to change one bit without changing the others. One technique is for the device driver to keep a shadow copy of that register in its own data structures. The device driver modifies the desired bit in its copy, […]
October 31, 2009

Hardware and Firmware Ambassadors

As I look back over my years of attending project meetings, I remember that on many occasions there was someone attending our meetings who was not part of our team, but was there as a representative of some other team we had to work with. More specifically, in our printer […]
September 30, 2009

The One and Only True Method – Really?

Over 20 years ago while working on my master’s degree in electrical engineering, I took a computer science class that required a term software project. At the time I had a Hewlett-Packard 9816 computer that ran HP’s Rocky Mountain Basic (RMB). This version of Basic was very powerful for its […]
July 31, 2009

More on Product-Specific Details

In the comments to last month’s article, there were some agreeing with me and some not. In further discussions with most of them, they said that 5 to 20% of their code is product-specific. Size was a factor – the larger the code base, the more they split product-specific code […]
June 30, 2009

Product-Specific Details

It is well-understood that reusing the same code across multiple products is ideal. However, how can it be done when each product has different features, constants, and chips? Here are a few techniques I used to have one device driver support several HP LaserJet printers with different features, capabilities, and […]
May 30, 2009

Programmers’ Wishlists for Hardware Engineers

While traipsing through the internet, I came across an article at Windows Hardware Developer Central titled, If every hardware engineer just understood that… In it, four Windows programmers discuss various ways hardware engineers could make software development and debugging easier. Here are the highlights: Steve Dispensa: Windows is not a […]
April 30, 2009

Using DMA for the Block Itself

While reviewing the notes for another chapter of my book, I came across the following concept that I had written down about five years ago but had forgotten; DMAs are commonly used to transfer data into and out of a block, but what about using the DMA to read and […]
March 30, 2009

Countdown vs. Countup Counters

In response to last month’s article about countdown counters, Jay Dowling states that he does not use countdown counters at all, but only uses countup counters. This allows him to design only countup counters, instead of also designing countdown counters and up/down counters. Plus, counters that count up only require […]
February 28, 2009

Analyzing Countdown Timers

Countdown timers (and counters) are used in many applications to generate an interrupt if some event does not occur within a specified time. One example is a watchdog timer, that, if firmware does not poke it in time, it will generate an interrupt. Another use is to watch for when […]
January 31, 2009

Compatibility of New Blocks with Old Device Drivers

When engineers talk about compatibility, they often pose a binary question: Are two things compatible with each other or not? However, in my experience, the question of compatibility is not so cut-and-dried. For hardware-firmware integration, at least, compatibility is a matter of degree. Early in the development of a new […]