这两个哪个配置适合做软件和富士通单片机开发软件?

来自子话题:
实名反对@&a href=&/people/li-niu-fen& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&李赧郎&i class=&icon-external&&&/i&&/a& 和某匿名用户拿STM32来讲解Arduino。STM32的IO口结构跟Arduino的AVR还是有区别的。根据STM32的数据手册来学习AVR会造成误导。引用@&a href=&/people/li-niu-fen& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&李赧郎&i class=&icon-external&&&/i&&/a& 自己的一句话:&br&&blockquote&玩arduino的还是要老老实实的看单片机手册、学习硬件原理的,不看手册、不看原理上来就用自然会有问题。&/blockquote&&br&首先要明确IO口的几种常见模式。对于数字IO而言,常见的模式有:推挽输出、开漏输出、浮空输入(高阻输入)、上拉输入、下拉输入。STM32支持上述的所有模式,但很多单片机并不是支持上述所有模式。比如Arduino采用的AVR单片机就不支持开漏输出和下拉输入。&br&&br&第二要明确“输入阻抗”和“输出阻抗”的概念。例如当IO口输出一个高电平时,IO口内部并非像机械开关那样把一根线直接插到了电源正极上,IO引脚和电源正极之间其实还有电阻的存在。当这个电阻很小的时候,我们称之为“强”,当这个电阻较大时,我们称之为“弱”。这个电阻的一端当然接的是IO引脚,另一端如果接到电源正极,则成为上拉电阻,如果接地,则称为下拉电阻。&br&&br&先说输出模式。对于Arduino,用pinMode将IO口设为OUTPUT的时候,其实IO的状态为“强推挽”,也就是说设为高电平时,IO口对电源正极的电阻比较小(强上拉),设为低电平时IO口对地的电阻也比较小(强下拉),这样IO口就具备了较强的驱动能力。其实也没有强到哪里去,大概几十毫安,能点亮LED而已。这里顺便提一下常见的51单片机,它的IO口总是接通了一个上拉电阻,这个上电阻比较大,所以称为弱上拉,所以51单片机的&b&拉电流驱动能力&/b&(IO引脚高电平时电流从IO引脚流向外部电路的能力)比较弱,大概只有5mA左右,这通常只能让LED发出很微弱的光,所以51单片机IO口点亮LED的方式通常为灌电流(电流从外部电路流入IO引脚)。&br&&br&再说输入模式。对于Arduino,用pinMode将IO口设为INPUT的时候,其实IO的状态为浮空输入,浮空输入也称高阻输入,也就是说输入阻抗非常高。理想状态下,可以认为输入阻抗是无穷大的,大到就像这个引脚断路了一样。就像一个浮在空中的金属丝一样,没有连上任何电路,你让它的电压是多少,它的电压就是多少。这样做是有意义的,因为只有输入阻抗足够大,才能接收到微弱的信号。如果输入阻抗不够大,比如输入端跟地之间有一个1kΩ的电阻,那微弱的输入信号很可能就被直接拉到0V,检测不出来了。但是浮空输入并非在任何情况下都是最好的选择,比如题主在接开关时。开关一头接IO口,一头接地。按下时把IO口拉到0V,读取,低电平,完全符合预期,赞!但是如果开关没有按下,读取,IO这时实际上没有接到任何地方,处于浮空状态,IO口上其实没有电压,或者说可能是任何的电压,这时读取IO口就会发现读到的值是不一定的。有时高有时低,用手摸一下那个引脚,都会使得读到的值抖动,傻眼了,咋办?&br&&br&这时就需要上拉电阻来救场了,准确地说是弱上拉。Arduino的AVR单片机内置了上拉电阻,只要通过程序打开就可以,开启上拉电阻后,IO口会通过一个比较大的电阻(比如100kΩ)接到电源正极,尽管是比较大的电阻,但这个电阻仍然远远小于IO口浮空的输入阻抗,所以这个电阻就可以在IO口没有外部输入时把IO口的电平可靠维持在一个比较高的水平,读出的也都是高电平了。&br&&br&这个时候就可以回答题主的问题了。&br&&br&问题1问的是为什么可以对一个输入引脚执行write操作。答案就是,当对一个已经设定为输入状态的IO口digitalWrite为HIGH时,就会启动这个引脚的上拉电阻。没有为什么,Arduino在实现digitalWrite这个函数时就是这么写的。很扯淡对吧?这其实是一个历史遗留问题,Arduino在早期的版本中并未封装对上拉电阻的操作,在那个时候,你的这种开关电路只能在外部连接一个上拉电阻。在Arduino 1.0之后,才在其库中支持了上拉电阻。其实更好的方法是修改pinMode函数的实现,将INPUT分为INPUT_FLOATING和INPUT_PULLUP。但这就意味着之前所有玩家们开发的代码都需要修改后才能运行,于是Arduino就想出了这么一个歪招,用digitalWrite实现了上拉。需要注意的是,AVR不具备内置的下拉电阻,所以对已经设为INPUT的引脚digitalWrite为LOW,是没有任何效果的。&br&&br&问题2是为什么可以对一个已经有电压的引脚再接入别的电压,从而改变其电压,而不会造成短路。答案就是4个字——“&b&输出阻抗”。&/b&刚才说了在输入引脚上的上拉电阻是个弱上拉,所以当你把弱上拉到高电平的引脚接地时,就相当于把电源正极和地之间连接了一个很大的电阻(例如100kΩ),假设弱上拉电阻是100kΩ,根据欧姆定律,只有50μA的电流从中通过,完全不会带来伤害。但是如果你把设为输出状态的引脚设为高电平后再接地,情况就很不一样了。由于输出高电平时是强上拉的,直接接地的电流可能在50mA以上,超过了输入状态接地电流的1000倍。这其实就是所谓的短路了,所以一定不要这样做,一个引脚长时间短路是可能造成这个引脚甚至整个单片机损坏的。&br&&br&其实我认为这个题目并不需要贴图解释,因为Arduino本身的设计初衷就是避免用户接触IO口内部结构这种底层细节。但是为了纠正其他知友的错误,我还是从真正的AVR数据手册里截了一张简化版的IO口等效电路图,其中的Rpu就是那个传说中的上拉电阻。&br&&img src=&/81f7bce5cb3fe80378bebb34c7bf742f_b.jpg& data-rawwidth=&608& data-rawheight=&334& class=&origin_image zh-lightbox-thumb& width=&608& data-original=&/81f7bce5cb3fe80378bebb34c7bf742f_r.jpg&&&br&&br&说完了,可以点赞了。
实名反对@ 和某匿名用户拿STM32来讲解Arduino。STM32的IO口结构跟Arduino的AVR还是有区别的。根据STM32的数据手册来学习AVR会造成误导。引用@ 自己的一句话:玩arduino的还是要老老实实的看单片机手册、学习硬件原理的,不看手册、不看原理上来…
泻药&br&&br&fpga是可定制的数字逻辑电路,你可以理解为一颗可以自定义功能的芯片。&br&&br&应用领域既很宽又很窄&br&&br&宽是因为可以用在几乎任何需要数字电路的领域&br&&br&窄是因为由于成本,功耗,开发难度等原因,在每个领域都无法占统治地位&br&&br&综上原因,fpga是为特殊需要而生的,注定无法是大众的。&br&&br&举个例子,通信领域是fpga应用最广的,出货量最大的应该是lattice给三叔用在手机上的那颗超小超便宜的。但基本上是因为传感器太多,老的处理器不支持,新的处理器还没流片,手机又要急着发布,先拿来顶一下。&br&&br&设备商是altera,xilinx最大的客户,但是一般是前几版用一下,后面一看,哎哟,量还挺大,不如流片算了,后面就不用了。&br&&br&然后是医疗,工控这些设备,传感器太多,cpu,gpu,arm,接口太少玩不转,主频才3个g处理能力太差。量太少又不值得流片。然后会用。&br&&br&还有高端安防,视频矩阵,大屏拼接也是类似。&br&&br&然后是超算啦,不过那都是高富帅公司自己玩的。&br&&br&designhouse一般玩什么?用于某种特殊应用。比如数据采集上传,用来做器件胶水,某芯片功能简单,性能一般价格太离谱,自己做一个替换。等等。一般不会太复杂,但是时间都比较紧。&br&&br&fpga 的门槛比单片机,cpu,什么的高多了。但是你学会了独孤九贱,也不表示就一定能吃饱饭不是。
泻药fpga是可定制的数字逻辑电路,你可以理解为一颗可以自定义功能的芯片。应用领域既很宽又很窄宽是因为可以用在几乎任何需要数字电路的领域窄是因为由于成本,功耗,开发难度等原因,在每个领域都无法占统治地位综上原因,fpga是为特殊需要而生的,注定无…
来自子话题:
&blockquote&在很多微机原理和计算机组成原理书中说每当完成取指令操作后,PC = PC + 1,感觉这个说法不太正确,我的理解是 PC=PC + “取出的指令长度”,比如上一条指令长度为 4 字节,PC=PC+4,这个理解正确吗?又或者比如 MIPS 指令集的每条指令长均为 4 字节,所以指令地址一定为4的倍数,所以指令地址后两位一定为 0,所以这里的 +1 指代的就是 +4 字节呢?&br&&/blockquote&+1 是指增加一个——概念中的单位。为了方便教学往往说 +1,实际上是增加(一条指令的长度 ÷ 寻址粒度),在 MIPS 中就是 4,因为 MIPS 一条指令长度 4 字节,寻址粒度是 1 字节。而 x86 体系的指令长度不定,所以每次增加的量会变化。&br&&blockquote&还有一个问题就是因为虽说经常听到 PC 这个词,但是我却没有见到其实体,所以我的理解是 PC 实际上就是 CS:IP 组合的逻辑表示。PC 不是一个实体,真正用来表示 PC 值的是 CS:IP,所谓的 PC 自动增加是指令指针寄存器 IP 在自增?这个理解对吗?&/blockquote&在 x86 体系里是这样。x86 系统中自增的是 IP,用 CS:IP 组合表示正在执行的指令地址,此时 PC 只是一个概念上的说法。在 ARM 体系中 R15 就是 PC,当然 ARM 和 IA-32、x64 都支持高级内存管理,所以「PC」的内容未必是当前指令在内存中的绝对位置。
在很多微机原理和计算机组成原理书中说每当完成取指令操作后,PC = PC + 1,感觉这个说法不太正确,我的理解是 PC=PC + “取出的指令长度”,比如上一条指令长度为 4 字节,PC=PC+4,这个理解正确吗?又或者比如 MIPS 指令集的每条指令长均为 4 字节,…
相关:电子信息工程本科,硕博通信与信息系统。&br&&br&读研值不值每个专业,每个学校,每个人都不一样。&br&但是就电子信息工程这个领域,可以分享下见闻。&br&&br&电子信息工程属于大IT, 目前就业方向通信+互联网为主。&br&本科生平均而言只能找到普通小公司,很难进入移动、华为、bat等等。期望薪资每月4~6k。&br&也有技术神人,进各种公司拿各种职位分红拿股票的。&br&&br&较好学校的IT类研究生, 正常就是可以进入运营商、华为中兴、BAT网易等等的。&br&最低起薪12w/年, 正常可以拿到15~16w,好的20w左右, BAT后劲更足点,3年后25~30W+股。&br&等等。&br&也有去略小互联网公司的,基本收入略低,但是拿股机会更大。&br&&br&另外好学校的IT类研究生还可以去金融类工作,包括分析、技术支持,&br&也可能继续深造搞科研出国。&br&这一点本科生基本没机会。&br&&br&&br&&br&综合建议两点:&br&1、技术在某个技术领域已经有深入认识。最自己的技术路线有所规划,那工作考研都差不多,有个合适工作分分钟比考研划算。&br&但是大部分人不知道打算干嘛,能干嘛,如何准备的。 赶紧去考个好研吧。&br&&br&2、正常电子信息工程学生,考个好地方好学校的硕士, 平台和视野, 提升巨大。&br&&br&推荐两个性价比学校: 华南理工,北京邮电,看地方选。&br&相对好考,纯业内找工作方面不亚于top2。
&br&&br&&br&解释下为什么华南理工,北邮找工作好。&br&&br&完全不是学术水平的缘故,而是因为这两个学校的老师和企业之间有大量极度深入的合作。 学生通过各种项目深入到企业中,对企业文化,团队合作,项目管理等环节都经过不错的培训。&br&这种环境很难得。&br&&br&另外找工作是有传承的,师兄师姐找到好的单位,经验、人脉会扩散。是一种学术遗传效应。&br&&br&只是推荐,计划京广工作的话可以考虑。当然非绝对。也有其他很好的学校
相关:电子信息工程本科,硕博通信与信息系统。读研值不值每个专业,每个学校,每个人都不一样。但是就电子信息工程这个领域,可以分享下见闻。电子信息工程属于大IT, 目前就业方向通信+互联网为主。本科生平均而言只能找到普通小公司,很难进入移动、华为…
来自子话题:
&p&讲一点原理吧&/p&&br&&p&正常的发短信,手机发给手机,或者各种平台发给手机,都会经过网络中的短信中心,这个过程是受到管控的,如果有号码异常的发送大量短信网络会发现,现在通过正常渠道发垃圾短信越来越难了。&/p&&br&&p&手机SIM卡里有自己的号码信息,还有归属哪个网络的信息,开机选到这个网络的某个基站上登录,网络当然要验证它是不是本网的,这是“鉴权”流程,验证完登记,然后就可以使用业务了。&/p&&p&这里面有个漏洞:伪基站和正常的基站广播一样的信息,手机就会误认为它是正常基站,于是去那里登记,伪基站那里是来者不拒,登记上之后,不干别的事情,就是给你发垃圾短信,这个过程不经过网络,不受任何管控。&b&如果使用USIM卡,终端在鉴权时能够判断出对端是否是正常的网络,如果不是,就不登录,就不会收到伪基站的短信。&/b&&/p&&p&如果感兴趣,可以看看这个:&a href=&/link?url=RMgQnNjo76hORW9xAZLMI4XDhuPx9JHaQInq1ZIqhtQ3OYrkfsTl_DHiw-VEuNpOMYMcz3xO-BAm_3bqGh3oxnYqnMPyiQA6DAx6fZ3I1Q3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GSM-WCDMA 鉴权原理&i class=&icon-external&&&/i&&/a&&/p&&br&&p&此外,烧个号码技术上很容易,只要知道手机号,找一个营业厅,就能烧一张这个号码的卡,然后原来的卡作废。但这个绝对不是随便的,你可以试试能不能焼一张隔壁某同学号码的卡&/p&&p&----------------------&/p&&p&一年前的回答了,当时的回答有些问题,感谢 &a class=&member_mention& href=&///people/8cc28e3d67f4e7e92303b1& data-hash=&8cc28e3d67f4e7e92303b1& data-tip=&p$b$8cc28e3d67f4e7e92303b1&&@张秋良&/a& 提醒&/p&&p&GSM网络不能屏蔽三元组鉴权,即使用了USIM卡,依然无法阻挡GSM伪基站&/p&
讲一点原理吧正常的发短信,手机发给手机,或者各种平台发给手机,都会经过网络中的短信中心,这个过程是受到管控的,如果有号码异常的发送大量短信网络会发现,现在通过正常渠道发垃圾短信越来越难了。手机SIM卡里有自己的号码信息,还有归属哪个网络的信…
来自子话题:
从计算机领域来说,驱动和固件从来没有过明确的定义,就好像今天我们说内存,大部分人用来表示SDRAM,但也有人把Android里的“固化的Flash/Storage&称为“内存”,你不能说这样说就错了,因为这确实是一种“内部存储”。&br&&br&但在Linux Kernel中,Driver和Firmware是有明确含义的,其中Driver是控制被操作系统管理的外部设备(Device)的代码段。很多时候Driver会被实现为LKM,但这不是必要条件。driver通过driver_register()注册到总线(bus_type)上,代表系统具备了驱动某种设备(device)的能力。当某个device被注册到同样的总线的时候(通常是总线枚举的时候发现了这个设备),总线驱动会对driver和device会通过一定的策略进行binding(即进行匹配),如果Binding成功,总线驱动会调用driver的probe()函数,把设备的信息(例如端口,中断号等)传递给驱动,驱动就可以对真实的物理部件进行初始化,并把对该设备的控制接口注册到Linux的其他子系统上(例如字符设备,v4l2子系统等)。这样操作系统的其他部分就可以通过这些通用的接口来访问设备了。&br&&br&而Firmware,是表示运行在非“控制处理器”(指不直接运行操作系统的处理器,例如外设中的处理器,或者被用于bare metal的主处理器的其中一些核)中的程序。这些程序很多时候使用和操作系统所运行的处理器完全不同的指令集。这些程序以二进制形式存在于Linux内核的源代码树中,生成目标系统的时候,通常拷贝在/lib/firmware目录下。当driver对device进行初始化的时候,通过request_firmware()等接口,在一个用户态helper程序的帮助下,可以把指定的firmware加载到内存中,由驱动传输到指定的设备上。&br&&br&所以,总的来说,其实driver和firmware没有什么直接的关系,但firmware通常由驱动去加载。我们讨论的那个OS,一般不需要理解firmware是什么,只是把它当做数据。firmware是什么,只有使用这些数据的那个设备才知道。好比你用一个电话,电话中有一个软件,这个软件你完全不关心如何工作的,你换这个软件的时候,就可以叫这个软件是“固件”,但如果你用了一个智能手机,你要细细关系什么是上面的应用程序,Android平台,插件之类的细节内容,你可能就不叫这个东西叫“固件”了。&br&&br&这种情况在计算机领域非常常见,所以大部分Spec都自己重新定义概念。比如说,我们平时写软件,说Component,很多就是只软件的其中一个部分,但在UEFI中,Component的定义是:&br&&br&An executable image. Components defined in this specification support on elf the defined module types.&br&&br&这是一个“独立的映像”,和我们一般理解的概念就完全不同,但如果你学计算机,请了解,这是我们的惯例。
从计算机领域来说,驱动和固件从来没有过明确的定义,就好像今天我们说内存,大部分人用来表示SDRAM,但也有人把Android里的“固化的Flash/Storage"称为“内存”,你不能说这样说就错了,因为这确实是一种“内部存储”。但在Linux Kernel中,Driver和Firmwa…
不是这样,他们在乱说
不是这样,他们在乱说
来自子话题:
意义就是好比lz在1949年申请加入郭明党&br&
意义就是好比lz在1949年申请加入郭明党
刚写完答案,发现有点偏,实际上想当“匠”的话没有前途,赶紧吧。。。。。。如果想当“将”的话,从我个人角度来看,有前途。&br&//--------------------------------------------更新----------------------------------------------------//&br&趁着还没上班把该补的补一下。&br&我看到有知友提到面试硬件工程师的例子,我想这可能也算是嵌入式门槛低的一个表现吧。&br&嵌入式的门槛低,我想可以从软硬件角度来看:&br&&b&软件方面&/b&&br&浅度嵌入式(系统级嵌入式)。两种主要的表现,工控开发与消费品开发。&br&&br&关于工控开发,以工业控制计算机为例。业内称之为系统级嵌入式开发,以C语言为主要开发语言,系统底层级别的基本碰不到,工程师要做的是实现上层的应用开发。当然有人会说,C语言的开发门槛不低,精通C语言本身就是较高的门槛。但实际上,在这个领域的开发并不需要你了解编译原理,并不需要时间空间复杂度的敏感,并不需要双向循环链表、二叉树、堆、栈等数据结构的理解,并不需要快排等算法的应用,更不需要APL &a data-hash=&dcddeadcb515f393fe29575& href=&///people/dcddeadcb515f393fe29575& class=&member_mention& data-editable=&true& data-title=&@bhuztez& data-tip=&p$b$dcddeadcb515f393fe29575&&@bhuztez&/a&(正在学,逃。。) 。。。。你需要的是什么?for,while,if....else,基本可以靠他们打天下。简单来说,有点C语言基础,再稍加磨练即可上手,当然,上手和精通是两回事。我们的组的成员结构中既有C9名校的硕士,也有普通高校的本科生,甚至有从别的非研发部门转过来的同事,现在,大家都在做嵌入式,呵呵,这个门槛还高吗? &br&关于消费品开发,以android开发为例。时下最火的可算是android开发了,无论是智能硬件,智能家居等,基本脱离不了安卓开发。这个的门槛高吗?如果你想把google的安卓源码刷一遍,那肯定是低不下去吧。实施上呢,市面上的安卓培训少吗?培训一个月,0基础月入过万的承诺少吗?哪怕有水分,打个折,7,8k总归也行吧。为什么能做到这样?我在读研的时候(蛋疼的电气专业),那会没有接触过安卓,有些课程设计,老师直接叫我们在一周内写个简单的App,不也能写出来吗?这意味着什么呢?&br&&br&深度嵌入式(底层级别嵌入式开发)。操作系统包括linux和RTOS等。在这种深度嵌入式开发中,平台主要依赖于ARM。刨除掉ARM指令集和rn那几个寄存器,在很多人看来,arm和普通单片机没什么区别,无非就是配置那几个外设寄存器而已。当然,在上面架系统会稍微复杂点,但是很少需要开发linux内核,很少需要开发RTOS内核的工作。如果贵司有钱,使用Vx或者QNX这些操作系统,供应商已经直接根据你的硬件平台制作BSP给你直接用了,而你无非就是在上面开发一些应用而已,这样又回到上面的话题。我曾经接触过不知道ARM是一个公司这样的事实然后在ARM上面欣然开发的人。所以,这种看似深度嵌入式开发的门槛高吗?&br&&br&&b&硬件方面&/b&&br&硬件方面我大致把他分为硬件设计和硬件开发两个方面。&br&硬件设计,我主要只板级硬件设计,这里暂不把芯片级设计归为嵌入式领域。板级设计我们有数字设计和模拟设计。在板级硬件设计里面,确实看似门槛很高,为啥,真正设计出具有良好EMC品质的板子(更不用说几百M的N层高速板)的工程师靠的是多年的经验和不断地学习。这里面强调了两个方面,经验和学习,这两点足以使硬件设计成为高门槛。但实际上,很多公司出于资源配置和开发周期考虑,已经不再自主设计单板,更多的是设计原理图外包PCBA,这样一来已经大大地降低了硬件设计的门槛了。第二点表现是,开源硬件的兴起,以Arduino和Rasperry Pi,Arduino的门槛很低,源于他的设计初衷是给更多非电子专业出身,甚至是艺术家使用的,一套这样的开发板从原理图到PCB,bom都一应俱全,认真学的话,同样也可以以很短的时间入门,门槛还高吗?&br&&br&硬件开发,以FPGA开发为例。FPGA开发,主要在通信领域,包括在近年来的机器视觉等方向都有重要的应用方向。但是在我们常见的应用领域中,实际上在大多数环境下,FPGA都是大材小用,但却不得不用。不少工程师只是学了点皮毛就开发,不跟你讲仿真,不讲约束,直接就上,更不用讲时间和空间的关系了,呵呵。为什么能这样来呢,几个原因:第一,FPGA在工业领域的应用并不需要FPGA的真正性能,更多的是扩展和保护来出发的;第二,现在无论是X家还是A家(这个应该说是I家了吧),都集成了丰富的IP核,当然这里面也包括了许多的第三方提供的IP,这些IP的提供能够让你直接使用,不再纠结于IP本身的开发,大大减少工作量;第三,X家还是A家都已经推出了C转硬件描述语言的开发工具,在我看来这些功能可能会让不少多年深耕RTL工程师口吐鲜血。这些工具的诞生,又大大降低了硬件描述语言开发的成本。回想当年某半导体公司的研发主管面试我时,语重心长地跟我说:verilog不是英语,你每写一句脑子里就应该有一个电路。现在想起来,这种能力素养只能应用在很精专的领域。&br&&br&从软件和硬件两个方面讲述了嵌入式的门槛问题,好像把嵌入式贬的一文不值。那肯定不是我的初衷,上述论证的前提都是一个:入门。&br&曾经,我们谈论嵌入式门槛高,是因为真正的嵌入式是需要从硬件和软件两个方面去把握,硬件包括从一个器件的选型到布局布线到EMC,软件从底层的内存分配,系统调度,到算法到最上层的云。光这句话我想就已经够任何一个人付出巨大的不懈地努力了,既然如此,是否是青春饭,也应该有答案了吧。然而,入门的门槛确实不高。&br&&br&&br&&br&另外,至于软件开发是否是青春饭的问题,在知乎上已经讨论不少,感兴趣可以搜一下吧,这里不展开了。&br&&br&这里面有一个想法想跟题主和各位分享的:认清将和匠的区别,是成为一名优秀工程师的前提。门槛低可以让我们从不同的切入点介入这个领域,成为一名匠,而如何成为一名将,才是我们入门之后的主要议题。&br&共勉吧。&br&&br&//--------------------------答案更新--------------------------------//&br&热情是肯定撑不过肚子的。&br&我的观点和题主相反:嵌入式的门槛很低。&br&嵌入式不是青春饭,纯码农是青春饭。&br&稍后再补。
刚写完答案,发现有点偏,实际上想当“匠”的话没有前途,赶紧吧。。。。。。如果想当“将”的话,从我个人角度来看,有前途。//--------------------------------------------更新----------------------------------------------------//趁着还没上班把该…
来自子话题:
关于【知识储备】:&br&1.要懂汇编(具体包括:a.汇编指令代码功能。b.寄存器,内存,堆栈概念。c.CPU复位及中断过程)&br&2. 会一种程序设计语言。(写完的模拟器用 printf 就可以看功能了啊,流水灯轻松实现啊)&br&3. 最好了解一些“链接器”的知识,和“编译器”的C语言运行时上下文环境的问题。链接器要实现多个程序段的重定位。当然不会不影响,但是对C语言程序怎么就能执行的会很费解,会有心结的。(不会直接用汇编写程序嘛...NES模拟器都是汇编的,但是写个MSP430模拟器什么的就该有帮助了,这可以看IDE工具的相应的 linker user's guid 和 compiler user's guid 或相应的 help)&br&
其他的比如《编译原理》基本用不到吧,编译器手册可能会有些用处,但是和教科书的编译原理是不一样的,这里主要是关注C语言和汇编如何对应。&br&&br&
主要就是组成原理啊,程序就是一条条指令,CPU就是”取指令-&执行指令“的死循环嘛(第一条指令是复位过程决定的)。就要知道什么是指令,怎么执行就行啦。执行时涉及到什么就看什么是什么。简单的很。还有微机原理的内容理解有助于实现模拟器的一些外设(显示器,手柄什么的)仿真,对应情景就是向某个外设寄存器地址写了什么值相应模拟器应该如何模仿外设的功能。&br&&br&关于【NES模拟器实现】:&br&刚好写过一个简单的fc模拟器。&br&首先还是要懂汇编啦,add,jmp,mov的功能什么的,再有知道寄存器和内存地址,堆栈这些概念。&br&&br&然后知道复位,和其他中断的流程。&br&&br&这时你就可以根据一个程序来开始写模拟器了,无非就是看每条指令把哪个操作数,经过什么变换,放到哪里去(补充:影响哪些状态标志位),复位的位置在哪里,从哪条指令开始运行,一步步调试了。最简单的就是switch指令case指令1,指令2...6502是复杂指令集的,指令编码规律性不大(但是还是有一些的),寻找到指令具体怎么操作了就看指令的功能了。参见:&a href=&http://e-tradition.net/bytes/_instruction_set.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&6502 Instruction Set&i class=&icon-external&&&/i&&/a&。&br&&br&另外调试过程中,6502cpu有一个“全覆盖”的程序帮助调试,这个程序几乎包含了所有指令和寻址方式的组合,如果结果错误就会陷入一个死循环指示错误。搜索:Klaus Dormann 的 6502_functional_tests(&a class=& external& href=&http://2m5.de/6502_Emu/index.htm& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&2m5.de/6502_Emu/index.h&/span&&span class=&invisible&&tm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)。&br&&br&这个阶段写的 CPU 模拟器只是保证了 CPU 执行指令的正确性,一般就是通过观察执行完的指令影响的寄存器或是状态标志位和内存内容是不是按照预期变化。这种调试方式。&br&&br&CPU写好了之后,显示的问题就是有个缓冲区是放那些显示的“模式块”的,按照它的格式定义转换成一个RGB数组就可以让各种 GUI 显示了。(好吧我就做到这里 ... 按键和声音什么的没有做)。参考【相关网站】有很丰富的资料。(这里还可以利用后面提到的《VirtuaNES-debug》辅助调试)&br&&br&这部分就是实现外设的部分了,根据外设的需求在写入一些特殊地址时要做相应的功能响应。无非也就是将相关的内存内容经过一定变换,选择合适的方式表现出来(如输出字符,显示图像,输出声音之类的)。&br&&br&【更容易实现的CPU】&br&还有我给个小提示,写CPU模拟器可以从MSP430开始,因为MSP430只有27条指令,精简指令集的编码方式(指令编码规律性强),4种寻址方式,相对简单,资料也多。根据TI的官方文档基本就可以完成设计,TI文档写得很漂亮!包括数据手册,用户指南什么的。&br&&br&============================&br&继续补充一点东西:&br&&br&当初的实现大体流程(几天就可以搞定的):&br&1. 收集资料&br&&br&2. 大体计划 :&br&了解硬件结构(CPU,PPU,APU,控制器...) -& 实现CPU -& 实现PPU -& 实现控制器 -& 实现APU&br&&br&3. 初步理解 (10.9,10.10)&br&电路结构,卡带分类,CPU的最简单模式 &br&while(1)&br&{&br&
取指 -& 执行;&br&}&br&&br&3. 实现 CPU(6502兼容 无十进制运算 dec)&br&了解指令分类&br&switch case 实现基本的 指令系统(10.11)&br&继续调试完善CPU, 代码基本完成(10.12)&br&指令全覆盖测试程序测试CPU,修复bug(10.13)&br&继续完善,写PPU(10.14)能够看到PPU中数据&br&写 ppu 数据 -& RGB 的转换&br&QT编写显示界面,基本完成背景图像显示(10.15)&br&完成精灵的显示,和滚动的实现(只有X轴)(10.16)&br&&br&一定要多记笔记啊!我笔记发现没有记网站!当初有好几个那么经典的NEC资料和6502 CPU模拟器的网站的!&br&&br&【相关网站】:&br&&a href=&http://www.6502.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&6502.org: The 6502 Microprocessor Resource&i class=&icon-external&&&/i&&/a& 这个讲6502CPU模拟器设计资料的&br&&a class=& wrap external& href=&/& target=&_blank& rel=&nofollow noreferrer&&NES info, programs, and demos&i class=&icon-external&&&/i&&/a&
这个是 nesdev 有很多关于 NES 游戏机的资料。&br&&br&另外有本《小霸王游戏机的奥秘.PDF》模糊的讲了一下NES游戏机的技术,但是不太深入。但是还是挺有用的。&br&&br&再另外有个软件叫《VirtuaNES-debug》这个可以单步执行nes指令,可以调试NES游戏程序,并可以显示很多内部的数据结构,在实现过程中很有帮助的!(另外本身这个软件就是开源的)下面是软件示意图:&br&&img src=&/850a2be439ccd3dde2b8ed9_b.jpg& data-rawwidth=&1261& data-rawheight=&676& class=&origin_image zh-lightbox-thumb& width=&1261& data-original=&/850a2be439ccd3dde2b8ed9_r.jpg&&&br&&br&
我以前写的NES和430的模拟器,写着玩的,代码量也不是很大,但是有些够理解用的基本功能了。都基本上是纯C语言写的,NES的用QT做了个图形显示,Cpu部分都是C语言实现。&br&
还写了一个实现了几条指令的430CPU但是能跑流水灯了!而且是完全控制台下的流水灯!(c语言就足够了)
关于【知识储备】:1.要懂汇编(具体包括:a.汇编指令代码功能。b.寄存器,内存,堆栈概念。c.CPU复位及中断过程)2. 会一种程序设计语言。(写完的模拟器用 printf 就可以看功能了啊,流水灯轻松实现啊)3. 最好了解一些“链接器”的知识,和“编译器”的C…
做硬件投入大,周期长,一点点bug就能让整个系统变成垃圾,好不容易有了创新,国内恶心的知识产权保护只会让创新被对手抄袭,进而陷入无穷无尽的价格战,谁还愿意创新。&br&做硬件远不如互联网圈钱快,没有盖楼圈钱快,更是赶不上现在的A股,哪里会有资源投资硬件。现在和几个小伙伴在做硬件方面的创业,正为找投资焦头烂额,反观互联网行业,随便抄个app就能拿到风投,陌陌的孪生兄弟们都能组一个团了,无力吐槽。&br&不管怎样,我相信总要有人去努力让这个世界变得更好。那就让我来吧!
做硬件投入大,周期长,一点点bug就能让整个系统变成垃圾,好不容易有了创新,国内恶心的知识产权保护只会让创新被对手抄袭,进而陷入无穷无尽的价格战,谁还愿意创新。做硬件远不如互联网圈钱快,没有盖楼圈钱快,更是赶不上现在的A股,哪里会有资源投资硬…
来自子话题:
谢邀&br&同意&a class=&member_mention& data-editable=&true& data-title=&@阏男秀& data-hash=&8d9fb9a5ce8d4e9f275e& href=&///people/8d9fb9a5ce8d4e9f275e& data-tip=&p$b$8d9fb9a5ce8d4e9f275e&&@阏男秀&/a&说的,做电子、嵌入式研发,是看重经验的。在招聘网站上搜搜ARM、嵌入式之类的字眼就能发现招聘多数要求有研发经验。但学历,却没要求多高,大部分是大专或本科。&br&&br&学历或许会是你进好企业(如研究所什么的都要硕士及以上),但考研不一定就能让你深入研究。那要看你读研跟的老板是什么样的人。我毕业于一个二本学校,因为拿过设计比赛奖而得到学校推研的机会。但推的不是我希望跟的老板,所以放弃。其实读研两三年其实就是在实验室给老板打工(所以导师才被成为老板),老板有项目你帮着做,在实战中获得研发经验。&br&我之后工作的单位和一个211大学的老师合作搞项目,所以我就被外派在大学实验室里工作。在那里印证了我之前放弃推研的想法:有个研究生,跟了院长。但这个院长一心搞行政,他整天没项目可做,天天在宿舍DOTA,最后毕业除了捞个毕业证,技术一点没进步(有次跟我说,他写C最喜欢大量使用goto语句了……)。毕业论文我看了,拿来做本科毕业论文深度都不够。但人家就是毕业了,然后院长推荐留校了。&br&&br&所以,如果想从事这个行当而考研,最好找个有项目干的老板。但说实话,做自动化、电子行业的读到硕士研究生就够了,硕士毕业且在校期间做过项目或得过什么挑战杯奖那是最perfect,是最惹HR眼球的。读博的话,你要出来反而就业面窄了。博士论文讲求的深度,硕士论文是无法比拟的,而工科又恰恰不像理科那样容易做深度研究。读到博士,那基本上不是做嵌入式了,而是做控制理论什么的算法了。&br&&br&嵌入式研发没这么简单。嵌入式、电子设计不是没什么研究,而是现代自动化、电子工程领域发展越来越集成智能化了。八十年代学自动化毕业的人能对照《无线电》杂志的电路图自己焊个电视机出来。现在发展到电路都几乎被集成到芯片了。所以给人感觉做嵌入式就是跟计算机一样写点程序就完事。&br&&br&但不管是软件的裸奔或上linux的调试,还是硬件的模数电路调试,设计看起来好像没什么,但等到设计出来调试的时候。要想调试出能用的产品,能够你忙了。不说&a class=&member_mention& data-hash=&a2e12c397a4a13eae444b616d78b6e8d& href=&///people/a2e12c397a4a13eae444b616d78b6e8d& data-tip=&p$b$a2e12c397a4a13eae444b616d78b6e8d&&@汤德息&/a&提到的那些linux上莫名其妙的bug,单单bootloader or 底层驱动程序就够忙好几个月(虽然一般都有BSP,但有些规范化流程是要求研发团队自己写)。&br&如果你想做算法,有的是算法让你做,PID玩好了还有神经网络算法、鲁棒控制。嵌入式的算法基本是自控原理的。还有数字信号处理、信号噪声、傅里叶变换、小波分析神马的够你玩好几年了。(可以在招聘网站搜“DSP算法”,但这一般是招聘硕士研究生,因为本科生的《信号系统》普遍学得较浅)&br&或者来做嵌入式硬件设计把。现在工控类的产品多数还是专一的设备,不同场合的硬件设备都不同。都要重新研发设计硬件电路。有什么可做的呢?高速电路的信号完整性分析好玩不?阻抗匹配、EMC整改,绝对是每设计一个电路就是一个新思维。调CAN、TCP甚至485通信都能让你天天加班纠结半年。&br&还有,估计你没学到或是没深入学的的FPGA……&br&所以,嵌入式的世界,大着呢。
谢邀同意说的,做电子、嵌入式研发,是看重经验的。在招聘网站上搜搜ARM、嵌入式之类的字眼就能发现招聘多数要求有研发经验。但学历,却没要求多高,大部分是大专或本科。学历或许会是你进好企业(如研究所什么的都要硕士及以上),但考研不一定就能…
来自子话题:
作为linux驱动开发工程师,在遇到这个问题不能不回答一下,因为题主的迷茫无助,我曾经也&br&感同身受。&br&------&br&问题中关于嵌入式工程师和软件工程师表述的并不是很明白,所以我姑且以我的理解来回答一下。嵌入式工程师从事一些设备的开发工作;你所说的软件工程师,我的理解是从事Android/IOS 应用开发、网站前端后端开发、游戏开发...;因为我只在嵌入式领域有一些经验可供参考,所以只就嵌入式方向讨论一下,至于非嵌入式的方向如应用开发、游戏开发、BAT类似的互联网公司相关互联网行业内的开发工作就留给专业领域内的人士来回答吧。&br&------&br&嵌入式开发,分两个大的方面来介绍,1.学习嵌入式开发需要哪些知识。2.嵌入式开发的职业发展&br&&ul&&li&学习嵌入式需要哪些知识。&br&&/li&&/ul&首先什么是嵌入式?嵌入式主要是指基于微控制器开发具有专属功能的计算机系统,嵌入式设备是什么?比如手机、医疗设备、交换机、路由器、汽车电子和智能穿戴设备等都是嵌入式设备。从事嵌入式开发的工作就是作为一名工程师开发上述设备所需的程序,意味着你需要不断的与微控制器以及外围芯片、外围接口(USB、I2C、SPI、UART、SATA、PCIe等等)打交道。所以你的知识可以说都是和上面涉及到的东西相关的。&br&那到底需要哪些知识呢?&br&说到这我讲讲我自己的一些经历和体悟。我上大学学习的专业是电气工程及其自动化,我对自己的专业兴趣缺缺。正好有个机会能进实验室就去了,那时候从51单片机开始,用51单片机来模拟I2C、SPI、RS232这些协议同外部设备通信和控制一些如温度传感器之类的传感器。那时候觉得特别神奇,特别好玩,整个暑假我都是在实验室度过的。后来为智能车写程序,和团队一起参加比赛。比完赛之后觉得很迷茫,不知道到底该学习什么,跟实验室的老师聊过之后,我萌生了做Linux驱动开发的想法,于是我马上做了一个决定,去参加嵌入式的培训。培训结束之后觉得自己只懂得一点嵌入式的皮毛,心里也很虚,后来找到一份做VxWorks/Linux驱动开发的工作,算是踏上这个行当。虽然工作四年了,但是还是觉得自己所知有限,需要学习很多东西。这几年陆陆续续的学习完善自己的知识体系直到现在。所以我想我的这种从迷茫困惑到有一点头绪或许能给你带来一些参考。现在说一下学习嵌入式都需要哪些知识。这些知识的重要性在我的工作中已经被反复的印证过了,可以说满满的都是干货:&br&&ol&&li&C语言:这是基础,基础一定要扎实。&/li&&li&操作系统原理:作为计算机专业的想必你也是学过的,希望你是好好学过的。&/li&&li&计算机体系结构原理:不是让你看ARM这样体系结构手册,而是要看那些告诉你为什么这么设计的书,比如Computer Organization and Design这本书。&/li&&li&基本的经典算法和数据结构知识:这些数据结构和算法的课都有,想必你不陌生。&/li&&li&Linux 基础:能熟练使用Linux&/li&&li&Linux 系统编程:最好还是学习一下Linux下的系统编程。APUE这本书不错。&/li&&li&网络基础知识:最好能系统的学习一下计算机网络,掌握好网络相关的知识。掌握网络的知识绝对百利而无一害,只要你还端着软件工程师这碗饭。&/li&&li&数字电路:不用说这是基础&/li&&li&I2C/SPI 这些简单且基本的协议: 这个最好能自己做个小项目,自己写写程序调试一下。只看是没有用的。&/li&&li&打好基础很重要:上面说的这些知识都是基础知识。对于一个刚毕业的想从事嵌入式方向的工作的新人来说,如果能很好的掌握了上面说的基础知识就是很不错的成绩。然而很少有这样的人,大多数人都学的浅尝辄止,这部分人也包括我自己。&/li&&li&linux驱动:可以看看《linux设备驱动程序》,还是要自己动手写写。&/li&&/ol&以上说的都是以linux驱动开发为前提的基础,当然这些知识也适用于嵌入式领域其他方向,毕竟这些都是基础知识。我的看法是,在你做项目的同时能学好这些基础就很好了,基础很重要。打好这些基础,再去学习其它的相关知识也会驾轻就熟事半功倍,对以后的发展有很大的好处。我反复强调基础,希望你能认真的学习。当你学习完这些基础之后,也做过一些项目,或者也已经进入了工作岗位那时候你就可以再次审视自己的知识结构然后决定学习什么,想必那个时候你心里的困惑比现在少很多,可能新的困难是能否坚持学习下去。不过这些都是后话,看看就好。&br&&ul&&li&嵌入式开发的职业发展。&br&&/li&&/ul&&ol&&li&驱动开发工程师:比如通讯行业路由器交换机基站相关设备。主要开发操作系统+设备的驱动模块。&/li&&li&MCU开发工程师: 开发手环这类智能设备,开发家用电器的控制程序等等。往往写一些裸板程序,很少与操作系统结合起来。这类设备对动能简单且单一,对成本十分敏感,所以基本上都是运行裸板程序。&/li&&/ol&其实嵌入式领域的发展大的方向发展我觉得分为上述两个方面就可以了,能拿多少要看在什么平台履职和自己的技术水平。&br&&br&以上。&br&如有错漏,望各位指正,共同探讨。&br&&br&最后,祝题主学业有成!
作为linux驱动开发工程师,在遇到这个问题不能不回答一下,因为题主的迷茫无助,我曾经也感同身受。------问题中关于嵌入式工程师和软件工程师表述的并不是很明白,所以我姑且以我的理解来回答一下。嵌入式工程师从事一些设备的开发工作;你所说的软件工程…
来自子话题:
公交刷卡有通过移动网络实时连接服务器的刷卡机,但多数是离线刷卡机,离线刷卡需要司机交班后将数据存储卡交到公司进行数据录入。&br&&br&通过一些NFC设备来对公交卡写入余额,技术难度有一些,但不会太大。 唯一需要考虑的是后果。&br&&br&闲着没事,YY一下:&br&假如你破解什么的技能都不是事,你忙活了一宿,给公交卡充了好几百,第二天高高兴兴的拿着公交卡上了车,滴,刷上了,你看了下余额,哇,真有好几百,心里乐开了花。司机师傅不耐烦地对你说,后头走,莫堵门。&br&你一路哼着歌,下了车。&br&&br&晚上师傅把卡交到了公司,录数据的大妈把卡插到机器里,等待机器自动录入。突然系统报了错,卡号xxxxxxx的余额和系统对不上,多了好几百但没有充值记录。于是大妈也不知所措,没碰到过这档子事呀!大妈叫来了值班经理。经理一看,记下了卡号和刷卡时间,等明天问下司机。&br&第二天司机端着热干面就来了。&br&“王师傅,昨天你们车上有个卡刷的不对呀,时间是xxxxx”。&br&“我哪管这个哟,自己看监控去”。&br&经理根据时间调了监控,“好嘛,小伙子长的还阔以嘛。”&br&经理拍下了你的清晰的头像,走向了旁边的警务室……
公交刷卡有通过移动网络实时连接服务器的刷卡机,但多数是离线刷卡机,离线刷卡需要司机交班后将数据存储卡交到公司进行数据录入。通过一些NFC设备来对公交卡写入余额,技术难度有一些,但不会太大。 唯一需要考虑的是后果。闲着没事,YY一下:假如你破解什…
来自子话题:
有些人很菜,也过来答,简直是误导。有些人水平太高,答的很好但是人家依旧听不懂,得到赞确很少。学习FPGA,在不同层次的人明显有不同的答案。先说一句,说不要开发版的都是菜鸟级选手。再做个广告,大学生们可以考研来北理工雷达所,来了FPGA必然不会那么菜。&br&我把FPGA层次划分为,鸡蛋级别,菜鸟级别,老鸟级别,高手级别四类。题主是鸡蛋级别的吧!啥也不会。那些得赞高的不少都是菜鸟级别的选手。当然,我现在告诉你的如何成为一个菜鸟。当然以后有空我也会写从菜鸟变成老鸟的方法。&br&1)熟悉语法,其实你不需要什么都会,但是要记住几个经典的时序,逻辑电路的描述方式。&br&2)熟悉三个经典电路描述并仿真。仿真其实不是很重要,我开始学习压根没学那个玩意儿,因为要是只做接口那玩意儿没啥用。直接用ChipSchop抓抓数据更快。仿真是给做算法,工程相对较大的人用的。三个经典电路分别是,分频器,计数器(可做一个时钟),序列检测器。&br&这样你就基本熟悉了开发环境了。&br&3)上板卡跑一个灯,熟悉一个板卡上时钟资源使用,硬件的使用原理。&br&4)知道了FPGA学习主要不在于编程!压根没有编程这回事!!Verilog是硬件描述语言!描述!!写代码时脑子里必须有电路图!!知道FPGA主要学的是硬件和算法!!软件最多能占10%就不错了!!&br&只要你能完成这上面的东西,恭喜你进入菜鸟行列,可以在别人设计好FPGA方案的条件下完成一些模块的设计了。其实华为招聘员工,很多人FPGA水平一开始都差不多这么菜。&br&先写一下老鸟需要会什么,以后再答怎么做到。&br&1)FPGA逻辑资源,特别是时钟资源要非常熟悉。&br&2)做算法的必须熟悉sysgen的使用。说的容易了,sysgen画画图也没那么容易哦,你要熟悉使用各种滤波器,理论知识要求起点就不小。&br&3)充分理解FPGA从上而下的设计原则,能够编写中等程度的FPGA详细设计方案。&br&4)熟悉时序优化,时序收敛,区域约束等知识。并且能运用到编程之中,解决菜鸟们解决不了的“不科学”的问题。说白了就是会使用planhead,以及ISE中那些你还没接触过的功能。一般菜鸟们ISE都只会编程,默认的编译一下,然后下载,ChipSchop抓抓数看看。&br&5)能够熟悉FPGA常用的接口,不求都会编程,但是要知道他们功能是什么。比如ADC,DAC,串口,EMIF等等。并且熟悉DSP等FPGA周边常用芯片工作原理。&br&6)熟悉硬件设计,至少要知道Bank上IO规划怎么好,全局时钟,区域时钟大致怎么规划等等。&br&7)信号源,示波器,频谱仪都要熟悉使用吧!&br&等这些都熟悉了,差不多是老鸟了。&br&要成为高手,你没有十来个FPGA程序设计经验,解决过十来个中大项目核心问题,没有做过大系统还是停留在小板卡,都是不行的。&br&~~~~~~分割线~~~~~&br&发现入门没那么容易。我觉得入门必须知道FPGA是做什么的,能做什么?和ARM,DSP,X86,GPU对比有啥优势?&br&我下面简单说说,FPGA现在有三个方面:&br&1)通信高速接口设计。一般速率太高了,需要用FPGA把高速数字信号分开,然后使信号容易处理,传输,存储。3&br&2)数字信号处理。包括图像处理,雷达信号处理,医学信号处理等。优势是实时性好,用面积换速度,比CPU快的多。&br&3)SOPC。但是个人觉得这个方面不太主流。&br&基本上60%以上应用于做通信接口,也是FPGA最适合做,也是优势最大的方面。30%做信号处理。其实很多情况做信号处理也是由于一个系统中已经需要一个做接口的FPGA,不想多花钱、费事在买个DSP而已!&br&以上各个芯片各有啥优势请自己百度。&br&//再次补充说明&br&听到有人批评,其实我还是蛮高兴的。有人说我水平是一个较高的菜鸟。确实严格来讲没有错。仿真一直是我忽略的一个环节。我在这里承认自己说仿真不重要是不对的。仿真一般可以提高一个优秀的FPGA工程师的工作效率,一些低级的错误可以一下子反应出来。特别是不熟悉FPGA语法的人需要仿真。毕竟一个较大的FPGA程序需要编译几个小时。但是请大家合理的看待仿真这件事,菜鸟又要学编程又要学仿真。关键仿真正确后实际还不一定对!这样会打击信心。在有条件的基础上可以直接抓取信号看看波形,这样比较准确。一下子可以让你缩短做一个简单工程的周期。菜鸟级别的工程一般直接写出来也不怎么会错的。所以在上面我说了仿真对于菜鸟不是很重要。各自还是看每个人处在的阶段看问题吧!&br&一般从时间上来说一般1-2年能入门,就是我说的菜鸟水平没有达到老鸟级别。3-5年算是一个老鸟级别吧!能不能到高手看个人造化。我学习FPGA目前是两年左右,做过工程量大的项目2个,小项目记不清了,级别在菜鸟和老鸟之间。熟悉FPGA各个方面的工作,但不熟练。欢迎交流和高手们批评指正。
有些人很菜,也过来答,简直是误导。有些人水平太高,答的很好但是人家依旧听不懂,得到赞确很少。学习FPGA,在不同层次的人明显有不同的答案。先说一句,说不要开发版的都是菜鸟级选手。再做个广告,大学生们可以考研来北理工雷达所,来了FPGA必然不会那么…
来自子话题:
很久不答这种学习规划问题了。但是貌似这个问题总有人提问或者私信,我就来答个题,顺便做个推销。&br&首先,你所列举的大部分都不用学。C/C++都不用学,tcl,python也不用学,除非你做IC后端才学tcl,tcl极其简单,我认为都不能算是一门语言。FPGA这种东西,没什么后端,也用不上tcl。找集成电路或者FPGA的工作,只会笔试你的verilog。我工作这么久都没有用过C语言,只用verilog和perl脚本。信号完整性也不用学,那是做板子的人才应该学的,你的目标应该不是画电路板,如果你有这个打算,你首先应该学着用画板软件Altum designer,其实才是信号完整性。当然,你去面试FPGA工程师/逻辑工程师,别人问都不会问你这方面问题。&br&你应该学的有以下东西:&br&FPGA的基础知识,比如xilinx、altera的FPGA构成,宏单元的构成等,基本的xlinx/altara EDA工具操作。最直接的办法就是找实习,做项目,没有项目就去做竞赛,别的都是没用的东西。面试的时候,如果你没有项目,就没有办法证明你会这些,你说你看过书,那没有任何意义。linux你需要掌握基本的操作,makefile要能看得懂,基本的shell命令要都会,vi要灵活操作。多接触EDA工具很有好处,各种EDA工具的文档要仔细看,EDA工具的使用是IC里面很重要的一环,比如STA,你所说的STA log看不懂等等,是个大问题。因为STA面试笔试肯定会考。有的面试/笔试会问你用过哪些EDA的tool,自然会得越多越好,没用过也要能叫上名字。ucf约束要会写,IP generator要灵活运用。脚本只学perl,别的脚本都没用。perl很难学,但是非常好用。本人后续会推perl的视频教程。&br&当然,这些比起写RTL来,都不重要。如果你求职的时候,简历上没有一个超过1000行RTL code的项目,基本上你是找不到这方面工作的。&br&IC设计相关资料可以点击本人头像,获得购买信息。本人研究僧时期参加过xilinx开源硬件大赛,获得过全国三等奖,对这个项目录了一个讲解视频,可以作为很好的学习素材。
很久不答这种学习规划问题了。但是貌似这个问题总有人提问或者私信,我就来答个题,顺便做个推销。首先,你所列举的大部分都不用学。C/C++都不用学,tcl,python也不用学,除非你做IC后端才学tcl,tcl极其简单,我认为都不能算是一门语言。FPGA这种东西,没…
来自子话题:
大三微电子, 志向是从事集成电路相关工作, 很可能去华为海思, 这样的人, 问这个问题?&br&&br&你对得起自己的理想和目标么?&br&&br&STM32, Arduino这两个东东, 与集成电路芯片设计有什么关系?&br&&br&STM32是一块芯片, Arduino是一块用AVR的开发板, 为什么一个志向是从事集成电路相关工作的人,会把这两个的概念相提并论? 朋友, 你大三了呀.&br&&br&你在提问题的时候, 有用下心去想下么?有查过资料么?有自己去找过答案么?&br&&br&吐槽完毕, 我的意见: 如果你的志向和你说的一样, 两个都差不多, 没有选的必要. 你应该学FPGA,&br&而不是什么鬼STM32或者是Arduino.
大三微电子, 志向是从事集成电路相关工作, 很可能去华为海思, 这样的人, 问这个问题?你对得起自己的理想和目标么?STM32, Arduino这两个东东, 与集成电路芯片设计有什么关系?STM32是一块芯片, Arduino是一块用AVR的开发板, 为什么一个志向是从事集成电路相关…
来自子话题:
&b&1、&/b&语法层面搞懂阻塞和非阻塞语句,以及Verilog语言的时序描述方法,把自己想象成机器,尝试去编译自己写的Module。&br&&br&&b&2、&/b&然后搞明白同步和异步,最后,一定要熟练地掌握状态机的设计。&br&这是最初级也是最基本的要求。&br&&br&上面有人说语法太简单了,本人不敢苟同,Verilog语言并不简单,尤其Module之间时序不能同步,本该同相的信号输出有相位差的时候,简直能烦死人。&br&&br&&b&3、&/b&然后再进一步就是自顶向下设计,复杂时序,同步和异步时序都有的应用。&br&&br&&b&4、&/b&更进一步就是IP核的应用,会配置IP核之后你会发现新世界的大门正在被打开,这个时候FPGA真正的优势才体现出来了。&br&&br&&b&5、&/b&最后就是SOC,以上四个阶段都是在硬件底层,SOC是应用层的东西,干的和码农一个活。&br&&br&具体学习思路就是买一块好点的开发板,Xilinx和Altera的都行,Altera的仿真器要便宜一些,更适合自己学习。好点的意思是能跑SOPC的,Xilinx至少弄个Spartan6的,Altera现在不清楚了,以前我们都是用DE2学的,简单好用资源多,缺点是贵。&br&&br&程序呢,自己用书学,一步一步来:&br&&br&前两步一本书(Verilog程序设计语言之类的),&br&第三部一本书(Verilog程序设计实例之类的),&br&第四步一本书(FPGA芯片IP核详解之类的),&br&第五步一本书(FPGA芯片SOPC系统嵌入式编程之类的),&br&总共四本书。书名都是我乱打的,不知道有没有,差不多就是这个名字。&br&&br&对了,还有一本书必须要学,比如你用的XILINX的FPGA,有 XILINX软件详解 之类的书,多年前看多Altera的,叫啥名字忘记了。当然你要是会用软件的HELP文档,而且不嫌烦,没有也可以。&br&&br&&b&总之,&/b&FPGA是不该被低估的东西,它可以干市面上所有MCU和大部分CPU干的事,有些甚至比专用芯片还干的好。当然了,唯一缺点就是别要求功耗。&br&&br&祝进步飞速,学有所成。
1、语法层面搞懂阻塞和非阻塞语句,以及Verilog语言的时序描述方法,把自己想象成机器,尝试去编译自己写的Module。2、然后搞明白同步和异步,最后,一定要熟练地掌握状态机的设计。这是最初级也是最基本的要求。上面有人说语法太简单了,本人不敢苟同,Ver…
来自子话题:
学习嵌入式系统,首先应该明确什么是嵌入式系统,否则费力去学,却不知所学为何物,岂不惘然?嵌入式系统的定义很多,这也是困扰嵌入式系统学习的一个因素。笔者根据自己开发和教学过程中的理解,以及对各种嵌入式系统的应用进行总结,提出了嵌入式系统的简单定义:嵌入式系统是嵌入式计算机系统的简称,这个定义突出嵌入式计算机系统和普通计算机系统的共性。下表列出了嵌入式系统的一些典型的应用:&br&智能机器人(S D R 4,火星登陆车)&br&娱乐和消费电子(Gameboy Advance,SonyPSP)&br&网络通信产品(Smartphone)&br&军用设备(军用PDA )&br&汽车(车载导航,自动驾驶,娱乐系统)&br&智能仪器(虚拟仪器)&br&安全防护(防火,防盗)&br&环境保护(探空气球)&br&银行和商业消费(ATM)&br&以火星登陆车为例来分析一下嵌入式系统的定义。火星登陆车虽然听起来感觉在技术上有些高不可测,但是本质就是嵌入式计算机系统的应用,其核心就是一个计算机系统,而这个计算机系统的组成同传统的计算机系统在本质上没有什么差别。两者的显著不同之处就在于,用于火星登陆车的计算机系统被安装到了火星登陆车上。当然,一个计算机系统能够被安装在火星登陆车上,是需要进行很多特殊设计的。但是从本质上讲,嵌入式系统的核心概念还在计算机系统。嵌入式系统学习的重点也在计算机系统上。一方面,学习者需要牢固掌握计算机系统本身的概念,更重要的是学习嵌入系统的开发过程同传统计算机系统开发过程的差别。这里需要指出的是,很多学习者本来就没有从事过完整计算机系统的开发,高校的教学是以程序设计为中心的,计算机系统的构成,操作系统的原理,编程语言等课程都是为了能够让学生更好的使用计算机系统进行程序设计,在现有的计算平台上来设计实现各种应用,学生一般没有机会学习一个完整的计算机系统是如何构建,并亲身参与到构建的每一个过程。而对于嵌入式系统而言,从事平台开发的人就是要亲自去开发出一个完整的计算机系统,这个过程包括&p&
1. 需求分析&br&
2 硬件设计&br&
3 驱动程序&br&
4 Bootloader & BSP (板级支持包)&br&
5 操作系统的移植&br&
6 应用程序的开发&br&
7 性能检查&br&嵌入式系统教学的目的就是教会学生如何根据需求去建立满足某种特殊行业需求的嵌入式计算机系统。让学生学会如何构件硬件平台,进行硬件设计,选择能够满足应用要求的最佳的嵌入式操作系统,并完成Bootloader,BSP和驱动程序的编写,移植,调试等过程。为了满足行业需求,最终要在所建立的系统上编写调试相应的应用程序,并进行性能的测试和检查。&/p&&p&&br&你是谁,你需要学习哪些东西?&br&如果你的工作只是需要在PC 机上编写一个图片浏览程序,那么你就没有必要去了解当系统收到一个ARP请求包后应该如何回应。同样的道理,嵌入式系统的学习也是有很多方面的。就嵌入式系统的设计和实现而言,基本上需要四种不同的工作:系统设计工作,硬件设计工作,驱动程序和操作系统移植工作和应用程序设计开发工作。&br&
1.系统设计工作
&br&在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种操作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。&/p&&p&2.硬件设计工作&br&&/p&&p&系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/视频编解码芯片,电源管理芯片,总线接口电路 (USB,PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth,WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。 &/p&&p&以上这些知识,往往需要较长时间的学习和积累,需要亲自参与实践的机会。对于刚刚接触嵌入式系统硬件开发的学生来讲,一般不可能全部了解这些知识,但也不会是通通一无所知。笔者结合自己开发和教学的经验认为:首先应该选定一款主流且较为简单的嵌入式系统处理器,比如基于ARM7TDMI 内核的AT91M4B0 等嵌入式系统处理器,学习32 位RISC处理器的编程模型,指令集。高校教学中,单片计算机课程一般以8051系列单片为核心讲解,由于现代32位处理器的结构和开发方式同8位单片机有着较大的差别,学习者还是需要花一点力气来研究以下32位处理器的。以ARM处理器为例,学习者就需要理解处理器的多种工作模式,备份寄存器,RISC 指令集的特点,MMU 和虚拟地址,中断处理过程等内容。在学习指令集的过程中,最好能够每学习几条指令,就使用这几条指令在模拟器上实验以下,观察处理器执行的结果。这个过程一方面是学习者对于指令本身的学习能够取得一个比较好的效果,另外也是对开发工具本身的一种学习。接着,就可以开始学习片上资源的使用和配置方法。这时就需要一个方便使用的开发板,学习者能够通过JTAG仿真器将开发板同调试PC机相连,进行程序的下载,调试。特别是要仔细研究系统的初始化过程和中断处理的过程。在开发过程中如果遇到问题,应自己分析问题产生的原因,通过分析缩小问题可能产生的范围,最终找到问题的所在。最重要的就是要保持一种解决问题的信心,面对困难如何处理,往往能够决定最终系统是否能够调试成功。然后,学习者可以开始仔细学习处理器同存储器的连接,存储空间的配置,各种外扩器件,如网卡,AC97声卡的工作原理和使用方法。嵌入式系统硬件设计中往往需要使用可编程器件,学习者还需要一定的时间来学习使用常用的可编程器件(CP L D / F P G A),常用的有Xilinx和Altera公司的产品。进行系统硬件原理图设计,就需要使用原理图设计的EDA工具,常用的EDA 原理图设计工具主要包括Cadence公司的Capture,Protel公司的Protel99SE等。接下来就可以参照评估板的电路图,根据系统的设计要求,开始进行原理图的绘制了。在原理图绘制过程中,一定要搞清评估板电路连接的原因,对于一时没有搞清楚的问题切不可蒙混过关。例如,有些处理器的地址线是以字节位单位的,而另一些处理器的地址线则是以两个字节为单位的,当连接16位的存储器的时候,切不可想当然的把处理器的A 0 直接连接到存储器的A 0 上面。另外,学生还应具有一定的PCB板图绘制能力,因为在现阶段,很多公司还不能完全把原理图的设计工作和PCB 的绘制工作分开,往往要求硬件设计人员既能进行原理图设计又能进行板图设计。即使是PCB设计和原理图设计分开的公司,也需要原理图设计者能为PCB 的设计者对于不同的信号提出布板要求。&/p&&p& 3.驱动程序和操作系统移植工作&br&
现代嵌入式系统的开发同传统8位单片机系统的开发相比,一个显著的区别就是嵌入式操作系统的广泛使用。在拿到焊接完毕的电路板,并进行基本的测试后,就要进行驱动程序和操作系统的移植工作了。首先要进行的Bootloader的编写和移植工作。Bootloader相当于PC系统的BIOS。对于有些嵌入式操作系统,如uc/OSII没有bootloader同样可以开发调试。但是对于WindowsCE和嵌入式linux系统而言Bootloader就是必须的了。本文以Windows CE 为例,做一个简要的说明。&br&
Windows CE 系统的移植工作主要就是BSP(板级支持包)的开发过程。BSP将具体的硬件差异同操作系统的核心隔离开来,主要由Bootloaer ,OAL(OEMAbstraction Layer)和设备驱动程序三部分组成。WindowsCE系统中Bootloader叫做Eboot。Eboot被写入系统的引导Flash。系统启动时运行Eboot,完成通过网卡将调试PC 机中WindowsCE 操作系统映像下载到目标系统的SDRAM中并开始执行的功能。对于一个系统移植人员,首先需要阅读文档,了解WindowsCE系统Bootloader和BSP的基本概念和开发过程。(呵,还要做这工作啊,我还没想到(初学^_^))Windows CE的开发系统Platform Builder提供了详细的文档和例程,开发人员需要仔细的阅读文档和例程。搞清楚各个函数之间的调用关系。在开发过程中的一个重要的步骤就是打通串口,使得目标板能够通过PC机串口向调试PC 机发送数据。由于ARM系统的仿真器比较昂贵,而且操作系统的调试往往不使用JTAG调试器进行单步调试。所以能从串口观察程序的执行过程和结果对于调试就显得十分重要了。串口打通之后一个比较棘手的问题就是网卡芯片的调试。刚刚接触嵌入式系统开发的人往往没有直接在寄存器级上使用网卡芯片的经验,而网卡芯片的说明一般都较为简短,这就要求开发者学习一些以太网的基础知识,对以太网的MAC 层有一个基本的认识。另外,各种网络调试(抓包)工具的使用也能大大降低系统调试的难度。系统的OAL需要根据具体硬件的不同做出相应的修改,这个部分可参照文档进行,在调试过程中根据串口的信息分析出错的地方。要充分发挥跨文件字符串搜索工具的功能,在浩如烟海的源文件中找到出错的位置。当然,随着开发者对系统文件目录结构的熟悉和了解,错误定位的速度会不断加快。WindowsCE 的驱动程序相对而言是比较好写的。&/p&&p&4.应用程序的开发&br&嵌入式系统的应用程序开发同在PC 机上开发应用程序的区别不是很大。对于Windows CE系统而言,Microsoft已经提供了较为完善的开发工具。特别是.NET Compact work的使用,使得基于Windows CE.NETCompactwork的应用程序有了跨平台性。开发人员可以使用Windows 的C# 语言直接在PC 上进行&a href=&http://CE.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&CE.NET&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&应用程序的开发和模拟调试,也可将目标系统同PC 机相连,进行联机调试。现在有很多系统支持J2ME(JAVA的嵌入式系统版本) ,这使得JAVA 在嵌入式系统应用开发中占有较大的优势。另外,作为专业的嵌入式系统软件开发人员,还需要充分了解面向对象技术和设计模式等方面的知识,当然作为初学者可以先不深入研究这方面的内容。&/p&&p&常用嵌入式系统处理器和操作系统&br&处理器&br&常用嵌入式系统处理器主要包括ARM 处理器,Power PC 处理器,基于MIPS 内核的嵌入式处理器,软核处理器(如Altera 的Nios和Xilinx的MicroBlaze等)和DSP(数字信号处理器)等。&br&
ARM 处理器的主要特点是具有较高的性能功耗比。ARM处理器被广泛的应用在手机,PDA等领域,其中较为著名的有Intel 公司生产的基于ARM 内核的XScale系列处理器。由于所有公司生产的基于ARM内核的处理器具有相同的编程模型,在手持和电池供电的系统中,基于ARM的嵌入式系统处理器往往被首先选用。PowerPC(简称PPC)处理器具有较强的运算性能和数据吞吐能力,在网络和数据通信领域基于PPC的嵌入式系统处理器有着广泛的应用。其中Motorola公司生产的MPC860/MPC8260被大量地应用在嵌入式网络产品中。MIPS 处理器的特点表现在十分强大的处理能力上。作为高性能处理器,MIPS处理器适用于网络、企业及高级消费类电子应用,特别是在机顶盒系统中,MIPS处理器具有较高的市场占有率。随着可编程器件的规模不断扩大,使得人们能够根据需要定制处理器,并方便的将针对某种特殊应用定制的处理器方便的在可编程器件内部实现。除了处理器外,计算机系统还需要许多其他构成部分,比如在多通道媒体数据处理系统中,经常需要使用可编程器件来实现高速的数据处理功能,使用软核DSP来实现复杂的数字信号处理算法,同时还需要处理器进行事务处理,软核处理器将可编程器件,DSP同处理器结合在一起,为系统级设计提供了极大的灵活性。DSP(数字信号处理器)有别于通用处理器,集中表现在其强大的数字信号处理能力上。在DSP 内部提供了硬件乘累加器,处理器在设计上对于特殊的寻址方式做了优化,一些DSP 还支持零耗循环(Zero OverheadLoop)。为了方便嵌入式系统设计,主流DSP 一般也都提供了丰富的外设。特别值得一提的是ADI 公司的Blackfin 系列DSP和TI 公司的DM64X系列DSP,两种处理器都提供了丰富的片上外设,非常适用嵌入式系统应用。&br&
操作系统&br&
&a href=&http://WindowCE.NET/5.0& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&WindowCE.NET/5.0&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&
作为Microsoft的产品,WindowCE.NE/5.0提供了功能完备的平台开发工具Platform
Builder和应用开发工具Embedded Visual C++/Visual Studio 2003。WindowsCE由于拥有广大使用者所熟悉的windows界面,系统提供了众多驱动程序,并且有完备的文档支持。对于应用开发而言,熟悉Windows系统开发的程序员很容易转到WindowsCE 应用程序的开发。Windows CE将会是一个非常有前途的嵌入式操作系统。&br&
VxWorks&br&
VxWorks是由Windriver(风河)公司出品的嵌入式实时操作系统,大名鼎鼎的火星登陆车就是使用了VxWorks。Windriver为VxWorks提供了集成开发环境tornado。&br&
υC/OSII&br&
υC/OS是由Jean Labrosse设计编写的开放源代码的嵌入式实时操作系统,笔者最早接触的嵌入式操作系统就是它。阅读并深入理解υC/OS的源代码对于理解实时系统是大有裨益的。&br&
ARM Linux&br&
ARM linux是由Russell King和其他开发者开发移植的用于ARM 处理器的linux操作系统。ARM Linux系统在GNU GPL下发布。&/p&&p&
υCLinux&br&
υClinux 是适用于没有MMU 的嵌入式处理的LinuxOS 版本。υ Clinux 同样在GNU GPL发布。&/p&&p&
嵌入式系统开发过程中的常见问题和解决方法&br&
Bootloader如何写入Flash ?&br&初学者一般都会遇到如何将程序写入处理器的问题。对于不同的处理器,可以采用不同的方法。例如Intel的Xscale处理器可以使用Intel公司提供的JFlash工具烧写。对于具有JTAG调试工具软件的处理器,可以使用如下思路:编写一段程序,这段程序能将位于SDRAM/SRAM 固定地址中的数据写入Flash中。烧写时,首先,将这段软件下载到SDRAM 中,然后通过调试软件将要写入Flash的数据下载到SDRAM/SRAM的某个固定地址开始的缓冲区,然后通过调试器开始执行程序,将数据写入Flash。除此以外,网络上还提供了很多专用的写Flash的工具,开发者可以根据自己的需要选用。(现在明白了我在学的那个BF533为什么先下个flashProgramer.dxe先了)&br&什么是arm-elf-gcc?&br&
arm-elf-gcc是一个交叉C语言编译器。我们在PC平台下编译程序,编译器运行的处理器同生成的代码将要运行的处理器相同。但是,在PC &br&机上编译ARM程序时,编译器运行的处理器同生成的代码运行的处理器不同,这种编译器叫做交叉编译器。其中的elf是指编译器生成的目标文件格式。(其实我们平时用的单片机编译器如GCC—AVR等已是交叉编译器了,我到现在才弄清楚什么是交叉编译器)&br&走了哪条编译路径?&br&系统程序和驱动程序往往包含很多的编译选项,很多选项都是在编译时通过命令行定义的,如果想知道编译的是那一段程序可以使用如下的方法:&br&
#ifdef PLAT_AAA&br&
#error Code for Platform AAA&/p&&p&
#error Code NOT for Platform AAA&/p&&p&
#endif&/p&&p&这样在编译的时候就知道,编译的是哪一条路经了。对于支持#pragma message( “I am here”)的编译器也可使用#pragma message预编译指令。&br&我怎么知道那段代码在那个文件中?&br&系统编程中经常需要使用在多个文件中搜索字符串,在windows平台下可以使用平台提供的多文件字符串搜索工具。在linux平台下,可以使用grep来搜索字符串。Grep的搜索功能十分强大,支持正则表达式搜索,熟练使用grep对于阅读系统和驱动程序代码是很有帮助的。&br&系统是从那个文件开始运行的?&br&对于Windows CE系统,一般从WINCE420\PLATFORM\YourPlatform\KERNEL\HAL目录的某个汇编文件中。对于Linux系统版本不同会存在一定差异,以arm处理器为例,一般会在linux2.4.x\arch\arm\kernel的head-armv.S中。&br&程序执行到了那里?&br&可以在程序中插入如下代码来实现&br&
printf( “I am here %s, %d\n”,__FILE__,__LINE__);&/p&&p&代码将打出printf语句所在的文件名和行号。&/p&&p&
推荐书目&br&
Jean J.Labrosse MicroC/OS-II The Real-TimeKernel,Second Edition这本书是笔者接触嵌入式实时系统的入门书,在国内能够买到中文版。这本书较为清楚地讲述了实时系统的概念,各个组成部分的工作原理,特别是公开了实时系统内核的源代码,仔细研究定会受益匪浅。有个小的提示,对于初学者,这本书可以先不看第一章,直接从第二章看起。&/p&&p&
Abraham Silberschatz, Peter Baer Galvin,GregGagne Operating System Concepts笔者在教学过程中发现,无论是计算机还是电子工程专业都有很多学生对于操作系统的基本概念都没有搞清,很少有学生有完整的系统编程经验。Operating System Concepts这本书对操作系统的概念讲述只能用经典来形容。对于嵌入式系统有兴趣深入研究的同学,首先要把基础打好,这本书就成了必读之物了。&br&
Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 学习计算机的同学一定都知道OPERATINGSYSTEMs:Designand &br&Implementation这本书,笔者对于Tanenbaum这样的教授由衷佩服。网络协议栈是嵌入式系统中的支柱性组成部分。愿意致力于网络深层技术研究的同学,这本书将为你们建立一个坚实的网络基础。&br&
Karim Yaghmour Building Embedded Linux Systems本书详尽的介绍了嵌入式linux系统的组成,基本概念和如何去建立各个部分。全书篇幅较小,可谓短小精悍。即可以作为嵌入式linux系统的入门读物,又是开发过程各个部分的指南。&br&
Advanced RISC Machines Ltd (ARM) ARM7 TDMI DataSheet
Advanced RISC Machines Ltd (ARM) ARM920TTechnical Reference Manual学习嵌入式系统不了解当前应用最广泛的嵌入式处理器怎么行?ARM7 TDMI 的 data
sheet是学习ARM编程模型,指令集的好东西。在嵌入式系统中,MMU(内存管理单元)是很重要的部分,又是较难理解和掌握的部分。ARM920TTechnical Reference Manual 正好可以帮你讲解这方面的内容。&br&
Perter Van Der LinDen Expert C Programming嵌入式系统级编程最常用的语言还是C 。很多同学都自认为自己的C语言学的很好,那好,就看看这本书吧,找找自己和Experts差距。&/p&&p&
嵌入式开发与桌面开发既有不同,又有非常大的联系,而且十分注重实际操作能力。搞桌面开发的人在一开始接触嵌入式的时候,通常转换不过来,这主要体现在定位上。如文中所说,你是谁,你要做什么?我对硬件的了解仅限于编程领域,PCB设计一窍不通,但并不能说你不懂硬件就不能从事嵌入式开发。一个系统的开发设计方方面面,在自己感兴趣和熟悉的领域做出自己的贡献才是最主要的。&br&
1。硬件设计: 需要有硬件设计的经验,对各种嵌入式器件有很好的了解。&br&
2。系统移植:需要汇编经验,操作系统原理以及底层驱动的了解&br&
3。应用程序:需要桌面编程经验
&/p&&p& 想了解学习嵌入式的朋友欢迎来信盈达详细了解,专业嵌入式、ARM、Linux、STM32、单片机、硬件等技术提升,详情联系郭老师QQ
学习嵌入式系统,首先应该明确什么是嵌入式系统,否则费力去学,却不知所学为何物,岂不惘然?嵌入式系统的定义很多,这也是困扰嵌入式系统学习的一个因素。笔者根据自己开发和教学过程中的理解,以及对各种嵌入式系统的应用进行总结,提出了嵌入式系统的简…
孩纸啊,原谅我叫你孩子,其实也没比你大几岁。看到你说的情况,觉得很可爱,也只有刚上大学的孩纸们会这样问。&br&其实你的问题“读研三年与工作三年会有什么差距?”本身是真没啥可比性的,关键看个人,看个人呐!试想一下,如果你考了个好学校的研究生,读研期间,不仅努力加深自己专业知识上的造诣,而且在业务实践上也不断的磨练自己,那你毕业后,是没有企业或单位会拒绝人才的,前提是你真的是个人才。不然的话,即使你上到博士,还是just so so的话,你找工作还没那些特别有能力的研究生有优势呢。。。总之,看人,看你自己作为了,真正有才学到本事的人,不管是研究生还是本科,我觉得都不影响你未来的发展。&br&其次啊,孩纸啊,你才大一,好好享受大学生活好嘛。。。要注意怎么享受,当然不是堕落,你可以参加各种活动,可以谈朋友,可以各种旅行,但别忘记,你的首要任务是学习,请注意,不是说每天上课提着脑袋就去了,而是用心去学自己的专业知识,好吗?大学四年,最要警惕的就是温水煮青蛙的生活,切记。你觉得我每天上上课,看看闲书电影,逛逛街,挺好啊,可四年真的稍纵即逝,快毕业了,你才发现自己真的毫无优势,懂吗?请别到时候很后悔。&br&关于考研和工作,平衡后在做选择吧,我本科毕业于一非211-985的一本大学,今年9月就要去C9中的一所院校读研了,想着自己当初读研的原因,很简单,人的下半辈子都要为工作打拼,现在有机会的话为什么不去深造一下呢?任何人最终都要工作,但工作的人可不是都有能力读研。所以,特别是现今社会,我觉得深造很有必要。还有一个原因,可能是自己想要弥补本科时的一些缺憾吧。&br&总之,人的选择在很大程度上代表着自己的态度和追求。先好好过好你的大学生活吧,享受它,珍惜它。&br&希望说的这些,对你能有一些帮助。
孩纸啊,原谅我叫你孩子,其实也没比你大几岁。看到你说的情况,觉得很可爱,也只有刚上大学的孩纸们会这样问。其实你的问题“读研三年与工作三年会有什么差距?”本身是真没啥可比性的,关键看个人,看个人呐!试想一下,如果你考了个好学校的研究生,读研…
来知乎,参与讨论

我要回帖

更多关于 富士通单片机开发软件 的文章

 

随机推荐