Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Working with embedded systems

  1. Mar 30, 2017 #1

    I have a bachelor in mathematics with a minor in physics, and my plan for the future is to move on to computational science and robotics. However, before I can do that, I need to work a few years due to bad personal finance.

    In my city, the easiest route is programming. I already knew Python and I moved on to web development because I thought it would be relatively easy. I learned Javascript, jQuery, CSS and HTML. However, at this point, to make myself marketable, it seems like I am just memorizing tons of frameworks and their syntax (React, Node, Django etc.). It's a bit too much.

    I was told by a potential employer to learn C regardless of what I decide to do (because it will help me understand all the rest). I know a lot of embedded systems are written in C. How much memorization is needed to learn embedded systems? I dont really care how difficult the algorithms are; I just dont want to memorize tons of frameworks and packages. Also, embedded systems is relevant for what I want to do in the future.
  2. jcsd
  3. Mar 30, 2017 #2


    Staff: Mentor

    For embedded systems, I would think you should study algorithms and data structures in C as everything done in C will use those ideas somewhere in the code (more likely everywhere in the code).

    Start writing tool applications ala the theme of the Kernighan & Ritchie C Programming book and do it on Linux getting familiar with all the features of Linux. Many embedded systems today use Linux or Windows CE as a base although there are also many more compact single program custom systems ala Arduino applications that do one task fast and really well.

    Read this wikipedia article to get an idea of the kinds systems out there:


    Arduino might be a good first step to start playing in this environment as it would introduce you to C and how you would debug a problem in an embedded system.
    Last edited: Mar 30, 2017
  4. Apr 5, 2017 #3
    I wrote this post three times before giving up and writing it the way I want to.

    Many people who learn to program with scripting languages lack a specific set of knowledge tools that learning an "actual" (please don't kill me, scripting gurus) programming language will provide. The result is often an excellent scripting person who has difficulty troubleshooting issues with scripts, because they don't recognize what actions "under the hood" are occurring when the script runs, and they don't necessarily recognize other ways to handle the same task that aren't the "normal" way of handling that task in that scripting language.

    Please don't take this as an affront to your clearly impressive skill set - I wish I had the wherewithal to have a bachelors in Mathematics and a minor in Physics. But if someone suggested you learn C, I suspect that was after they asked you a set of follow-up questions about a scripting issue that you couldn't provide any possible routes to resolve.
  5. Apr 5, 2017 #4


    Staff: Mentor

    What is your experience in programming?

    Your view of scripting folks is due to either lack of experience with scripting or a general naivety on your part. Programmers aren't either or here. You use scripting to glue things together and to get things done quickly so you can get on with bigger issues. Often scripts are essential in setting up the programming environment for your application (esp java based applications) and for making it easier to invoke. Other times scripts are used to automate a seldom invoked process of reorganizing your environment, deleting files... and many other mundane tasks.

    If you're thinking of system admins or database admins, this may be true as many of their tasks require knowledge of arcane system commands and their work is very much one off jobs or very mundane periodic system cleanup, archival work...

    In any event, I can see why you were hesitant to post but perhaps your inner voice was telling you not to.
  6. Apr 5, 2017 #5
    I try not to memorize a language. I have coded in C then C++ and focused on creative ways to solve problems . After a while Software developed of applications and embedded systems became an art. I used my imagination to guide me with the development of test plans and the design of the system. I have always felt computer languages is learn the concepts kind of thing
  7. Apr 5, 2017 #6
    Actually, my hesitation was because the OP made it a point to list the languages he has learned and his entry into website development. But website development skills don't directly correlate to embedded system programming, and not one of the languages he mentioned is a high level programming language. His actual question was "How much memorization is needed to learn embedded systems". This implies a lack of understanding about the scope or skills required to program embedded systems. I suspect strongly that the potential employer who told him to learn C saw he did not have the skill set he required (right now) and was trying to be helpful.

    My best advice to the OP - learn C. It will help you in any programming you do in the future and will help you directly with embedded system programming regardless of what hardware you are programming for, and for your goal of getting into computational science and robotics in the future.
  8. May 16, 2017 #7
    The potential employer does not work with embedded systems. He does not work with any hardware at all. He told me I should learn C because that will give me a deeper understanding of the languages I listed above since they are all inspired by C to some extent.

    So, if I am gonna learn C anyhow, I want to practice with embedded systems and be a bit better prepared for the subject (which I know is an option in the masters program). However, I don't want to do that if I have to memorize a lot of syntax. I dont mind memorizing the syntax needed to learn C, but I dont want to use more time memorizing frameworks like I did for web development (React, JQuery, Node etc).

    I like mathematics and physics because I dont have to memorize a lot; It's mostly deduction. Web development, on the other hand, has almost entirely been about memorizing the syntax of several frameworks. I asked if learning embedded systems is going to be the same. Am I embarking on a path which will involve learning 5+ frameworks and languages just to make one product? (like how, to make a website, I probably have to know HTML, CSS, Javascript alongside frameworks like Bootstrap, JQuery, Node and others)
  9. May 16, 2017 #8
    You don't have to know everything, in a company there are different programmers for different tasks. I'd say focus on what you like the most, and learn the rest if you need.
    To learn C, which it's gonna be easier than what you've did so far, you should maybe read a book or other resource initially, and when you're more comfortable, do a project on something that interests you and learn as you go. At least, that's how it works better for me - if I don't have an exam to study for, I'm not going to do hard studying on things that don't interest me
  10. May 18, 2017 #9
    Why cant I just get an answer to the question I asked? Or, if that is not possible, no answer? Why are people making assumptions about my life? I did not ask for life advice, and none of you know me.
  11. May 18, 2017 #10
    Nobody assumed anything about your life buddy. You should try those things for yourself, it depends on what you want to do.
  12. May 18, 2017 #11
    Well, you made the assumption that I am trying to learn everything a company will need. Moreover, considering you answered a question I never asked, I guess you must've made a few implicit assumptions.

    rkolter made a few assumptions regarding the job I am applying for and more. Again, I got a whole bunch of answers I never asked for.

    The first reply is the only answer I got although it was not completely what I was looking for. Then again, if nobody here works with embedded systems, this may be the wrong forum to ask this question.

    So, essentially, I'll entirely rephrase this question later today to try to get the answer I was actually looking for.
  13. May 18, 2017 #12
    If you want to start to play with some embedded system. A good start would be Arduino uno board. open source and open hardware https://www.arduino.cc/
    a good site for parts and learning is adafruit.com
  14. Jul 18, 2017 #13
    Not to be critical here, but when it comes to programming, learning concepts of language in conjunction with the syntax is best. Just because you have the syntax memorized that does not automatically mean you can write code skillfully. The syntax knowledge comes with the practice. For example if you memorize what casting a variable is, that does not necessarily help you visualize and understand what effect that has on a casted variable. Same thing comes up with pointer variables and understanding single and double indirection. Pointers can be hard for some people to understand. Come up with a software project and define the requirements and a unit test plan to test the requirements. Being a former C/C++ programmer for desktop applications and development of hardware using Assembly Language on the 8051, I have found that more is learned by failure and success and having an adequate unit test plan that includes regression testing. Further, practicing writing good code and treating your coding as a craft will allow your projects to reliable. It also helps to learn from bad code others have developed in this craft. Hope this helps
  15. Aug 6, 2017 #14
    Again, I get an answer for a question I did not ask.The idea that I am trying to memorize programming languages without understanding them has already been implied above.

    Actually, I wish you'd be critical. Constructive criticism would've been a much better answer. However, you are not answering the question I asked.

    A certain level of memorization is needed in every field. My issue is that programming sometimes feels too much. So, lets try rephrasing my original post:

    I have been playing around with web development, and that was full of frameworks that I needed to memorize. Learning Javascript, HTML and CSS only took a few days. Of course, proficiency comes much later, and that is assuming I continue down that road for a few years. That is a path I would've gladly taken if it hadn't been for every framework I have to know to be employable; At a bare minimum, I have to know jQuery, Node and Angular/React.

    However, my background is in mathematics and physics. Working with hardware seems like something that would be more enjoyable to me. My question was how much is needed to work in this field. I already know you have to know some programming language like C and some hardware description language like VHDL. What else?

    I asked how much learning programming for embedded systems would correlate with my experience in trying to learn web development. In terms of sheer volume, how much will I have to learn?
  16. Aug 6, 2017 #15


    User Avatar
    Homework Helper

    Languages like VHDL are used to design hardware chips.

    Embedded programming covers a wide range of programming. Most embedded systems are multi-threaded / multi-processor, with some kernels based on a variation of Linux, while others use a smaller kernel, often called RTOS (real time operating system). For the Linux systems, you could be writing device drivers for the components in the hardware, or something equivalent to an application that runs on the embedded system. Consider the case of a hard drive. There's an algorithm used for seeking and following a track (servo). There is code to calibrate and setup the hardware used to read and write data (channel). There's code to communicate with the host interface (such as SATA). There's the code that does all the buffering, reading, and writing of data, although this is usually automated in the hardware once it's setup (for performance). There's error correction code, but that is sometimes supplied by outside sources that make specific components or VHDL fragments to handle the error correction (since this is a very specialized field). In the case of smart phones, most of the programming is related to phone applications, and it's probably a small percentage of programmers that work on the low level stuff like the phones kernel, or the phones equivalent of device drivers. Almost all of this, except for the phone apps, is usually written in C.
    Last edited: Aug 6, 2017
  17. Aug 6, 2017 #16
    When I was in college, I used assembly language to write copy protection software. That software controlled a 4 phase stepper motor in a hard drive. I would position the read/write head to read and write encrypted on the disk sometimes using a 1/4, 1/2, or 3/4 track recording scheme. Each track was offset by 1 track. I.e. track 1/4, 1-1/4, 2-1/4, etc due to risk of overwriting data just written. Data validation was done through a CRC checksum for each track read/write.
  18. Aug 6, 2017 #17
    You have not mentioned electronics specifically. Even if you will not be working directly (hands on) with the actual hardware itself, it would still be very beneficial for you to have a good understanding of active and passive electronic components and how they work. If you do not have this knowledge or experience then I would say that the learning curve would be a little greater than what you are familiar with in web development. This is coming from someone who has done a little of both.

    If you do have the electronics background then it's mostly a matter of learning the chip architecture, instruction set, and programming language. As far as the "sheer volume" question goes, well that's difficult to answer. As someone has already mentioned, this is a very broad field. Just as in web development, to be successful at it does not require you to know it all. And how much you need to know is variable.

    I'm not familiar with having to memorize things. So that you know where I'm coming from, most of my past work in web development has been on a freelance basis. I learn what I need to learn to get the job done. If I can't remember something then I just look it up. Most of my work with microcontrollers has been as a hobby. But my acquired skills in this area has at times bled over into my work environment. Most of my past work experience has been with PLCs (programmable logic controllers) and motion controller programming used in industrial automation.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted