I am thinking to take the next semester a course called "Digital systems architecture", and I know that we need to program micro-controllers with several programming languages such as C, C++, verilog, and VHDL. I want to be prepared to take that course, but I need to know if I need to study deeper these languages.

At this moment, I have taken one course in basic Java dealing with basic methods, data types, loop structures, vectors, matrices, and GUI programing. Must I study deeper Java and then go with C, and C++? Besides, I know basic verilog and VHDL.

  • 4
    Why don't you ask the professor or someone who teaches the course at your college? It's quite likely that your school will use different tools than my school, so your best bet is to ask the school. Good luck! With that said, I upvoted this question because I'm interested to hear if Java can be used for this sort of thing. I doubt it, but it's not my area of expertise. – jmort253 Sep 13 '12 at 5:35
  • 2
    C for microcontrolelrs, C++ for larger microcontrolelrs (32 bit), Java for Android. I have heared ADA is cool for small uCs, but that no one uses it ... – Vorac Sep 13 '12 at 8:31
  • 1
    What's the connection between HDLs and microcontrollers? Hardware design is a huge area, I can't see how it can be mixed with a basic low-level programming course. – SK-logic Sep 13 '12 at 11:07
  • 1
    ADA for uCs, @Vorac? Finding an ADA compiler for anything other than a very widely used high-end processors (and I'm excluding most microcontrollers) is tricky, and expensive. But agree on C/C++ and probably Java... – Andrew Oct 4 '12 at 8:36
  • 1
    @SK-logic, you are right, those I listed are programming languages, not hardware design languages. However anything is better than Java ;P. Andrew, there is an ADA compiler for AVR-s. I have heard that no one uses it and is consequently poorly maintained. – Vorac Oct 5 '12 at 5:25

During my studies, we used C and VHDL, but C was by far the more prominent language used. And the advantage of learning C is of course obvious even beyond hardware programming. So that's what I recommend. When you learn C very well, it should give you no trouble to learn Java and C++ later on - it's just about learning the OOP aspects of both, mostly. After learning C, you will already have a good grasp of the main principles of programming.

And if our professors are to be trusted, the majority of embedded hardware is still programmed with plain old C, so it should be more than enough to land a job. Then you can branch out to either more sophisticated systems still in C, or more modern (and more rare, would you believe?) programming with C++ and others. The majority of embedded hardware is so simple, that using 32-bit MCUs would be incredibly overkill and a waste of revenue and resources.

But of course, it depends on your interest. If you want to program modern hardware, like GPUs, SSD controllers and such, then C++ will possibly kickstart you closer - although Assembly is most likely what you will be using, depending on how close to the "core" you will get with the hardware.

As for Java, C++ and similar, perhaps multimedia hardware (DVD/BluRay players, modern TVs, etc) is the field that uses those languages.

Not the answer you're looking for? Browse other questions tagged or ask your own question.