Jan Jacobs, SOMmaps, Kessel, The Netherlands
During my entire working life at printer manufacturer Oce, I have been involved in writing dedicated code (firmware) for rather deviating hardware processing architectures. For this activity I learned to appreciate APL (reported on this at APL87) and later J as development environment/language and I want to share this with the J-community.
The problems associated with firmware development are mainly caused by long and elaborate development cycles:
- poor understanding of hardware
- poor software developent environment (as supplied by processor manufacturer)
- hodgepot of third party software development tooling (Model Based Design/UML, Matlab, Simulink)
I have succesfully used J as a specification language throughout the whole integral firmware development process: starting from the first familiarisation of problem as well as the intended hardware architecture till code generation and maintenance. J is useful for this activity because it:
is interactive and offers executability (direct feedback) during the whole development process,
is expressive enough to allow for a single language supporting multiple roles (specification easily permits extensions to multicore architectures)
allows for incremental design, enabling further development in small steps.
The methodology of firmware development is covered in my PhD thesis. Although the work has been conducted in J, my supervisor advised me to use a better known functional language, Haskell, to illustrate the various examples. I think if one has the objective to interest non-J users then Haskell might attract more readers. In this way we could increase the attention on J. Below I have included some typical examples during a few phases in developing firmware.
I have included a few modelling examples, composed as a 3 column table. The examples are taken from various phases and are organised in rows. The columns contain subsequently a mathematical or textual description, the Haskell version, and the J version. I have attached 2 tables (incomplete and not included in the thesis) from which we could select the examples: ,