I think you may have just touched on one of the key issues that is causing you problems.I have read all those projects on this site http://nand2tetris.org/course.php There have been explained in very simple way to understand the basic of computer architecture but there is no information for c language. I am not become expert but I am trying my best
I think you are approaching all of the various topics you have been asking about as disjoint and unconnected things. That structured programming is completely separate and unrelated to object-oriented programming. That embedded system programming is completely separate and unrelated to hosted (non-embedded) programming. That C programming is unrelated to understanding how a typical computer architecture works.
But all of these are intimately related -- most have more in common than they have different. Programming is not about a particular language, it is breaking down a big problem and solving the smaller problems using clear and well-defined steps that can then be used to build up solutions to the overall problem. If you learn how to write programs in one language without learning how to solve problems separate from the language, then all you will likely have learned is a bunch of disjointed syntax rules and your abilities to solve problems using programs even in that language will never develop very far. But if you instead focus on understanding how to identify the steps that solve problems completely separate from any particular language, then you will find that you can solve problems using many languages with relatively little effort.
When I was in high school I took a Computer Math course, which was really a course in computer programming using BASIC. What I didn't realize at the time was that the way the teacher taught it he was really teaching programmatic problem solving and we just happened to be using the BASIC language to implement those solutions. I didn't know this at the time; I thought I had just learned how to program in BASIC. When I started college we had to take two semesters of Fortran programming. After the first two classes I realized that all I was doing was solving the problem "in BASIC" and then translating my solution to Fortran using a cheat sheet I threw together that showed me what the syntax was for each of the handful of basic control structures. So I took the challenge exam to test out of the course, not expecting to do very well on it, and was one of just a few that passed it, even though I had never heard of Fortran just a couple weeks prior. It wasn't until several weeks later when I was back visiting my high school and told my computer math teacher about that that he explained to me that what he had really been trying to teach was algorithmic thinking and not how to program in a particular language. He said that most people have a very hard time seeing the difference and just focus on the syntax rules of the language they are learning, but that I had managed to grasp that difference and focus on the problem solving aspect instead.
That's what you need to try to focus on. Figure out how YOU would solve the problem by hand without a computer at all and how you would break it down into simple, easy to explain steps so that someone else, without even knowing what the problem is that is being solved, could follow your steps and come up with the correct solution. Only then consider how you would implement each of those steps using a program and a certain programming language.
As an example, let's say that I wanted to find the square root of a number to three decimal places using nothing except addition, subtraction, multiplication, and division. How might I do it?
I could come up with an algorithm that used just those operations and could lay them out in sufficient detail such that if I gave them to you and gave you a number, say 12345, you could work through the steps I had written out and come up with the number 111.108 even if you had not idea that what I was looking for was the square root of the number I gave you. Once I've developed the algorithm in that fashion, then is when I should look at it and see how to implement it in a particular language -- and it wouldn't really matter what language it was. If it was a language I was somewhat familiar with, it would probably be the matter of a few minutes to perhaps an hour to implement it. If it was a language that I was completely new to, it might take a few hours or even a day or so to become sufficiently knowledgeable of the language to implement that algorithm.
But here's a key point -- I would almost certainly learn a lot more about how to program in that new language going through that than I would in several weeks if I were to just decide that I wanted to learn how to program in that language by reading a book about it. The reason is that I would have focus. I would be looking at my algorithm and asking very specific questions such as how do I get a number from the user? Or how do I multiply two numbers together and store the result back in the same variable? Or how do I determine that two numbers agree to the third decimal place? Or how do I output a non-integer value? Or how do I execute a set of instructions multiple times? Or how do I choose between executing one instruction instead of another? Each of these are tiny little problems that can be researched and solved in a matter of minutes in most cases.
You need to bring focus to your study of programming.