Having spent the last three weeks deep in programming language study, reclaiming some C++ and Assembly language skills, I am more than overdue a post here 🙂
These three weeks however have prepared me very well to start sharing some ideas and concepts, so I feel very good about some valuable time spent !!
I do feel the need however to press the rest button a little before I share any of the above.
I just want to redefine the reasons for selecting to use ARM CPU based technology for my current studies. It would have been very easy to just download a copy of Linux (eg.. Ubuntu 14.04, I have this anyway:) ) followed by all the needed resources such as (GCC and Python Programming environments) and then just get on with coding to help me revise and regain some skills, however this process would have missed out on a huge chunk of the complete study path I want to follow.
The main reason for anyone to select a development board computer to purchase and then learn to use for coding skills and hardware project development (Such as electronics projects) is that these boards are designed and developed within the open source hardware and software(Linux) community and as such they are fully documented by their designers and manufactures from the ground up…
Why is this important ?
Well this blog and the personal project’s it relates to are based on learning how to code a computer from the very lowest level.
For all computer systems to work they follow a path of interpreting the program instructions they are given, working sometimes from a very high level programming language such as Python – down to what is called Machine code instructions. These machine code instructions are in binary code ( 1’s or 0’s ) given in a byte ( 10101010 ) of 8 bits, it is important to note that no single part of a computer system can understand anything other than instructions given in this format.
What is “Machine code” ?
If you truly want to learn computer programming from the ground up, you need to know about every possible detail of how the system you are learning on can be programmed right from its very lowest level (Machine code), basically then how it works under the hood , as it were!.
Just as a quick example the following links will allow you to download the documentation for the Radxa Rock ARM Based development board system and below this is the documentation for the Banana Pi M2, A31s ARM CPU based system:
Both these development boards, at their machine code level understand a built in set of instructions that fall with in the ARM CPU instruction set as detailed in the following link
As a final point for this post , it is worth noting that a current generation of ARM CPU’s fall within a group of CPU’s called (SOC) “System on a chip” !
What is a “System on a chip” ?
This relates to the fact that the main system modules that are needed to create a fully functional computer system are fully contained within the ARM CPU itself , see the two Diagrams above. From the point of view of learning to program these systems is concerned this means that the documentation available usually relates to programming the system as a complete entity and this make life much much easier.
On many Intel and AMD 386 based systems this is not so much the case as the hardware can alter from one computer to another even with systems running the same core CPU.
So downloading Ubuntu Linux and attempting to code in Machine code or its next stop up Assembly language on a full systems hardware level is just not as simple !