2个回答
展开全部
你需要理清一个根本概念,语言本身是为了人与机器交互而产生的,所有语言最终生成的都是让硬件工作的“机器码”。从这个角度来说,你的每一条C语句本身就已经是在给“硬件编程序”了。
硬件并不关心,也不知道你的编程语言到底是什么。之所以在单片机、DSP等硬件设计领域C语言的使用率最高,一方面是因为C语言是它那个年代所出现的最优秀的面向结构语言,因此被习惯性地采用,各大厂商开发出了众多的面向具体芯片的C编译器(把C语言转换成相应芯片的机器码),一直延续到了今天;二是因为芯片面向的是底层应用,具体化程度高,抽象性低,采用面向对象语言的总体意义不大,所以目前还没有被面向对象语言代替的趋势(但是并非没有这方面的发展,比如谷歌的Go语言)。不过我相信随着IoT的迅速发展,嵌入式系统的语言和相应的编译器会很快发生巨大的变化。
如果延伸开来的话,除了具有处理器的这一类硬件以外(如51单片机、Arm,DSP等),还有一类硬件没有直接执行机器码的能力,如CPLD、FPGA,这类硬件的逻辑要由开发者设计,这种情形下,C语言就难以胜任了,因为硬件电路的逻辑与“冯诺伊曼”式计算机的根本原理是不同的。为了能够表达复杂的数字逻辑,产生了像Verilog、VHDL这样的硬件描述语言。所以如果你所指的“给硬件编程”是指这一类硬件的话,那么上述的两种语言之一,是必然要学习一下的。
希望能对你有所帮助。
硬件并不关心,也不知道你的编程语言到底是什么。之所以在单片机、DSP等硬件设计领域C语言的使用率最高,一方面是因为C语言是它那个年代所出现的最优秀的面向结构语言,因此被习惯性地采用,各大厂商开发出了众多的面向具体芯片的C编译器(把C语言转换成相应芯片的机器码),一直延续到了今天;二是因为芯片面向的是底层应用,具体化程度高,抽象性低,采用面向对象语言的总体意义不大,所以目前还没有被面向对象语言代替的趋势(但是并非没有这方面的发展,比如谷歌的Go语言)。不过我相信随着IoT的迅速发展,嵌入式系统的语言和相应的编译器会很快发生巨大的变化。
如果延伸开来的话,除了具有处理器的这一类硬件以外(如51单片机、Arm,DSP等),还有一类硬件没有直接执行机器码的能力,如CPLD、FPGA,这类硬件的逻辑要由开发者设计,这种情形下,C语言就难以胜任了,因为硬件电路的逻辑与“冯诺伊曼”式计算机的根本原理是不同的。为了能够表达复杂的数字逻辑,产生了像Verilog、VHDL这样的硬件描述语言。所以如果你所指的“给硬件编程”是指这一类硬件的话,那么上述的两种语言之一,是必然要学习一下的。
希望能对你有所帮助。
更多追问追答
追问
我现在已经学了c语言,也学了嵌入式,但是我想问一下,我要是给嵌入式写程序,是不是应该学点别的,听别人说还要学数据结构和算法,也不知道是不是真的,还有,算法有好多种,我应该学哪一种?
追答
你问出这样的问题,说明对嵌入式领域的理解还比较模糊。如果你的方向是做一名嵌入式领域的工程师,那么你应当做好的准备是“随时学习需要的知识”,而不是“提前准备好所有知识”。因为嵌入式领域的特点是“杂”,举几个例子:
51单片机多用于系统控制,你要把它玩转,除了对它编程,还要知道周边器件是怎么工作的,这就要求你对数字电路的知识比较丰富;
DSP多用于数字信号、图像等处理,如果你没有傅利叶变换、小波变换等方面的数学知识和信号系统知识,你可能就难以处理现实问题;
ARM、PowerPC这一类芯片和X86的CPU本质上是一样的,但是它们的寄存器结构、缓存、换页方式都不一样,如果你不了解这些cpu的特性,写出来的程序可能性能不够好;
FPGA这类芯片更加底层,需要你对很多硬件机制,如时钟、FIFO、DMA、布局布线有所了解。
你觉得这些知识是可以全部“提前掌握”的吗?所以我觉得你需要转变一下思路,在面对一个实际工程的时候,先把它的知识需求理出来,再有针对性地进行学习,然后尝试并完成它。这样随着工程经验的增加,你的水平自然就提高了。
硬件领域很“高深”,也很酷,但你不用觉得自己“空”,只要你的学习能力够强,就等于已经具备了全部能力。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询