The main message of this article is that the idea of combining software, cheap-enough computing and every-day object is NOT yet another stupid marketing hype, but a practical trend that probably increases demand for firmware development services. People at Intel have implemented a car head-light tha consists of a projector and a camera and the headlight tracks individual rain drops that are near the light and avoids lighting those by always sending light around the rain drops and therefore making the "smart" car head-light far more effective, user-friendly, than a non-smart headlight is. If the computers are, in ideal case, very cheap, and the battery_life/power_saving requirements are high, then there will always exis the technical demand for fast, efficient, software that is written in some system programming language like C and C++. The slower the CPU-clock frequency, the less power the CPU consumes. The less operations per second are available, the more efficiently those operations must be used.
A noteworthy design pattern is to use a MCU for running a simulation of a more capable CPU that runs some software that has been compiled for the more capable CPU. That has been demonstrated(archive) by running Linux on a CPU that was a simulation that run on 8bit microcontroller. For custom IC-s, may be also for simulation, the Zylin ZPU might be an interesting project.
When designing custom IC-s, may be CPU-s, then one of the design pattern is to eliminate the need for hardware implemented checks by having a compiler guarantee that the checks would never fail. The less hardware is required, the smaller the energy consumption and the less logic gates is needed. I learned that from the Андрей Николаевич Терехов, when working on an Estonian article titled "Kallutatud kokkuvõte NSV-Liidu infotehnoloogia arengu ajaloost, episood 1" (the title in English: "Biased Summary of the Information Technology Development History of the Soviet Union, Episode 1", archive) According to his own words, he is one of the main people, who designed the computer for Soviet nuclear missiles that are still in use in moder Russia in 2015. He studied Computer Sciense at the Tallinn University of Technology and supposedly still meets with the scientists, former colleagues, in Tallinn. He is also the person, who told me abut the Niklaus Wirth project. A summary of the Андрей Николаевич Терехов computer architecture development story is that the "industrial" Soviet military computer that was available to his university department required unacceptable/unaffodable amont of manual maintenance, because if the air humidity was too high, water would condense at the outer side of the necessary water-cooling system and the condensed water would short-circuit the computer, but if the air humidity was too low, the high-voltage circuits of the computer would have discharges. So, hes only option was to build his own version for his university department. The first idea was to eliminate the water-cooling system, but to eliminate the water-cooling system, electrical power consumption had to be reduced, but to reduce electrical power consumption, the number of logic gates had to be reduced and the number of logic gates can be reduced by optimizing the computer architecture by eliminating all parts of the hardware that can be made unnecessary by a compiler. The result was that the memory access checks that cause the "segfaults" at C programs, could be eliminated by having the Ada compiler formally guarantee that the seg-fault situation never occurs.
According to Андрей Николаевич Терехов one of the results of his work was that the reduction of clock cycles that are needed for executing a single CPU instaction allowed the computer to execute more CPU instructions at the lower CPU clock frequency than a western counterpart was able to execute. The motivation for that optimization was to counter the superior western material science achievements.
A third, may be useful, design pattern is the use of stack-machines and
Forth. As of 2015_09 it is possible to buy multi-core stack-machine CPU-s. A thing to note about stack machines is that 2 stacks/magazines can form a Random Access Memory, if they are used as 2 poles at the Towers of Hanoi task.
A third design pattern inspiration is the idea that CPU-s that have a finite address space and that they operate on an infinitely large memory, should use relative addressing, like the turing machines do. That might make sense with small, 8bit, microcontrollers that operate on
Mebibytes of memory.
To be continued/modified at some later time.
Thank You for reading this article. :-)