皮皮网

【智慧水利源码】【dubbo源码编译】【access源码 附件】VC嵌入式操作系统源码

2024-11-18 13:54:38 来源:cad二次开发源码

1.学好嵌入式必须要学的嵌入课程有什么
2.为什么要用嵌入式软件
3.小白看过来,新人如何入门嵌入式
4.学好嵌入式必须要学的式操课程有什么比如c

VC嵌入式操作系统源码

学好嵌入式必须要学的课程有什么

       嵌入式学习需要掌握一系列的基础课程,主要包括C语言、作系C++、统源操作系统、嵌入计算机组成原理、式操智慧水利源码Linux编程、作系单片机、统源ARM、嵌入硬件编程语言(FPGA)、式操模拟电路和数字电路。作系首先,统源C语言和C++是嵌入计算机行业的基础,建议使用Turboc和VC++6.0进行学习。式操

       操作系统方面,作系可以使用VMware Workstation在虚拟机中安装Linux系统,了解操作系统的基本原理和开发环境。《自己动手写操作系统》这本书非常适合初学者尝试。

       计算机组成原理能够帮助你理解计算机的基本组成和工作原理,这对于嵌入式学习非常重要。《UNIX/Linux编程实践教程》是学习Linux编程的必读书籍。

       单片机和ARM是嵌入式开发的核心,单片机可以控制汽车、LED等设备,而ARM是一种流行的微机架构。学习FPGA能够让你了解芯片的制造过程,模拟电路和数字电路则是硬件开发的基础。

       嵌入式开发可以分为硬件、驱动、内核和应用四个方向。如果希望向嵌入式软件方向发展,Linux+ARM是一个常见的选择。嵌入式Linux开发包括上层应用、系统开发和驱动开发。

       自学嵌入式时,可以先学习C语言和计算机组成原理,然后是模拟电路和数字电路。接下来学习汇编语言、单片机、操作系统和C++。最后学习硬件编程语言(FPGA)、ARM和Linux编程。

       嵌入式开发的学习路线包括:C语言、计算机组成原理、模拟电路和数字电路;汇编语言、单片机、操作系统和C++;硬件编程语言、ARM;嵌入式Linux上层应用、系统开发和驱动开发。

       最后,祝大家在学习嵌入式开发的道路上取得成功。

为什么要用嵌入式软件

       é—®é¢˜ä¸€ï¼šä»€ä¹ˆæ˜¯åµŒå…¥å¼è½¯ä»¶å’ŒéžåµŒå…¥å¼è½¯ä»¶ 简单的说,嵌入式软件就是基于嵌入式平台(比如ARM+Linux)的应用软件或者系统软件;而非嵌入式软件大多指基于通用处理器和操作系统平台俯软件(比如桌面应用软件)。

        问题二:嵌入式为什么要有操作系统 在8位或位嵌入式系统应用中,由于CPU资源量比较少,任务比较简单,程序员可以在应用程序中管理CPU资源,而不一定要专用的系统软件。如果嵌入式系统比较复杂并且采用位CPU时,情况就完全不同了。位CPU的资源量非常大,处理能力也非常强大,如果还是采用手工编制CPU的管理程序,面对复杂的应用,很难发挥出位CPU的处理能力,并且程序也不可靠。

        举个例子:我们平时用的电脑,有比较丰富的外设资源,如果不使用操作系统,你自己用开发工具从底层开始写程序,搞个一年半载的,或许也可以让电脑跑起来,在显示器上搞个类似的windows界面。然而,如此的裸程序根本无法让PC机发挥出强大的处理能力,要想在已有的程序上加个应用功能,必须要熟悉其余程序的流程,或许还要去熟悉硬件知识,看硬件的datasheet。如果想移植到另外一台配置不同的电脑上,估计大部分程序都得推倒重来!

        从我目前的认知水平来看,我觉得在嵌入式上使用操作系统有两个方面的好处:

        1、操作系统的一个强项就是它可以使应用程序编码在很大程度上与目标板的硬件和结构无关。使程序员可以将尽可能多的精力放在应用程序本身,而不不必去关心系统资源的管理。

        2、使系统开发变得简单,缩短开发周期。使应用系统更加健壮、高效、可靠。

        当然,对于很简单的单片机应用,大可不必去跑操作系统。操作系统虽然听起来很好,很强大,但不论什么东西都往上移植的话就显得很傻、很天真了。

        ~~~~~~~~~~~~~~~~

        ps:

        针对嵌入式的操作系统有很多种,还有上面的操作系统,如 *** all_rtos,uCOS-II,还有针对较高层次应用的clinux,linux,wince等等!~~~~

        问题三:嵌入式软件系统中是否一定要有操作系统,为什么? 首先你得明白操作系统式干吗的

        操作系统就是让一个cpu处理多个不同的任务

        没有操作系统的时候呢,只能处理一个任务,该处理其他任务时怎么办呢

        1,轮询:在处理主任务的时候不断的查询是不是该处理其他的任务的,如果是就去处理其他任务,处理完了以后呢就马上回到主任务上

        2,前后台:处理主任务的时候设置了中断,中断可根据外部情况触发,打断主任务,去处理中断任务,中断任务处理完了又回到主任务

        而有操作系统的时候呢就能同时处理很多任务,

        只有一个cpu为什么能处理很多事情呢,操作系统把cpu的时间分割,每一小段时间执行一个任务的一部分(这一小段时间很短,一般在0.秒以下),然后切换到下个任务上,不断的循环。由于切换时间很短,处理速度又很快,这样在人看来就是好像同时处理了很多任务一样

        所以用不用操作系统要根据你的应用情况

        问题四:为什么要学习嵌入式技术 之所以学习嵌入式主要还是因为嵌入式的发展前景还是不错的,主要有以下几点:

        一:嵌入式软件开发可谓是软件项目开发的掌舵者,一名优秀的嵌入式软件开发应当具有较强的逻辑思维能力,对于技术的发展有敏锐的嗅觉。

        二:嵌入式软件开发虽然要求技术全面,但无须偏执于门门技术都精通,任何嵌入式软件开发都有自己的技术特长和偏向,对于自己手中的技术,嵌入式软件开发可有精通-掌握-熟悉-了解之分,根据工作需要和职业发展的具体情况来划分。

        三:由于IT技术在日常生活中各个方面的全面发展促进了各个软件开发方向的发展,嵌入式软件开发很多都享受地位和薪水的双高待遇。

        问题五:嵌入式和软件工程哪个发展方向更好 不要被我楼下的误导了,“嵌入式学好了薪水也比软工高”这些都是P话,说到钱,即时你技术再牛如果不会赚钱也就是个穷人,很多不会技术的一样在富豪榜,一样家财万贯。说以用钱来说什么嵌入式与软件工程的区别就是狗P,那微软的人大多都是搞软件的,看看外面有多少搞嵌入式高工的待遇能超过微软的这些高工待遇?你拿国内的什么嵌入式高工待遇就更没法和人家比。这就是地方不同,方向、重点不同造成的待遇各有不同。如果更好是值金钱方面,建议不要选择搞技术,因为这会消磨很多时间,甚至浪费很多赚钱的机会与时间。如果从技术追求方面,那什么技术都要学的,那样没学都是损失,甚至这些只是一些小分类,还有更多的东西值得去弄。

        问题六:嵌入式系统与软件工程哪个好 目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。

        近几年嵌入式软件行业迅猛发展,嵌入式产品渗入各个行业,像常见到的手机、PDA、机顶盒、高清电视(HDTV)、路由器、汽车电子、数码相机、医疗仪器、航天航空设备等等都是典型的嵌入式系统,嵌入式开发已经成为当前最热门最有发展前途的行业之一。业内人士认为,目前嵌入式行业至少存在-万的人才缺口,仅成都市场嵌入式软件开发人员的需求就已经超过了4-6万人,其中嵌入式应用软件需求占%,而且还在持续增加,这主要有两方面的原因:一是与目前我们高校的专业设置有关,我国高校的计算机教育普遍很少涉及嵌入式软件的开发,因此企业很难招聘到马上可以投入嵌入式软件开发的实战型人才;二是嵌入式领域门槛相对较高,知识要求比较全面,而且需要一定的实验环境(开发板和工具软件)和有经验的人进行指导。目前在北京,一个成熟的嵌入式软件工程师平均月薪在元左右。我想要这样的就业机会。现在嵌入式确实很热门,即丁是在现在不是很景气的经济环境下,这类岗位依然很紧缺,企业找不到合适的人才。价格和价值成正比,所以我有个同学现在去了一个叫东方赛富的参加嵌入式培训学习,听说在北京口碑是最好的,现在学完出来,找了个5.5K做底层驱动开发的工作,很令人羡慕。。。

        嵌入式行业分工作类型,嵌入式开发,测试,技术支持,业务等。技术支持最轻松。开发最累压力大。

        问题七:嵌入式软件开发好还是硬件开发好 硬件相对比较死板固定,但软件特别是系统架构的设计就很能锻炼

        人的脑力。巨立安技术一直认为做软件更能体现人脑的价值。

        不过对工作,尤其是嵌入式这个方向的开发来说,也许最好的策略

        就是坚持 linux 内核里面多任务调度时所采用的 “完全公平的调度(C

        FS)”哲学。任何一个进程,只要它最需要cpu、或者已得到cpu时间

        相对于其他进程最少,那调度器就优先调度cpu给他。

        软件硬件的学习也是一样,什么时候哪方面需要你花时间多一些、

        或者你自己不擅长哪一方面,那就坚持往那方面发展用劲。如此,

        到最后,你就会发现已然成为一个嵌入式乃至计算机系统的专家。

        问题八:为什么嵌入式系统开发需要软件硬件综合开发 做什么不是软硬结合的 - -。

        打个比方,嵌入式相当于自己配装一台计算机,系统什么的当然要自己配置。

        问题九:嵌入式软件开发与软件开发有什么不同 我正好是做嵌入式的。嵌入式主要是处理软硬结合部分,主要是基于linux上C开发,要求懂一定的硬件知识,能够看懂原理图,知道常用的通信接口,I2C,SPI等等,出问题还需要调时序。基于某款芯片开发产品时,要看数据手册,了解地址映射,地址划分,知道寄存器功能,定义好各种功能接口。要移植bootloader,内核,制作文件系统,编写自家设备驱动等等,汇编也需要有一定了解。入门不易,精通很难。

        问题十:嵌入式软件发展趋势有哪些 1.嵌入式开发是一项系统工程,因此要求嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,同时还需要提供强大的硬件开发工具和软件包支持。目前很多厂商已经充分考虑到这一点,在主推系统的同时,将开发环境也作为重点推广。比如三星在推广Arm7,Arm9芯片的同时还提供开发板和版及支持包(BSP),而WindowCE在主推系统时也提供Embedded VC++作为开发工具,还有Vxworks的Tonado开发环境,DeltaOS的Limda编译环境等等都是这一趋势的典型体现。当然,这也是市场竞争的结果。

        2.网络化、信息化的要求随着因特网技术的成熟、带宽的提高日益提高,使得以往单一功能的设备如电话、手机、冰箱、微波炉等功能不再单一,结构更加复杂。这就要求芯片设计厂商在芯片上集成更多的功能,为了满足应用功能的升级,设计师们一方面采用更强大的嵌入式处理器如位、位RISC芯片或信号处理器DSP增强处理能力,同时增加功能接口,如USB,扩展总线类型,如CAN BUS,加强对多媒体、图形等的处理,逐步实施片上系统(SOC)的概念。软件方面采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。如HP

        3.网络互联成为必然趋势。未来的嵌入式设备为了适应网络发展的要求,必然要求硬件上提供各种网络通信接口。传统的单片机对于网络支持不足,而新一代的嵌入式处理器已经开始内嵌网络接口,除了支持TCP/IP协议,还有的支持IEEE、USB、CAN、Bluetooth或IrDA通信接口中的一种或者几种,同时也需要提供相应的通信组网协议软件和物理层驱动软件。软件方面系统系统内核支持网络模块,甚至可以在设备上嵌入Web浏览器,真正实现随时随地用各种设备上网。

        4.精简系统内核、算法,降低功耗和软硬件成本。未来的嵌入式产品是软硬件紧密结合的设备,为了减低功耗和成本,需要设计者尽量精简系统内核,只保留和系统功能紧密相关的软硬件,利用最低的资源实现最适当的功能,这就要求设计者选用最佳的编程模型和不断改进算法,优化编译器性能。因此,既要软件人员有丰富的硬件知识,又需要发展先进嵌入式软件技术,如Java、Web和WAP等。

        5.提供友好的多媒体人机界面   嵌入式设备能与用户亲密接触,最重要的因素就是它能提供非常友好的用户界面。图像界面,灵活的控制方式,使得人们感觉嵌入式设备就象是一个熟悉的老朋友。这方面的要求使得嵌入式软件设计者要在图形界面,多媒体技术上痛下苦功。手写文字输入、语音拨号上网、收发电子邮件以及彩色图形、图像都会使使用者获得自由的感受。目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,但一般的嵌入式设备距离这个要求还有很长的路要走。

        6、对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。

        7、在广播电视领域,美国已开始由模拟电视向数字电视转变,欧洲的DVB(数字电视广播)技术已在全球大多数国家推广。数字音频广播(DAB)也已进入商品化试播阶段。而软件、集成电路和新型元器件在产业发展中的作用日益重要。所有上述产品中,都离不开嵌入式系统技术。象前途无可计量的维纳斯计划生产机顶盒,核心技术就是采用位以上芯片级的嵌入式技术。

小白看过来,新人如何入门嵌入式

       作为一个新人,怎样学习嵌入式Linux

       原文链接:网页链接

       作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。dubbo源码编译

       在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。

       回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。如果你是想做应用开发,那么你去把C语言、数据结构、JAVA什么的学好吧。嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。但是基础还是C或JAVA,在此基础上去熟悉它们的接口。你学过VC的话,也是要花时间去了解那些类、控件的。

       如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用? 

       我只能说凭兴趣,并且驱动和应用并不是截然分开的

       我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的access源码 附件休眠唤醒调度等概念。 想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂 

       做应用门槛低,特别是现在的ANDROID,纯JAVA。做应用的发展路径个人认为就是业务纯熟。比如在通信行业、IPTV行业、手机行业,你了解行业的需求。所以,当领导的人,多是做应用的。

       做驱动,其实我不想称为“做驱动”,而是想称为“做底层系统”,做好了这是通杀各行业。我工作几年,做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。他们的业务跟我没关系。当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。 做底层的发展方向,个人认为是技术专家。 

       其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。有了业务经验,你再了解一下底层,很快就可以组成一个团队。 

       回到怎么学的问题上。嵌入式Linux底层系统包含哪些东西?不要急,举一个例子你就知道了。

       电脑一开机,那些界面是谁显示的?是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。

       启动windows的目的是什么?当然是上网聊天什么的了。这些上网、聊天工具在哪?

       在C盘、D盘上。ogre源码分析所以, windows要先识别出C盘、D盘。在Linux下我们称为根文件系统。

       windows能识别出C盘、D盘,那么肯定能读写硬盘才行。这涉及的东西称为驱动程序。当然不仅仅是硬盘,还有网卡、USB等等。嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。

       先说到这里吧,嵌入式LINUX里含有bootloader, 内核, 驱动程序、根文件系统这4大块。

       一、bootloader:

       它就是一个稍微复杂的裸板程序。但是要把这裸板程序看懂写好一点都不容易。Windows下好用的工具弱化了我们的编程能力。

       很多人一玩嵌入式就用ADS、KEIL。你能回答这几个问题吗?

       1. 一上电,CPU从哪里取指令执行?

       答:一般从Flash上指令。

       2. 但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?

       答:全局变量应该在内存里

       3. 那么谁把全局变量放到内存里去?

       答:长期用ADS、KEIL的朋友,你能回答吗?这需要"重定位"。在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了。你可曾去阅读过?

       4. 内存那么大,我怎么知道把"原来存在Flash上的内容"读到内存的"哪个地址去"?

       答:这个地址用"链接脚本"决定,在ADS里有scatter文件,KEIL里也有类似的文件。但是,你去研究过吗?

       5. 你说重定位是把程序从Flash复制到内存,那么这个程序可以读Flash啊?

       答:是的,要能操作Flash。当然不仅仅是这些,还有设置时钟让系统运行得更快等等。

       自问自答到这里吧,bootloader这一个裸板程序,其实有3部分要点:

       对硬件的操作

       对ARM体系处理器的了解

       程序的基本概念:重定位、栈、代码段数据段BSS段什么的。

       对硬件的操作,需要看原理图、芯片手册。这需要一定的硬件知识,不求你能设计硬件,但是至少能看懂; 不求能看懂模拟电路,但是要能看懂数字电路。这方面的能力我是在学校里学到的,微机原理、apache commons 源码数字电路这2本书(书名忘了)就足够了。但是我怀疑你有无耐心把这2本书看完。我不知道现在有没有更快捷的书。想速成的话,就先放掉这块吧,不懂就问GOOGLE、发贴。

       另外,芯片手册是肯定要读的,别去找中文的,就看英文的。开始是非常痛苦,以后就会发现那些语法、词汇一旦熟悉后,读任何芯片手册都很容易。对ARM体系处理器的了解, 看杜春蕾的<ARM体系架构与编程>吧,里面讲有汇编指令,有异常模式、MMU等。也就这3块内容需要你了解。

       程序的基本概念,王道当然是去看编译原理了。可惜,这类书绝对是天书级别的。劝你若非超级天才还是别去看了。就看我写的<嵌入式Linux应用开发完全手册>和第1期视频吧,别担心,不用花钱。照着视频把硬件相关的实验做了,这些概念就清楚了。我还没有

       发现第2套讲这些概念的书或视频。

       对于bootloader,我学习时是先看了<ARM体系架构与编程>,然后自己写程序把各个硬件的实验都做了一遍,比如GPIO、时钟、SDRAM、UART、NAND。把它们都弄清楚了,组台在一起就很容易看懂u-boot了

       总结一下,看懂硬件原理图、看芯片手册,这需要你自己去找资料。剩下的,就按<嵌入式Linux应用开发完全手册>和第1期视频的章节目录去学习吧。

二、内核:

       想速成的人,先跨过内核的学习,直接学习怎么写驱动。

       想成为高手,内核必须深刻了解。注意,我说的是了解,我没奢望去写出一个内核。

       要对里面的调度机制、内存管理机制、文件管理机制等等有所了解。

       推荐两本书:

       1. 通读<linux内核完全注释>,请看薄的那本(浮燥的社会讲求速度, 呵), 

       2. 选读<Linux内核情景分析>, 想了解哪一块就读哪一节

三、驱动:

       驱动包含两部分:硬件本身的操作、驱动程序的框架。

       又是硬件,还是要看得懂原理图、读得懂芯片手册,多练吧。

       说到驱动框架,有一些书介绍一下。LDD3,即<Linux设备驱动>,老外写的那本,里面介绍了不少概念,值得一读。但是,它的作用也就限于介绍概念了。我基本上是入门之前用它来熟悉一下概念,入门后就扔掉了。

       驱动方面比较全的介绍,应该是宋宝华的<linux设备驱动开发详解>了,老实说我只看过目录,有不少人说好,这里推荐一下。要想深入了解某一块,<Linux内核情景分析>绝对是超5星级推荐。你别指望把它读完,多页,上下两册呢。我是某一块不清楚时,就去翻一下它。任何一部分,这书都可以讲上2、3百页,非常详细。并且是以某个目标来带你分析内核源码。它以linux 2.4为例,但是原理相通,同样适用于其它版本的linux。

       还有没有其他介绍?呵呵,当然有了,韦东山Linux视频第2期。<嵌入式Linux应用开发完全手册>里对驱动讲得不多,不够深入。于是我录制了这期视频。不仅仅教你怎么写怎么改驱动,还教你为什么这样写这样改驱动。

       每一个驱动都是现场编写: 

       用绘图板画图讲解──相当于学校里老师在黑板上画图讲解,很直观绝对不是对着PPT念。

       用source insight当场写程序,从第1行开始写,每一课都是这样。我讲了多个驱动,就写了多个程序。

       写完就编译、测试。

       很全面,字符设备驱动、块设备、网卡驱动3大类齐全,硬件介绍、驱动框架分析、测试3大类齐全。

       培训机构里教的内容,远不及这期视频丰富。我在多个培训机构讲过课,从没看到哪个老师敢每一课都当场讲解当场编写代码,当场测试,除我之外!也没看到哪个培训机构讲完这些内容──因为时间不够,讲完起码要一个月,但是这部分基本只有2周授课时间。

       把你手上的开发板所涉及的硬件,都去尝试写一个驱动吧。有问题就先"痛苦地思考",思考的过程中你会把很多不相关的知识串联起来,最终贯通。

四、根文件系统:

       大家有没有想过这2个问题:

       1. 对于Linux做出来的产品,有些用作监控、有些做手机、有些做平板。那么内核启动后,挂载根文件系统后,应该启动哪一个应用程序呢?

       答:内核不知道也不管应该启动哪一个用户程序。它只启动init这一个应用程序,它对应/sbin/init。显然,这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、手册界面、平板界面等等)这个问题提示我们,文件系统的内容是有一些约定的,比如要有/sbin/init,要有配置文件

       2. 你写的hello,world程序,有没有想过里面用到的printf是谁实现的?

       答:这个函数不是你实现的,是库函数实现的。它运行时,得找到库。这个问题提示我们,文件系统里还要有库。

       简单的自问自答到这里,要想深入了解,可以看一下busybox的init.c,就可以知道init进程做的事情了。当然,也可以看<嵌入式Linux应用开发完全手册>里构建根文件系统那章。

       说一下我的学习经历吧。

       我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。PCB的设计是在实验室里自学的,只设计过2层板,现在忘记得差不多了。但是保留了看原理图、看芯片手册的能力。

       选修了软件学位,对软件设计挺感兴趣,但是也只是学了C语言、数据库而已。凭着兴趣做了不少竞赛题。没能力去参加竞赛,但是把C语言练得很扎实。

       在实验室、在第1家公司,就是设计些简单的PCI卡,写一下windows的驱动程序

       在第2家公司,用单片机做车载电话,开始走上纯软件的道路。

       开始感到单片机的不足,辞职半年闭门学Linux,从red hat怎么操作开始。步骤就是先看<ARM体系架构与编程>,再自己写裸板程序操作硬件,接着到分析u-boot。同时看<linux内核完全注释>,对LINUX框架有所了解。在写裸板时,建议各位加强对中断的理解,内核就是用中断来完成各种功能的。

       分析完u-boot,就开始进行简单的驱动编程了,这时候,能力还很弱。

       开始去中兴上班,工作2年,编写各类驱动、解决各类问题(驱动问题、帮助定位应用问题),能力得到煅炼。

总结一下:

       1. 硬件方面的书: 微机原理、数字电路,高校里的教材。毕业多年,忘名了。

       2. Linux方面的书:

       <ARM体系架构与编程>

       <嵌入式Linux应用开发完全手册>

       <Linux设备驱动>,老外写的那本

       <linux设备驱动开发详解>

       <linux内核完全注释>

       <Linux内核情景分析>

3. 视频:

       韦东山Linux视频第1期(基于S3C录制): ARM实验,u-boot,文件系统,初级驱动

       韦东山Linux视频第1期(基于S3C录制): 裸板程序

       韦东山Linux视频第2期: 高级驱动

       韦东山Linux视频第3期:项目实战

       韦东山Linux视频第4期:Android驱动

       视频信息请看网页链接

       ————————————————

       版权声明:本文为博主「韦东山」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

       原文链接:/thisway_diy/article/details/

学好嵌入式必须要学的课程有什么比如c

       学好嵌入式必须要学的课程有什么?比如c?

       感请。

       这个问题相信是困扰所有嵌入式初学者的难题,

       下面课内容是嵌入式学习必学的: C语言; C++;操作系统;计算机组成原理; linux编程; 单片机; arm;硬件编程语言(FPGA);模拟电路&数字电路。

       1、cc++语言,这是计算机行业的必修课,必须找扎实实学好,可以安装 turbo c编译器为开发环境,联系C语言编程; 安装vc++6.0学习C++编程。

       2、操作系统,先在电脑上安装一个vmware work station,然后在vmware work station里安装一个linux(redhat 企业版)虚拟机。学习一下操作系统的基本原理,熟悉linux环境下的开发环境,然后你就可以照着《自己动手写操作系统》写个操作系统试试。

       3、计算机组成原理,熟悉计算机的基本原理,看看一个计算机的基本组成及软件在里面是如何跑的。

       4、《unix/linux编程实践教程》可以说是linux编程的必修课,很不错的一本书,初学嵌入式的朋友可以看看。

       5、单片机,其实就是一台电脑,像现在的汽车控制、led控制、屏幕亮光程度控制,它都可以实现,自己买块开发板弄一下,你能学到很多的别人学不到的。

       6、arm,现在流行的微机,说白了就是位的单片机,还可以跑操作系统哦,自己想办法移植一个操作系统上去吧

       7、硬件编程语言(FPGA),芯片到底是怎么做成的,学习这门课,你就知道了

       8、模拟电路&数字电路,硬件的基础,如果可以的话,学习下protel ,自己做个硬件pcb板试试。

       计算机这行都是偏向于实践的课程,所以要注重动手能力,

       学习嵌入式这基本课程的时候,你可以按照这样的顺序来学习:

       1:C语言、计算机组成原理、模拟电路&数字电路

       2:汇编语言、单片机、操作系统、C++

       3:硬件编程语言、arm

       嵌入式开发大抵分四个方向,硬件、驱动、内核、应用,如果是希望向嵌入式软件方向发展的话,目前常见的是

       嵌入式Linux+ARM方向,关于这个方向,大概分3个阶段:

       1、嵌入式linux上层应用,包括QT的GUI开发

       2、嵌入式linux系统开发

       3、嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等 Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式。

       自学的话你可以尝试以下路线:

       (1) C语言是所有编程语言中的强者,单片机、DSP、类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握。 推荐书籍:谭浩强的很不错,《The C Programming Language》 这本经典的教材是老外写的,也有中译版本。

       (2) 操作系统原理,是必需的,如果你是计算机专业毕业那也就无所谓了,如果是非计算机专业的就必须找一本比较浅显的计算机原理书籍看一看,把啥叫“进程”“线程”“系统调度”等等基本问题搞清楚。

       (3) Linux操作系统就是用C语言编写的,所以你也应该先学习下Linux方面的编程,只有你会应用了,才能近一步去了解其内核的精髓。 推荐书籍:《UNIX环境高级编程》(第2版)

       (4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是起码的要求是能够看懂arm汇编。

       (5) 系统移植的时候,就需要你从下层的bootloader开始,然后内核移植,文件系统移植等。而移植这部分对硬件的依赖是非常大的,其配置步骤也相对复杂,也没有太多详细资料。

       (6) 驱动开发 linux驱动程序设计既是个极富有挑战性的领域,又是一个博大精深的内容。 linux驱动程序设计本质是属于linux内核编程范畴的,因而是对linux内核和内核编程是有要求的。在学习前你要想了解linux内核的组成,因为每一部分要详细研究的话足够可以扩展成一本厚书。

       给大家把一个嵌入式开发学习大方面的学习框架搭出来了

       最后呢祝大家能够在学习的路上马到成功。