
We at inpyjama are on a mission to lowering ’the barrier’ to learning Embedded Systems. With almost a decade of experience working on lower level software (and hardware) deployed on Embedded Systems, we have insights into what works, what doesn’t and how to deal with the complex systems.
There is a way to look at things. Once you know that - the complexity disappears! We intend to teach such insights so you can excel at Embedded Software Engineering.


You can learn Embedded Systems by following
Any Embedded System Development will have at least three of - CPU, C/Assembly, Operating Systems, FPGAs and Build Tools! All one has to do is - know a little bit of each of these topics to be useful on a team. The mastery of each of these topics will come naturally with time.

And remember, lower level code is commonly written in
These are the work horses of the Embedded Software Design. The boot code, hardware initialization and certain CPU specific features can only be controlled by writing functions in the assembly language. The higher level more portable system code is written primarily in the C language. This is again because C is very close to the hardware and developers can predict the assembly that will be generated by compiling the C code...

At the heart of every Embedded System is one or more
In modern day systems, CPUs are used to drive the decision and shift the system from one state to another. Take an example of Washing Machine. Monitoring what program the user has selected, driving different parts of the machine (drum, pump, heater etc) to execute the selected program, etc is done by one or many CPUs. Almost always, there will be a CPU that needs to be programmed as part of an Embedded systems based solution. Learning how CPUs work (the generic theory) is extremely helpful and allows one to reason deeply about how the system works...

And as the hardware becomes more complex, the management is abstracted using
How can we get one CPU to execute code for multiple tasks in a round robin fashion? The answer is - Using a Scheduler. Such a layer of software that manages tasks and then by extension the hardware is referred to as the Operating System.

To understand hardware better, have some experience programming
Field-Programmable Gate Arrays (FPGAs) play a unique role in embedded systems development by providing a flexible and reconfigurable platform for implementing custom digital logic. Imagine, what happens when hardware is being developed, what will the software engineers be doing? They will typically be using some sort of emulator or FPGAs to deploy the RTL (hardware design) on it and develop the software in parallel and make it ready by the time the Silicon (actual) chip arrives. Having an idea about how the hardware design flow works and trying/deploying circuits on FPGAs go a long way in terms of reasoning about how the CPUs and Peripherals might be working.

Become the reliable engineer by mastering
Build tools are the utilities help automate and convert the code to the binary the CPUs/FPGAs can understand. Not only this but tools/utilities also help us debug, automate, convert etc the solutions we develop. These tools typically involve - compiler toolchain, make, shell scripting, gdb etc and are an absolute 'must know' for an embedded software engineer.
We are recording study tracks that is specifically designed to pass you the insights and secret sauce we learnt over the past decade.

Learn ways to Visualize, Think, Reason, and Design using pointers like professionals do!
Get the Course!
'make' is at the base of almost all build systems and is a must know for Embedded Systems Engineers!
Get the Course!
The senior 'Embedded Systems' Ninjas know the black magic of how to control the placement of code and data in the memory!
Get the Course!
An introduction to the CPU that is found in almost all embedded systems solution. There are more of these on the planet than us humans...
Get it Now (Free!)
Introduction to the CPU that powers all the Mobile phones. and in the times making its way into the PCs and MACs.
Get it Now (Free!)
An introduction to writing device drivers for Linux! For those wanting to gets a clear idea of how Linux device drivers are to be written.
Get it Now (Free!)

"Hi team, I would like to thank you, the inPyjama team, for this. The concept which seemed to be somewhat difficult to grasp, I was able to learn a lot because of your simple and straight forward approach. I am really looking forward for more such contents from your end because I, for sure, will be attending each of them without fail. Once again Thankyou so much for this." - Vishnu Sankarankutty

"The cool thing about this course is that it teaches each and every concept by 'brain tattooing' a mental model, which makes understanding advanced concepts like a breeze. Thank you so much Piyush Itankar and inPyjama team for this outstanding course!" - Mayank Manohare
"This course gives you exactly what you need to know about pointers! And more importantly how to think about pointers this is really important, and every embedded engineer must know. Once again thanks a lot for this content creators. Expecting more courses from you in future." - Gnanesh Sureshchandrar
"As experienced C developer, I have learned interesting and efficiently approaches about using C pointers and also what happening behind the scene. To me to visualize the course for viewers was great idea. In the other hand , adding the subtitle to videos would be nice. Maybe in the future, thanks a lot." - SuleymanRubarKIZIL
"I enjoyed the entire course and the way concepts was explained(photographic diagram) was very understandable and good. Thankyou" - Vishnu
"I have never seen function pointers defined in such a clear and concise manner as you have, Piyush. Many thanks for it." - Vinay Shirol
"Awesome, within an hour, if an engineer learns the boot up process of arm - cortex-m, that is unbelievable, instructor is really apt at the matter. Thanks." - Vinod