从PC应用编程到偏硬件编程的转变
本帖最后由 sbtree 于 2012-11-17 13:00 编辑先简单介绍一下背景,楼主近来正处在在努力转行过程中,从原来的基于PC应用开发到Hardwarenah,尽管都是IT,跨度不是很大,但是也需要补充很多相关的知识。因为本科是电气技术专业,学过一些电子相关的课程,诸如模电,数电,基础电路,编码原理等课程。虽然已经多年没用了,但是快速浏览一下还是很快能够回忆起学过的东西的。所不了解的主要是这个领域在德国是怎样的情景,具体作什么样的事情?接近硬件的开发跟嵌入式系统有着不可分割的联系,尤其是实时系统,Linux,还有ARM体系。楼主发此帖主要有两个目的:
1。记录这个转行的过程,总结每一步的进展,供后来人借鉴(仅供参考,因为是纯属个人观点,也可能有网络上的摘录)
2。希望得到在这个领域的前辈们的指点,楼主的第一步正在抬脚,可能还没有入门呢。您的指点会让楼主茅舍顿开,也会给象楼主一样在探索中的人以启迪。
这个帖的后续部分会不断提出一些问题,针对问题,提出楼主的个人想法,也希望前辈们给以指正。
这里先挖个坑,估计还是一个挺大的坑,我要努力,也希望大家帮我一起把它填平。
问题一:接近硬件开发的软件工程师需要哪些基础知识?
本帖最后由 sbtree 于 2012-11-17 14:20 编辑硬件知识:基础电路,数字电路,编码原理(二进制知识),针对硬件的指令集
编程语言:C,Assembler,VHDL (经过与大家的探讨,觉得HDL在嵌入式开发中不是必要的)
嵌入式操作系统:RTOS,Linux
其他:依赖硬件的编译器,开发环境(IDE)
以上是楼主凭个人理解列出的简单清单,不一定全用得到,希望大家来补充。
简单总结一下(17.11.2012):
adrenalin认为硬件编程和软件编程有很大的不同。在很多细节的实现上的想法要特别注意,例如赋值的实现,逻辑的综合。并且描述了从硬件到软件的三个清晰层次。个人觉得偏硬件的编程思维习惯可能需要的实践的积累,逐渐形成硬件设计的思维模式。不过楼主只是想从高层的应用开发走进嵌入式系统的开发,因该没有那么大的跨越。
chinapope和仙林小童对HDL评论,估计是基于硬件设计方面的考虑。
chain1983从一个电子专业的从业人员的方面给出了一些很好的建议,包括IDE,寄存器,信号和网络等概念,以及自行探索方面的建议。楼主附加一点,某些bus系统还是需要学习学习,比如feldbus, can, most等
Casablanca应该对硬件开发的一些主要任务作了简要的描述,指出这个转变的过程是weiter Entwicklung,个人深表赞同。只是楼主缺少嵌入式方面的知识,还一时理解不了那么深入。至于框架,模块等在嵌入式中是一个什么样子,还比较模糊,希望慢慢地深入。 呵呵 做asic synthese的最怕codeschreiber是从软件转行过来的或者以前做fpga的
硬件编程跟软件编程有很大的不同的 adrenalin 发表于 2012-11-16 11:02 static/image/common/back.gif
呵呵 做asic synthese的最怕codeschreiber是从软件转行过来的或者以前做fpga的
硬件编程跟软件编程有很大的 ...
asic synthese ???
从HDL到物理层电路。 你要是开发CAD工具,写转换算法的,那是大牛,否则就是用用工具而已。 adrenalin 发表于 2012-11-16 11:02 static/image/common/back.gif
呵呵 做asic synthese的最怕codeschreiber是从软件转行过来的或者以前做fpga的
硬件编程跟软件编程有很大的 ...
为什么这么讲?能给出几点理由吗?他们的差别在哪里? chinapope 发表于 2012-11-16 12:52 static/image/common/back.gif
asic synthese ???
从HDL到物理层电路。 你要是开发CAD工具,写转换算法的,那是大牛,否则就是用用 ...
恩 我只是打扫卫生的时候听他们说的 呵呵{:5_321:} sbtree 发表于 2012-11-16 13:07 static/image/common/back.gif
为什么这么讲?能给出几点理由吗?他们的差别在哪里?
个人理解
写软件的不用操心底层硬件如何去实现,基本上想怎么写就怎么写,别有逻辑或者语法错误就行了
硬件编程的人必须考虑很多实际因素,比如你给一个变量赋值,它是立马就得到新赋予的值还是要等到下个时钟周期才能得到赋值,也就是说这个赋值将会被以组合逻辑实现还是时序逻辑。
别看很简单的一个问题,如果不搞清楚,综合过以后的netlist 逻辑行为就不对
另外 写硬件的人还要考虑到综合优化方面的东西,可能两个人写的程序行为完全一样,但是综合过以后人家能达到很高的频率,或者很小的面积,你却达不到
本帖最后由 chinapope 于 2012-11-16 14:01 编辑
adrenalin 发表于 2012-11-16 12:27 static/image/common/back.gif
个人理解
写软件的不用操心底层硬件如何去实现,基本上想怎么写就怎么写,别有逻辑或者语法错误就行了
...
你说的硬件部分很对。 数电HDL还是有模式可寻的,或是高速或是小面积。
高频模拟电路才难,就连是仿真结果都要来回调,实际布线到asic上还有各种效应需要考虑。
至于纯软件的小规模代码或模块,编译器够优化多的话,按一定规范写,没有逻辑错误就行。有规模的或成熟的系统还是要经得起时间考验才行,这方面我没有什么经验。
adrenalin 发表于 2012-11-16 12:27 static/image/common/back.gif
个人理解
写软件的不用操心底层硬件如何去实现,基本上想怎么写就怎么写,别有逻辑或者语法错误就行了
...
楼主新手,很多东西有待学习。个人觉得,就设计而言,无论硬件还是软件,基本的原则应该是一样的。比如模块化,接口设计。你提到的赋值,组合逻辑等实现问题的确值得在硬件设计的时候仔细考虑,其实在应用软件的开发中也有类似的东西,例如从寄存器还是从内存中取数据,重入问题等。上层的软件开发当然不用考虑低层硬件的实现,这就是系统的层次机构,每个层次考虑每个层次上的任务,做好接口,其他的互不相干。
谢谢你的提示,希望能向你多多学习。 HDL叫做硬件描述语言,和软件编程是两回事。没搞清这个的话,还是不懂硬件。 本帖最后由 chain1983 于 2012-11-16 20:00 编辑
不同的芯片,其IDE不同,相对的很多驱动库函数还有接口指令也不同,但功能的实现基本还是建立在C程序上,现在用汇编写代码的不多了吧?如果lz本身就有软件研发的经验那么编程逻辑这一部分就不需要花费太多功夫。我个人觉得学习硬件开发关键在于熟悉相应的IDE,芯片和外部连接的逻辑器件(移位寄存器啊 多功能LCD啊等等)本身的构造,引脚和相应的功能。
芯片的引脚就那么些但扩展的功能有很多,可以通过IDE写代码配合相应的烧录器分别写入芯片内不同的寄存器来达到设置其不同功能的目的,比如定时器啊触发器啊串口输出啊PWM信号啊AD转换啊网络通信啊等等,这个就完全是靠实际操作来熟悉了,不知道lz上学期间玩过单片机没有……初学者一般都是弄块开发板自己写写代码实现一定的功能,慢慢摸索出来的。高手级别那就是自己买芯片设计PCB开发板,有时还涉及到芯片内置memory和外置储存器比如SD卡之类的,需要比较专业的读写储存格式的硬件知识。
本人没有软件编程的经验,因为不是学IT的,只是电子专业,就是做过PIC8位机和AVR32位机的嵌入式编程,玩过几个开发板,lz随便看看我说的就行了,不要太当回事。
另外ls说的对,HDL或者VHDL都是硬件描述语言,和嵌入式编程不一样。
估计lz指的硬件编程就是嵌入式开发吧。。如果不用设计外围电路的话感觉没太大难度吧 mark一下,看看高人 chain1983 发表于 2012-11-16 19:51 static/image/common/back.gif
不同的芯片,其IDE不同,相对的很多驱动库函数还有接口指令也不同,但功能的实现基本还是建立在C程序上,现 ...
"数电有数电的难点,模电有模电的难点,高频有高频的难点。不存在哪个比哪个难的,想做好都不容易。"
要这么说,想每天都睡个好觉也不容易呀,因为白天可能发生任何事情。
电子,Info里面所学专业就考试,实践上手,入门求职而言,是明显有难易之分。
这有几个概念我一直没搞太清楚
个人理解
硬件开发/设计 就是指用HDL或者画schematic的方法对硬件进行实现 (asic standard cell ,
fpga)
嵌入式开发(硬件编程?) 就是指用汇编或者C给已有的硬件(mikrocontroller)进行编程
软件开发 比上面两个抽象级更高一些,完全脱离硬件方面的考虑
这三者抽象级递增
其中 硬件编程 这个概念好像有点mehrdeutig,如果是说的用硬件描述语言进行编程,那应该归为第一个,如果说的是对硬件(mikrocontroller)进行编程,那应该归为第二个
另外 fpga的开发,好像是介于第一和第二个之间。有些fpga好像也可以用c语言进行开发,实际上用的是第二个的方法,做第一个的事情
不知道我理解的有什么错误的地方,请各位指正 仙林小童 发表于 2012-11-16 19:42 static/image/common/back.gif
HDL叫做硬件描述语言,和软件编程是两回事。没搞清这个的话,还是不懂硬件。
HDL个人理解主要应用于硬件设计的逻辑开发,比如某些固件上的程序,楼主没有深入学习VHDL,理解尚浅。这里主要想讨论的是Hardwarenah编程,比如实时系统中的应用,嵌入式系统上的应用,这些应该跟硬件设计是两回事。至于需不需要HDL只是想作为一个问题来讨论的,楼主的第一个问题主要是想给出一个基础知识框架,哪些必须学,哪些可能用到 adrenalin 发表于 2012-11-17 11:34 static/image/common/back.gif
这有几个概念我一直没搞太清楚
个人理解
硬件开发/设计 就是指用HDL或者画schematic的方 ...
您的总结和我的想法差不多,我现在要做的就是从第三层向第二层迈进,而不是直接进入第一层。对于第一层,我个人理解为物理层上的开发,应属纯硬件的开发,可能还涉及Layout设计。 chain1983 发表于 2012-11-16 19:51 static/image/common/back.gif
不同的芯片,其IDE不同,相对的很多驱动库函数还有接口指令也不同,但功能的实现基本还是建立在C程序上,现 ...
我要做的实际上是偏硬件的软件开发,正如您说的是嵌入式系统下的软件开发。嵌入式系统种类比较多,似乎没有统一的开发环境,但是常用的还是有那么几个,比如汽车电子领域的VDX/OSEK,ARM下的OMAP。因为缺少实践,感觉还是无从下手。
目前来看,c语言基本上是最常用的编程语言了,因为开发环境不同,相应的编译器也各不相同,Linux下的gcc好像应用还是很广泛的。另外一些仿真环境对于代码的调试很管用,不知道都有哪些?
个人理解,一般编写代码大家因该都是在PC上吧,然后在仿真环境中编译调试,通过以后再下载到真正的运行环境中,或则烧录到硬件存储器上,这应该是一个典型的接近硬件的开发过程吧。 adrenalin 发表于 2012-11-17 11:34 static/image/common/back.gif
这有几个概念我一直没搞太清楚
个人理解
硬件开发/设计 就是指用HDL或者画schematic的方 ...
硬件开发设计, 一般来说分板级开发(PCB design&Layout)和芯片开发(chip design&Layout)甚至包括半导体元件设计。ASIC是一个软硬结合的东西,也算是芯片开发吧,至于用fpga快速实现的基本算是偏软了 sbtree 发表于 2012-11-17 12:57 static/image/common/back.gif
我要做的实际上是偏硬件的软件开发,正如您说的是嵌入式系统下的软件开发。嵌入式系统种类比较多,似乎没 ...
开发环境,编译器什么的都无所谓,万法皆通。像你这么直接从应用软件转过去的一般都是weiter Entwicklung,总体框架,结构差不多都定好了,你在这些基础上添加修改模块就好了。慢慢地接口指令什么的就都熟悉了 Casablanca 发表于 2012-11-17 13:33 static/image/common/back.gif
开发环境,编译器什么的都无所谓,万法皆通。像你这么直接从应用软件转过去的一般都是weiter Entwicklung ...
您说的接口指令是指依赖芯片的指令集还是编程接口,或者前面有人说过的驱动库函数调用? sbtree 发表于 2012-11-17 13:41 static/image/common/back.gif
您说的接口指令是指依赖芯片的指令集还是编程接口,或者前面有人说过的驱动库函数调用?
都有,最终目标是结合硬件写程序
问题二:如何搭建嵌入式应用开发环境?
本帖最后由 sbtree 于 2012-11-17 14:38 编辑这个问题我需要在实践的过程中慢慢补充,目前来讲,可能先需要一个合适的嵌入式Linux系统或其他其嵌入式操作系统,求推荐
下面先列出几个个人见到过的或者听说过的常见框架,以便大家的推荐能有有的放矢
Android (移动应应用)
iOS(苹果系统)
VDX/OSEK(车载电子)
OMAP(似乎在工业电子中用的较多)
本帖最后由 chain1983 于 2012-11-17 17:26 编辑
sbtree 发表于 2012-11-17 12:57 static/image/common/back.gif
我要做的实际上是偏硬件的软件开发,正如您说的是嵌入式系统下的软件开发。嵌入式系统种类比较多,似乎没 ...
我也是来学习的,先针对你说的仿真编译调试说一下,另外也等看其他牛人的指导。
不同的IDE也有配套的仿真器,我目前只在windows系统上用过几个生产商提供的免费开发软件,比如PIC的MPLAB,ATMEL的AVRstudio,都基于gcc。这两个内置也有simulator,因为做东西涉及外部器件还有网络通信,有些测试必须在闭环下调试,而单一的仿真器只能软件仿真,所以我用得比较少。
仿真系统的话学习的时候接触过Proteus,集成各种芯片和逻辑器件以及其他功能元器件模型,支持不同的编译环境,可以设计电路原理图及在电路原理图上进行GCC的调试和仿真。 chain1983 发表于 2012-11-17 16:05 static/image/common/back.gif
我也是来学习的,先针对你说的仿真编译调试说一下,另外也等看其他牛人的指导。
不同的IDE也有配套的仿真 ...
我对嵌入式应用的开发环境还是很陌生,所以你提到的几个我都不认识。 转行的行动仍在继续中,一些具体的操作估计要在明年初才能实现,届时报告给大家 VHDL和C,这两样都得有数年以上的经验路才宽 nanguazaixian 发表于 2012-12-1 23:52 static/image/common/back.gif
VHDL和C,这两样都得有数年以上的经验路才宽
您从事硬件开发? sbtree 发表于 2012-12-2 01:09 static/image/common/back.gif
您从事硬件开发?
我不是电子的,但有很好的朋友是这方面专家 本帖最后由 sbtree 于 2013-3-12 21:16 编辑
刚刚开始玩安卓,正在探索中...
问:Linux内核,加上Java的应用,这两样起码目前都很流行,何以见得是个过客呢?
页:
[1]
2