Going Down to Machine Level Instructions

Vaageesh YavanaVaageesh Yavana
4 min read

Table of contents

After learning some good things in C programming & gaining some experience in Application layer in OSI model, I thought of learning more in low level layers as well. C programming itself won't help you much in changing verticals like

  • Automobile

  • SEMICON-semiconductors

  • Aerospace

  • Defense

  • Automotive-Railways

  • Network Devices - Switches/Routers/Data cards

  • Communications - Satellite/Mobile/wireless 5G

We need specific domain knowledge and after gaining domain knowledge, there are lot of Embedded hardware products in market and industry in each vertical.
For example, let say consider Networking domain.
For each layer in OSI layer, different devices are used
Layer 2 devices(Data link layer). Layer 3 devices(Network layer) like Networking switches, routers etc.,

For automobile, ECU's which work together using CAN/I2C protocol.

So I am confused where to start and which way to choose. I won't say I couldn't get good resources online. Of course google is throwing me tons of materials, notes, blogs, tutorial videos.
But it's like you went to a clothing shop. You are searching for party wear dress and matching footwear for it. The shop do have lot of Items but not organized in a way. You ask the sales guy to show good dress that matches your interest, skin -tone, body mass etc., Instead of guiding you, he just throw of bundle of shirts and pants on your face and left the choosing part again to you. How frustrating it would be for a guy who is already in deep confusion not to know choose which one ??

That's what I have felt when google gave the results for low level coding in Embedded systems.
I know that I am not fresher anymore and being experienced guy, I should self learn things on my own.
But still, If I don't know where to start and which path is correct path to learn things in rightful way, I could learn things. But I would lost most of the time in just searching and connecting doubts.

Still I don't have a choice, so I started learning things.
Again, what should I choose first ? I started looking at Job description of different openings for roles like below in linkedin.

  • Embedded Developer/Engineer

  • Embedded software engineer

  • Firmware Developer/Engineer

  • Platform Developer

  • Linux device driver developer

  • BSP Engineer

From what I understood and after careful observation of hundreds of job posts, I shortlisted some main keywords as below

  • Device driver Programming

  • Devices like Logic Analyser, Oscilloscope

  • Electronic Design tools like PCB

  • Bare Metal Programming

  • Linux Kernel programming

  • Assembly language

  • Linux

    • Embedded Linux

    • RTOS (Zephyr, FreeRTOS, Vxworks)

  • Board bring up

    • Bootloader

    • Filesystems(FAT16, EXT4)

  • Microcontroller

    • ARM cortex M series

    • ARM cortex A7/8 series

    • Microchip(PIC), Texas Instruments, NXP controllers

  • Audio/Video Algorithms using DSP controllers

  • Embedded security

    • Hardware Security

    • Cryptography

As I told, I was getting too much info and couldn't really decide where to start now.
Also, I can see no two companies are using exacts tools/technologies/stack etc.,
The experience I got from my previous companies is not enough for atleast my profile getting shortlisted to Industry pioneers like Qualcomm, Texas, Sony, NXP, Microchip, NVIDIA etc.,

I know I can't learn above mentioned things in short period, it will take a lot of time. But I can start from some point and continue learning things if I know the destination.
My situation is like,

I know swimming and I have lot of stamina to swim.
But I am swimming in ocean, not knowing which is east and where should I reach.

I am so much interested in learning things when it comes to Electronics hardware, but totally confused with lot on my plate.

So I decided to put everything on paper(When I say paper, I mean some online platform) and start connecting dots.

My path would be like
Device Driver Programming -> Kernel Programming -> CPU level instructions -> Booting Sequence -> Board bring up -> Peripheral Interfacing -> Embedded Protocols -> Firmware Developing -> Multi Threading/RTOS

Following above path for MicroController would be completely MicroProcessor
Again with OS is completely different from Bare metal.

I am not sure If my path is correct or not, but atleast I should start.

0
Subscribe to my newsletter

Read articles from Vaageesh Yavana directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Vaageesh Yavana
Vaageesh Yavana