"Good" for what purpose? That is, what are the goals, requirements, and limitations of the target embedded system? If the system fails or encounters errors, what is the worst outcome?
C and C++ are the most widely used and supported. Rust is up and coming in terms of support, features, and popularity. Ada works great and is required for some embedded applications.
>> overall what would constitute a good PL for this domain?
Most embedded systems have limited hardware (slow or low power processor, minimal RAM, minimal storage, etc.) and will have either a minimal real-time operating system (RTOS) or no operating system running on bare metal.
A good programming language for embedded work will be able to interface directly with hardware, run fast, and use minimal memory.