You obviously never have to deal with customers who want something different later on... Say for some reason you need custom characters or scrolling which you didn't implement because the first specification didn't need those.
In that case i tell the customer : you change the spec ? you cough up the dough to alter the system. Here is how many hours it will cost to develop and test and how many parts you are wasting int he process. Three things can happen
- they learn very quickly
- they go banckrupt because of their stupidity
- they go with another developer
it's all fine to me. Not my circus, not my monkeys.
simple no ?
that is another massive problem : customers that have no clue what they want , and even lesser a clue what they need to do what they want. i don't deal with idiots like that. plain and simple.
you come to me with a specification, i design according to your specification. you alter it during development or after : cough it up : here is the bill for the additional time and effort.
in case of that display controller it would not be a problem. i designed the transport to be such that you can do anything. byte 255 means : set command/data pin high ,254 means set it low. so you have access to the entire lcd display data and command set. two consecutive 255 characters escape the 255 and two consecutive 254 escape the 254. so you can do anything. there is not going to be an 'afterwards you realise' because you have full access.
things like this require talking to your customer , figuring out what he needs and helping him. if you are forward thinking you make sure not to create any bottlenecks.
the functions offloaded on little support cpu's are simple enough that they can be cast in stone without later having to 'update' the code.
very frequently that code does a task that would encumber the main processor too much in splitting its time. things like receiving and buffering a serial stream or a gpib stream. scanning a vfd display from a string.
in power supplies: let's say you have a programmable 4 channel power supply with fully isolated outputs. you will need a local controller per channel , talking over opto isolators to the earth referenced logic that has the gpib port.
that is how the 6624 family does it. local 68c705 cpu controlling the local adc and dacs ( the regulation loop is analog ) and listening and reporting to the host controller. the host drives the lcd, scans keypad and talks listens over gpib.
There are tons of examples of distributed systems using local coprocessors to do tasks and they work perfectly fine.
Take a telephone exchange. Every phone line has its local cpu (and DSP to process audio , do the a-law or mu law encoding and create the 32 bit transport frame) running a small program. every board serving 48 homes has a local cpu talking to the line SLIC's. I have developed such SLIC's including the DPS and processor code (8051 core)
Every rack has 15 or 16 boards and a rack controller. the rack controllers have auxiliary cpus monitoring line voltage, fan speed and other stuff (ATCA for example uses I2C interfaces to a distributed grid.
NONE of that firmware is updatable. it all sits in mask rom (also because of radiation hardening).
Have you ever known a telephone exchange crash because of a bug ? it doesn't happen ! And that is a system containing thousands of distributed cpu's and dps all running code. working perfectly fine. If you walk in to a central office ( ahuge building housing hundreds of 24 inch racks having thousands of boards , each having 48 or 96 DSP's to serve their lines.
There is billions of lines of code running , time scheduled, distributed. it does not crash ! Why ? because it is developed properly.
If the guys that did the moonlanding would have used code and hardware like it is designed now the saturn 5 would have turned into a ball of goo at ignition.