We have been quite busy here at ImageCraft. The V8 USB dongle is in production – we have the electronic parts made and we are waiting for the manufacturer to deliver the custom plastic casings. They should be released in mid to late June. We are now running a pre-production sale: you can purchase the dongle for $49.99, instead of $60 when it is released.
In the usability area, we have just added some MISRA C static checks to our V8 AVR compiler. MISRA (Motor Industry Software Reliability Association) C is a set of guidelines aimed to improve a program’s safety and portability in the automotive industry. With the ever-rising popularity of embedded devices, MISRA C guidelines are now being adopted by many organizations in the embedded space outside of the auto industry. (Think MISRA C as a superset of Lint, if you are familiar with that tool.)
We are currently only implementing a subset of the guidelines; more will be added in subsequent releases. More importantly, while a goal of MISRA C is to increase portability, we have identified a number of MISRA C guidelines that are never going to be an issue in any 2’s-complement machine, and rather than overloading the user with even more warning messages, some of those guidelines will not be implemented. It fits into our philosophy of increased usability, while not being so pedantic that it goes against being pragmatic. There are also checks that are difficult to implement from a technological standpoint; mainly ones that involve whole-program behavior checking or dynamic checks. We will consider those as resources permit.
It is typical to encounter hundreds and sometimes even thousands of MISRA C warnings when you first run your project through it. However, sometimes the pain of sloughing through the messages is worthwhile, as one of our users writes:
"Thanks to these MISRA warnings, I found a bug that has been going through unnoticed for a few years in a few projects."
Also, to further our emphasis on getting our users to produce more robust code, we have just released in beta the ability to perform cross module checking. This detects if your functions or data declarations are not consistently matched across all modules. The function checking is of lesser importance, as most programmers are now using function prototypes, and our compilers warn about functions that do not have proper prototypes. The more useful aspect of cross module type checking is to detect the dangers of mismatched data declarations, which can be difficult to detect by hand; e.g.: in one module, you may have “int global_var;” whereas in another module, you may have “extern double global_var;”.
We will continue to improve our products to make your C programming job easier and get correct results faster. As always, I appreciate any comments or suggestions you may have. Please feel free to contact us.