I need help/ assistance understanding embedded systems engineering (both the software and hardware).
My goals are best summarised in these points.
I want to know how to manipulate hardware devices, not just arduino boards that do all the works for you (setting up the clock, serial comm) but any other microcontrollers, fpga or asic.
I want to learn the c programming language and how to use c for embedded systems. Not just using the boring arduino ide.
I want to know how to write libraries for implementing functions on different hardware devices .
Please i could use help, in form of videos, text, roadmap, lecture series, audio, books, Whatever i can consume
can we assume you understand programming in C/C++? what else did you study?
I'd say if you have the minimum software engineering background, pick a platform and dive in. Arduino makes it easy to get started and keep it motivating.
Everything is setup for you.
I don't hate the arduino board or ide, but i want to know exactly how to interact with the device. The arduino uno and ide does the heavy lifting already.
Of course it's possible to learn using other tools!
But you've come to the Arduino forum - so there's obviously going to be ab Arduino focus here!
How did you find that out?
But all IDEs cover the same basic stuff - so, if you understand the principles behind what you're doing, that knowledge will be transferrable to other tools.
But you say you are a beginner? You have to start somewhere!
For the AVR based Arduino, The Arduino IDE is just a text editor and a wrapper around ‘standard’ GNU tools ( GCC etc ), and the avrdude programmer.
You can use any text editor you prefer, (I use notepad ++), and compile and link then upload at your leisure. For other processors, you choose the tool chain you need.
As such, you’re not bound to the IDE, and can flex any way that takes your fancy.
They don't have to do any more "lifting" than you want. For instance, just because the Arduino environment allows you to set the state of a pin using a function that the environment provides it does not mean that you can't do it directly using the ports of the chip if you want to
How bare bones do you want to go ? You can even use the IDE to program in Assembly language if you want