1

I see on quite a few job descriptions for embedded developer positions, that a requirement would be for example to have knowledge of embedded C programming on ARM microcontrollers.

What's not very clear to me is , what is the difference between having knowledge of developing C for a particular ARM processor, or developing C for a PowerPC or other type of processor. Developing with C we are abstracted from the actual instructions which will get compiled and the architecture so why does it really matter?

I would guess that it is important mainly to have knowledge of embedded development, knowing memory constraints etc. and that the actual target processor wouldn't matter too much. For example, won't a developer who was writing code for PowerPC MCUs for many years be just as good as developing code for an ARM-based or other type of MCU?

Perhaps i'm missing something obvious here. Please could someone give an example of what could be some major differences between writing C/C++ code for one type of processor and another type. Thanks

Attersson
  • 4,755
  • 1
  • 15
  • 29
Engineer999
  • 3,683
  • 6
  • 33
  • 71
  • For one thing, different MCUs will have different on-board components such as timers, GPIO, UART, etc., and working with such things will vary from MCU to MCU. There's a great deal of datasheet diving when working with a new microcontroller. – Christian Gibbons May 18 '18 at 20:28
  • Ok, good point.The speed of execution of particular algorithms may vary too? – Engineer999 May 18 '18 at 20:32
  • @Engineer999 This is something that should not matter much if the algorithm is designed properly. The hardware-specific optimizations should be well handled by the compiler. – Eugene Sh. May 18 '18 at 20:49
  • 1
    A certain percentage of it is generic, the language itself. But by specifying a target they may be doing that for no real reason and/or they are doing it for the non-generic language issues that arise, tools, processor nuances, and other non-language issues that are related to that level of work. Why not just ask these companies what specifically they are looking for? – old_timer May 19 '18 at 21:42
  • If you asking after microcontrollers in particular then most of the work has nothing to do with C/C++ and is all about the hardware. – old_timer May 19 '18 at 21:44

4 Answers4

2

All you write about Linux and kernels, but 99% of the embedded work is purely bare metal. therefore, the knowledge of the core and peripherals is essencial.

In the most cases, before Linux programmers learn how to program the bare metal, they are way useless.

And this time needed costs your employer money.

SHR
  • 7,940
  • 9
  • 38
  • 57
0___________
  • 60,014
  • 4
  • 34
  • 74
  • All the kettles, washing machines etc rtc, most of auto, avionics ... are purely bare metal. Or bare metal + rtos (which is not the same as a traditional ones). – 0___________ May 18 '18 at 22:02
  • Phones wife's are not embedded as they are standalone devices. Using this logic PC computer and CRAY supercomputers are embedded devices as well. – 0___________ May 18 '18 at 22:09
1

Well, I haven't written any ARM code myself, but I would think the ARM-specific experience would be (in no particular order):

  • Experience with ARM-specific toolchains (particularly non-standard parts of that toolchain, pieces of proprietary software etc)
  • Knowledge of which relevant libraries are available on ARM rather than on Intel machines, and whether their ARM version is performant enough, stable enough etc.
  • Knowledge of how certain coding patterns look like when compiled to ARM machine code, and consequently, good discretion regarding certain choices regarding low-level implementation.
  • Ability to write inline ARM assembly when and if necessary
  • Knowledge of ARM systems' cache layout
  • Ability to estimate/forecast the power economy of code rather than its mere performance (as ARM processors are sometimes more concerned with that).
einpoklum
  • 118,144
  • 57
  • 340
  • 684
  • 1
    I will add to it specific ARM modes of operation - SVC, USR, IRQ, FIQ. Some ARMs have the TrustZone technology embedded. And of course it is important to be familiar with the specific MCU/CPU, as ARM based processors are very different by themselves. And yes, debugging. Without the familiarity with ARM registers it will be very hard to debug different exceptions which occur pretty often.. – Eugene Sh. May 18 '18 at 20:39
  • Plus peripherals knowledge if we discuss the uC which are completely different than the application processors – 0___________ May 18 '18 at 22:18
1

The answer is yes and no.

  • If a job is more of application related then MCU specific knowledge will be of little help

  • If the software development is at kernel/BSP/drivers or hardware related then the knowledge of MCU/CPU hardware is critical.

Please check the Job Description in details to know the kind of work expected.

Vinay P
  • 617
  • 3
  • 13
  • Thanks. If the development is at kernel level, what would be an example of why knowledge of the MCU/CPU is critical? – Engineer999 May 18 '18 at 20:50
  • 1
    most of the time if they are looking for embedded developers there isn't a kernel... your code is the entry point of the whole thing... and the only thing running – Grady Player May 18 '18 at 20:50
  • @Engineer999 Knowledge of hardware and its working is essential when programming on most parts of kernel, especially when writing device drivers. – Vinay P May 18 '18 at 20:53
  • 1
    If you have an OS, it is a abstracting the hardware away a bit. But at a "kernel level", you still need to know how to write drivers and stuff for specific hardware. – Eugene Sh. May 18 '18 at 20:54
  • If you have an OS and that OS is Linux kernel, definitely go with C. – Attersson May 18 '18 at 21:40
1

As usual, it depends.

If you are going to develop at a deep C level, it is a good idea to know about the architecture, in order to optimize your code according to speed or/and memory (data bus size, instructions per clock, etc).

It is a must if you are going to develop at a deeper level (and if we are talking about ARM and its thumb, thumb2 and ARM... It is madness).

Furthermore, each architecture because of legacy reasons or to make our life better, adds some tricks. For instance, ARM PC points to the instruction after the next one to be executed, which is quite different in PowerPC or RH850 or whatever.

Above that (I mean, above or close to an OS), the compiler uses to be better than us, but anyway, it is a nice to know how it is working (and definitely it will make the debugging easier)

Jose
  • 3,306
  • 1
  • 17
  • 22