In embedded systems the term firmware is very common and describes the software that runs close to the hardware usually with limited resources and almost always in a deterministic execution time frame. Don’t be fooled however; Firmware can be many thousands of code lines and be a complete application.
And how you debug such a piece of software? It is often stated that debugging is an art. Imagine a motor control system where you need to step code (ie. stop executing the program) while the motor is running. It would be really hard to trace a problem in this case. So experts in the field use multiple approaches often not found in usual software development projects to trace intermittent errors or problems that relate with the unpredictable environment under real-time.
Software/firmware quality is something which cannot be easily assessed by non-experts. There are a few guidelines though, which give an indication of the written code quality.
- How many bugs are revealed during testing?
- How difficult are these faults to be pinpointed?
- How easy is to change operation or add features?
- How fast can you port to other architectures?
The first rule of debugging in embedded systems is to avoid creating the bugs in the first place. A good architectural design and coding practice are required to achieve a low bug count and reduce debug time. On a medium scale of an embedded project expect a significant amount of time before you see any actual line of code. This time goes for architectural decisions and tests that will pay-off later with faster coding and a quality product.
From almost 18 years of embedded firmware experience we have mastered these techniques. Using Test Driven Development methods, layered architectures, timing evaluations, best coding practices and system testing we achieve our goals on time. Furthermore we leave support for debugging in cases these are needed during later phases of the product’s lifecycle.
We use C and Assembly, creating code that can be ported to different microcontroller architectures fast and support development or product with Python and GUI scripting. Our debug strategies include combination of debuggers, oscilloscopes and logic analyzers to effectively pin-point difficult to resolve issues if ever arise.
Hardware design starts from the requirements document. Then a detailed specification is created which drives the schematic drawing phase. An often neglected part is the selection of parts to accomplish an electronic design. Selecting parts with high availability and less lead delivery times is an important task. Another aspect is selecting the components packages as these affects the board (PCB) area and the assembly process. A denser PCB may require higher manufacturing class and thus increase production costs. A good understanding of the PCBA production phases is required to have an efficient design that can be produced smoothly in quantities without disruptions.
Producing is not the end of the line though. Testing is another major factor which should be considered. There are many test strategies employed depending on technology used, production quantities and yield.
Understanding the above issues explains why there are many failures in kick-start type projects when it comes to hardware. Take the wrong decisions and you may end up well out of your estimated cost and time budget.
Our experience in hardware offers many years of expertise in embedded systems design starting from specifications down to product support. Our portfolio of work includes dc motors, sensing, microcontrollers and FPGAs.
Creativity and innovation may be important when designing a new product. However, the recipe for success requires more skills and competencies; it is common to compromise in an attempt to balance effectively features and costs. Also, a good understanding of the end user, development effort and product design stages are necessary to complete the design cycle and deliver the final product.
- I have an idea but I do not have the technical expertise to make it happen?
- What kind or resources will I need?
- How do I partition my product in hardware and software?
- Are the electronics designed efficiently to minimize production costs?
- Is the cost factor the top priority or there are other parameters like features or quality of product?
- What is the required safety or electromagnetic compatibility certifications?
These are some of the questions which could make you uncomfortable or even make you abandon a great idea. In other cases you may start off on a wrong path and you could find yourself in the middle of a difficult-to-resolve situation. You may lose your time-to-market advantage. In any case we are here to help and present you with options, or offer new perspectives so that you can make informed decisions about your idea or product, while helping you with the implementation.
Our expertise spans through multiple domains of electronic design, firmware development, automation tools, mechanical integration, instrumentation and testing to cover all aspects of a product development.