C语言是嵌入式的重中之重,Linux操作系统就是用C实现的,包括安卓系统的底层也是C语言实现的,基础不牢,地动山摇,一定要打好基础。 遇到错误不要怕麻烦,善于使用搜索工具,google,stack overflow。

嵌入式底层开发,需要你精通c语言,c语言可以操作底层,其次,你要熟悉汇编,很多东西比如程序怎么执行的,需要你反汇编之后才能知道。
你还需要了解,arm体系结构。
uc的的知识,你也需要知道,用户空间的编程基本是用uc写的,学习uc,建议买本书。
uinux高级环境编程,把这本书学好了,用户空间的编程基本没问题,建议你初次学习编程,买本嵌入式驱动的书看看吧
可以从硬件做起,软件分为应用软件(java和c++)和底层驱动开发(懂硬件知识,c,linux)。
我看你的基础可以去参加嵌入式应用软件培训,以后当嵌入式程序员,当然也可以走底层驱动,三条道路都不好走,深圳这边的公司不太愿意培养新人。
建议你利用空闲时间自学一下,资料网上很多的,重要的是决心与毅力。多问问自己为什么要学嵌入式,为什么对现有工作不满意。
嵌入式开发需要学习的基础知识:
1.电子硬件基础知识:嵌入式开发需要对电子硬件有一定的了解,包括电路设计、电子元件的选择和使用、电子工具的使用等等。
2.汇编语言和C语言编程:嵌入式系统的底层操作通常使用汇编语言编写,而应用层通常使用C语言。因此需要熟悉这两种编程语言。
3.微处理器和微控制器:嵌入式开发通常涉及使用微处理器和微控制器来控制硬件。因此需要了解它们的基本原理和使用方法。
4.操作系统:许多嵌入式系统使用操作系统,如Linux、FreeRTOS等。需要了解操作系统的基本原理和使用方法。
5.通信协议:嵌入式系统通常需要和其他设备进行通信,如UART、SPI、I2C、CAN等通信协议。需要熟悉这些协议的使用方法和原理。
6.数据结构和算法:在嵌入式开发中,需要设计和实现各种数据结构和算法来处理数据和实现系统功能。
7.调试和测试:嵌入式系统的调试和测试是非常重要的。需要掌握调试和测试工具的使用方法。