Low level Arm Processor Development
Starting to get to grips with coding on any computer system is not a simple task. At the very start you need to select an appropriate coding language and then choose the best possible learning method and path to follow.
Most likely the most common way is to select the middle ground, one that is not too advance in its low level of closeness to the actual hardware of the computer, using machine code instructions and also one that is not to advanced in the world of object orientated methods.
Machine code programming along with Assembly language programming is not only a very difficult and time consuming way to learn to program, it is also not a requirement of any kind and not needed in order to develop projects on single board computers like the Raspberry pi.
However the process of learning just how your computer system truly works under the hood is great fun and will give you a greater sense of overall control, when you are doing your best to create well written and fully debugged code.
Following on from my last post on single board computer electronics project code development, at the end of the post I said I would move forward by following a path as follows :
1.. Looking at any available GPIO information from the Broadcom BCM2835-ARM-Peripherals manual and Radxa Rock Rockchip RK3188 CPU Datasheet
2.. A Look at how the Raspberry PI operating systems are configured to control the GPIO port, its pins and its operating system interfaces.
3.. Construct a full review in a series of posts, of all available GPIO enabled programming languages starting with Python and followed by languages such as C++ and Java.
Well firstly you can down load these datasheets and technical PDF’s at these links.
Raspberry Pi Broadcom BCM 2835/ Radxa Rock Rockchip RK3188 Datasheets
Firstly You need to understand that these manuals in the form of datasheets, are just like reading the Linux MAN pages, they are coldly technical and contain little in the way of help in actually developing applications that make use of their details.
Always download these manuals or the Datasheet/Manual that relates to your own system and its CPU and Devices but remember they are for reference only.
In order to start to make use of the details contained within, you will need to gain some help with Machine code or Assembly language coding itself and then start to bring in to this preliminary knowledge the technical details that relate to your own system.
Here are two links that will help you make a start, I have followed this path !
1.. ARM assembler in Raspberry Pi, this is a great starting point !!!
3.. Amazon Books
IN ALL HONESTY !!!,
This path is a rocky and hard one and you will fall off it into deep water many times !, one of the most noticeable potholes relates to the fact that for systems such as the Rasberry PI, most of the available information only relates to the model B boards and not the newer (B+ 2b and new 3b), many web based locations have not updated since the model B , yet they do not say clearly so !! , before you order a book or read a web page make sure it relates to your own model or check you are willing to learn from older models and then do the needed work to move forward !
e.g Baking Pi – Operating Systems Development , Here they do at least say that their operating system project has not been updated !!
There could be many reasons for this being the case, one possibly being the work and man hours that is needed to port very detailed low-level code from one version of the Raspberry pi to another (or any platform!). In this simple fact lies the basic problem with assembly language, you need to re-work your code for each system and take into account each of the technical changes within CPU versions.
The Answer and trick here is to wait and hold on, in time much more details about a newer system do get released to the general public or finds its way onto forums and blogs, this is a learning process ok and this can also include the developers. The other trick once you do get your much needed details is to make sure you check if they are correct and test them to work, then make and keep some good notes.
It is also this problem that correctly moves coders up the scale in their selection of development methods, they select a development path that makes use of higher level languages such as (C++, Java or Python) as examples. One great reason for doing so is that it is left to the developers of the C++ language for example, to include all the needed details with in the source compiler for the hardware it is being aimed at.
Hardware developers also release C++ libraries or PYTHON modules that can be incorporated into your source code.
To make use of a High level language thus removes you from needing to know all the low-level details, also meaning that very few people are producing the low level code used in higher level language hardware related functions, thus reducing the number of possible errors and bugs in your finished applications. This is good Right !!!
Despite all this though, it is still great fun to learn what your CPU is actually doing and like I already said very enabling if you can get to grips with all the needed details.
For the moment in my posts, I will move along my path as I detailed earlier , I will however return to Assembly language development as I personally enjoy it and feel its a great learning experience !