1) Introduction to Embedded Systems: Using Microcontrollers and the MSP430 by Manuel Jiménez, Rogelio Palomera, Isidoro Couvertier - https://link.springer.com/book/10.1007/978-1-4614-3143-5
This has more of a hardware interfacing slant than most books on embedded systems which is what a software person needs. Every topic is first introduced in a general way with lots of illustrations and then its application in MSP430 is shown. Hence we can easily transfer our understanding to any other MCU family. A really good textbook for serious students of embedded electronics.
Introduction to Embedded Systems: Using Microcontrollers and the MSP430 by Manuel Jimenez et al. An excellent textbook with an emphasis on interfacing to a MCU from a hardware perspective. The chapter titled "The Analog Signal Chain" is by itself worth the price of the book.
Patterns for Time-Triggered Embedded Systems by Michael Pont. Full of C code for 8051 which you can study and then adapt to your specific MCU family. Free book available at https://www.safetty.net/publications/pttes Also checkout all of his other books since they are also full of C code examples.
This free book Introduction to Embedded Systems - A Cyber-Physical Systems Approach by Lee & Seshia gives a pretty good overview - https://ptolemy.berkeley.edu/books/leeseshia/
1) Designing Embedded Hardware by John Catsoulis.
2) Introduction to Embedded Systems: Using Microcontrollers and the MSP430 by Manuel Jimenez et al.
3) Prototype to Product: A Practical Guide for Getting to Market by Alan Cohen.
You can also look at using Digilent equipment (eg. Analog Discovery 3 or 2) and learning materials along with Arduino/MSP430/whatever to get better practical insight into your system - https://digilent.com/reference/landing and https://digilent.com/reference/learn/start
When i started learning Embedded Systems (lots of C/C++ Programming experience but without an Electronics background) it was understanding the needed Electronics and how to interface/debug the Hardware-Software interface where i had the most difficulty.
I found the following helpful in my education and hopefully people with a Software-only background who want to get into Embedded Systems will also find these useful;
* Designing Embedded Hardware by John Catsoulis - Very good introduction to relevant practical Electronics without drowning you in nitty-gritty details.
* Patterns for Time-Triggered Embedded Systems by Michael Pont (free pdf available at his company SafeTTy website) - Full of C code showing how to interface to hardware and do stuff.
* Practical Electronics for Inventors by Paul Scherz, Simon Monk - Reference for when you need more Electronics knowledge.
* Understanding Signals with the PropScope from the company Parallax (search for free pdfs online) - Practical lab book showing how to use PropScope(a USB based Oscilloscope) to study Signals on circuits built using the Parallax BASIC Stamp MCU board. You can use any other MCU/Oscilloscope combination (eg. Arduino with Analog Discovery 2 aka AD2) to build the same circuits and do the lessons. Digilent also has a lot of lessons on using the AD2 at its website.
* Introduction to Embedded Systems: Using Microcontrollers and the MSP430 by Manuel Jimenez et al. - Excellent and nicely illustrated textbook to learn Embedded Systems from. The MSP430 MCU is used as a case study but everything is presented in a general way.
1) Real-Time Embedded Systems: Design Principles and Engineering Practices by Xiaocong Fan. - Good text book.
2) Introduction to Embedded Systems: Using Microcontrollers and the MSP430 by Manuel Jiminez et.al. - Very good book teaching you bare-metal MCU programming.
3) Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs, and SEGGER debug tools by Brian Amos - Great book showing the use of all tools/ecosystem needed for RTOS programming.
4) POSIX.4 Programmers Guide: Programming for the Real World by Bill Gallmeister. - The classic indispensable work on "real-time programming" for Unix-like systems.