We hardly think of our industry's performance in terms of behavior like the Three Stooges or Laurel and Hardy. Yet, it wouldn't be much of a stretch to conjure up such images if we were to tell a visitor from another planet that we in the embedded-systems market finish over 60% of our projects behind schedule, and 30% of our designs take 50% longer than planned.
How else can one explain a landscape where software and hardware engineers point accusingly at each other, or engineers spend weeks or months fine tuning a "finished" project to enable it to reach even a minimally acceptable level of performance? In what other way would one explain why multimillion dollar programs are cancelled and will never see a production line because they "just wouldn't work"? Even the worst performing airline's flights leave on schedule 75% of the time. We make the airline industry look good!
We love to invent things, even if they were already invented. This is because we always think that we can do a better job than the other guy. Unfortunately, we spend a lot of time and money inventing things that already exist.
Everybody talks about time-to-market. One way to speed time-to-market is to stop inventing the parts of a product that are already available. Over 99% of the 32-bit-plus embedded microprocessors sold today find their way onto custom-designed CPU cards. Most add virtually no proprietary value to the end product. In many situations, an off-the-shelf CPU board would work just fine.
But anybody can design a CPU board today, right? Get a reference design from the processor chip vendor and you're off and running. It's the software, stupid. Every one of those custom CPU designs needs an operating-system (OS) port or adaptation. Now if you just build that reference design without making changes, you can, of course, use the OS that comes with the reference design. But if it's like most reference designs, it includes every possible feature, bell, and whistle available with the processor chip, whether you want them or not.
So you tweak it to make it fit your specific needs. After all, that's why you're doing a custom CPU board design in the first place. Presto, the OS that comes with the reference design no longer works.
It's time to bring up your own, custom OS port. Bringing up an OS on new CPU hardware isn't for the faint of heart. For one thing, engineering schools seem to have stopped teaching assembly language programming some years ago. (Assembly language—isn't that something you used in the old days—like FORTRAN?) You don't have to write drivers in assembly language, but a bit of experience in this space really helps. In today's world, Java and C++ programmers abound. Ask a recent engineering graduate to write a device driver or processor initialization code and prepare for a long nap. OS and board vendor Web sites contain long lists of boards for which this stuff already exists. Your custom CPU board isn't among them.
By the way, have you ever noticed that the great debug tools provided by OS vendors only work after the OS is running and after the hardware works? Well, duh, that's the easy part. The hard part is getting the OS to run on new hardware in the first place. When it doesn't work, is the hardware or the software responsible? Get those pointing fingers ready, team.
Unfortunately, you have to use different tools for raw hardware debug, and those tools don't know much about OS. What makes this task even more fun is when you find a suspected hardware bug after the OS is running. Well, to check it out, you just have to switch back to the debug tools you were using before the OS came up. But now, the bug no longer shows up because the OS uses the hardware differently than your test program. Isn't this fun? When did you say that you wanted this done?
So, with an off-the-shelf CPU board you just get an OS that works! What are your engineers going to do for job enrichment? They could actually invent something that contributes to the state-of-the-art—your art in this case, in your application space.
A senior design engineering manager of a Fortune 500 company recently explained that if he told his team they couldn't design CPU boards anymore, they would all quit. I used to believe that time-to-market pressures would weed out via natural selection those old-school engineers who adhere to the ghastly Not-Invented-Here factor and insist on doing it all themselves. Unfortunately, we've all been de-selected. There are no survivors.
It's time to do better.