Just wondering if there were any C programmers around these parts. Looking to get into embedded device development for a career change and was looking for advice/tips etc. If anyone would be kind enough to share their experiences/thoughts I'd be really greatful.
Are you a developer already?
I used to write 6052 assembler back at school, ARM code back in the 90s, C/C++/Java and many others plus embedded with ARM, Blackfin etc. I used to be a developer but left that back in 2005 as a day job, moving into product and management. I also have a degree in software engineering specialising in parallel and distributed systems (we used to use 68000 embedded systems, I used to code ARM for RISCOS on the side).
One cheap way to start coding embedded is use an Arduino - it allows you play and pick up before moving to the lower levels. An ARM based Arduino or a uboot ARM based chip is also another option. uCLinux and many other OSes such as realtime OSes exist. So embedded is rarely coding on metal nowadays. You'll learn a lot about the compiler toolchain too for targeting the architecture.
I would study concurrency systems - this should help you with async, interrupts, parallel processing, and general concurrency theory in systems. I don't expect you to go down to mathematically defining and proving the validity of the system states as we had to (think ADA/formal methods mixed with concurrency) but it would be good for you to understand theory, understand architecture support and from that firm footing into the embedded OS and FPGAs etc.
You can get a cheap FPGA with an ARM core built in - allowing you to combine the two but you'll need an oscilloscope/logic analyser, JTAG, UART/RS232 to USB if you're going down to this level.
K&R C is still a good starting point for C.
Straustrup for C++
There's a couple of books on good programming style for C and C++ that focus on not falling into the bad programming practices that lead to serious issues.
Most embedded will operate in C, few will operate with assembler. However I agree the ARM assembler is one of the nicest to work with.