"but you can use any language that compiles to the target architecture"
Do the devices only accept their assembly language?
If not, how high level can you go for the popular devices?
You have to remember that an assembly language is not the absolute lowest level you can reach, even assembly needs to be assembled into the platform's machine language in order to create an executable.
And you can go as high level as you want for any platform, as long as there's a compiler available which compiles down your high level code into those machine instructions.