译冰博客-行走在网络营销的路上

如何学习嵌入式

http://www.baidu.com/

? 如何学习嵌入式软件?嵌入式er学习经验总结

  嵌入式系统是一个非常宽泛的定义,从技术层面上可以分为硬件层、驱动层、系统层和应用层。硬件层是原理图、印刷电路板图和电路板。

  驱动层的主要工作是读写单片机寄存器,使用总线,操作传感器和其他外设。简单地说,就是编写直接操作硬件的代码。

  系统层封装前驱动程序层并创建一个接口(驱动程序接口)。同时,它添加了四个东西:进程控制、内存管理、文件系统和网络通信,然后再次封装这些东西,最后提供到应用层的接口。当然,因为嵌入式系统是特殊的设备并且具有切割的特性,所以以上五种东西并不一定都可用。

  应用层,只要涉及人机交互界面,就属于这里,其中之一就是手机开发。

  驱动程序和硬件两级制造的产品现在被称为智能硬件。

  例如,无人驾驶飞行器:

  简单地说,无人机是硬件层的驱动层,应用层可能有操作系统和人机界面。

  智能插头只是一个单片机中继手机应用。

  展开全文

  嵌入式分为广义和狭义。广义而言,嵌入式系统是片上系统,包括单片机、PSOC、NIOS、微blaze等。狭义而言,嵌入式系统是ARM9、cortex A8等特定操作系统的芯片。本文主要介绍窄嵌入式学习路径。

  这仍然是主流方法。先学会使用它,然后深入研究底层。

  常用的嵌入式操作系统包括linux、WIN CE、安卓、Vxworks、QNX、OSE等。目前,数据最多的是linux,所以以Linux为例。

  首先,安装虚拟机和Linux系统。

  普通人的电脑将安装一个视窗系统。要在窗口上运行其他系统,必须安装虚拟机。目前,主流虚拟机包括vmware、VirtualBox、hyperV等。您可以选择安装任何一个。然后去官方网站下载个人版本的Linux镜像。iso文件)并将其安装在虚拟机中。以下是主流Linux系统的官方网站链接:ubuntu、fedora、centos、debian、suse。如果你没有使用linux,推荐使用ubuntu。因为红帽收费,并改名为RHEL,所以这里不介绍。

  第二,学习使用Linux通用命令。

  在这里,我们必须改变在视窗下点击鼠标的习惯,使用命令行在linux下做事。此外,在linux下下载软件不需要在百度上下载,而是使用软件包管理工具(如apt-get、dnf、rpm等)。)内置于Linux中。如果你使用ubuntu,你必须修改软件来源(下载软件的网站),因为国外来源相对比较慢,百度有详细的说明。接下来,您必须学习最基本的命令,如ls、cd、find、grep、ps、diff、fdisk、ifconfig等。按照课本操作几次。没有深刻的理论知识。你不需要掌握所有的命令并记住所有的命令选项。你可以在使用的时候检查一下。如果你有空,你可以去ubuntu社区或linux社区。第三,学会使用Linux通用工具。

  1.编辑器(代码编写所需)。有gedit、vim、emacs、sublime等。建议学习vim。

  2.gcc和gdb。Gcc是编译器,gdb是代码调试器。

  3、makefile、autoconf、automake .这不是像VC 6.0那样的工具,只需点击鼠标为您编译即可。在Linux下,您必须使用makefile和make工具来编译代码。Autoconf和automake可以自动生成makefile。

  4、ssh、tftp .如果您在ARM开发板上有一个网络服务器,您可以使用这些工具来访问它。其中,ssh工具建议使用安全术语或移动术语。

  桑巴。如果您想使用Linux与窗口交换数据,您也可以构建samba服务器。

  6.版本控制器。有svn、cvs、git等。建议学习git。使用git,您不必手动备份代码。

  第四,学会写外壳脚本。

  在实际工作中,复杂的系统管理操作不是逐行键入命令,而是使用脚本(命令是基础)。脚本也是一种编程语言,只是一种解释性语言。与高级语言(如C/C、C#、JAVA)相比,脚本更容易学习(因为添加了语法糖)。在Linux下,有许多种外壳,如bsh、bash、csh、tcsh、ksh、zsh等。一般来说,他们学习bash,学习其他人还不算太晚,因为他们是一样的。此外,bash语法非常特殊,有许多符号(例如$#、$0、$?很难记住,但没必要记住。只是有个印象。如果你需要的话,再检查一下手册。这里,您将关注正则表达式。如果您有时间,建议您再次学习python脚本。python的语法比bash简单得多,使用范围也广得多。

  第五,学习Linux下的C语言编程。

  虽然学习bash已经可以做很多事情,但是驱动程序和内核开发仍然是用c语言进行的,因为bash在系统启动之前是无用的。此外,C语言的执行效率高于bash。网络编程的套接字通常是用C语言开发的。这里,必须掌握基本的文件操作、进程/线程控制、套接字等。推荐[0x9A8B)、[0x9A8B)、[0x9A8B)、《Linux环境C程序设计》和《UNIX环境高级编程》,也许这些教材有点难,但请不要陷入困境,暂时跳过你不理解的部分。在学习了下一阶段的理论后,看你以前不明白的东西会更容易。第六,增强理论知识。

  因为有些人假装以嵌入式硬件工程师的名义被强迫,事实上嵌入式硬件是普通硬件工程师的工作。我们在这里讨论软件的内容,而嵌入式是由软件主导的(工资差距很大)。

  1.单片机。如果你不想学习单片机,你可以学习计算机组成原理。

  2.数据结构。主要是主表和主树,其中链表将用于操作系统的调度算法。

  3.操作系统。所有这些都是关键点。只有通过深入研究,我们才能对Linux有更全面的了解。

  4.编译原则。如果你有时间,你最好多看看。如果你没有时间,你必须理解它。这有助于提高编程能力。

  5.数据库。除了基本的数据库理论,还必须掌握SQLite或甲骨文。

  6.ARM架构。本文介绍了用于移植uboot和驱动程序的ARM体系结构和指令集。如果你不做这两项任务,你可以跳过学习。

  7.计算机网络基金会。开发中使用的Tcp、udp、ssh、tftp、http和rtp将涉及网络相关知识,即套接字编程。

  8.界面应用程序。如串口、zmodem、IIC、SPI、单线、USB、HDMI、CAN、IIS、PCIE、蓝牙、陀螺仪等。

  在学习了上述理论之后,你必须再次复习linux下的C语言编程,你会学到更多。

  在接下来的阶段7、8和9中,使用开发板附带的引导加载器就足够了,暂时没有必要研究它。

  7.文件系统。

  学习操作系统原理时,文件系统已经介绍过了,不需要深入研究文件系统的具体算法,只需要知道它的特性,然后再学习使用它。例如,NFS、FAT32、NTFS、yaffs2、ext4、ZFS等。

  第八,内核剪辑。

  一般初学者,可以掌握内核裁剪(具体工作是填写几个选项)。裁剪只是从内核中移除不必要的函数,以减少代码量。这里需要做的就是熟悉内核的各种功能选项。如果裁剪仍然不能满足需求,您必须读取内核源代码并修改内核。推荐《UNIX网络编程 卷1》和《UNIX网络编程 卷2》。阅读内核源代码,并推荐windows下的源代码洞察或eclipse。

  九.推动发展。

  由于系统还没有启动,所以没有多少APIs(内核的一些APIs,如kprintk、kmalloc等)。)可用于司机。许多函数必须自己编写。其中,关键资源经常被访问,所以必须掌握旋转锁和睡眠锁。此外,如果驱动程序有问题,整个系统都会挂起,所以我们必须掌握各种调试方法,如goto语句、日志系统、KDB等。下一步是熟悉字符设备和块设备的驱动程序。推荐使用《Understanding the Linux Kernel》和[0x9A8B(不推荐使用中文版本)。十,移植引导程序。

  单片机也有引导加载器,keil C下的startup.a51,主要做一些初始化工作。然后,ARM上的引导加载器是相同的功能,它也不那么重要,所以放在后面。有vivi和uboot常用的引导加载程序。他们通常学习uboot并掌握uboot的启动过程和移植。经过之前的研究,uboot对你来说很简单。一般来说,你只需要学会使用uboot或者已经移植的uboot,你不需要深入研究它。建议查看uboot和《Linux Kernel Development》提供的帮助文档。阅读uboot源代码,并推荐windows下的源代码洞察或eclipse。

  十一、图形界面开发。

  常见的图形用户界面库包括:GTK、QT、JAVA、安卓等。如果你有一个C基础,建议你学习QT,如果你不知道C,建议你学习JAVA。在图形用户界面开发的早期阶段,没有必要使用开发板,但是QT适合在2440下运行。如果你想运行JAVA和安卓,建议你换一个开发板,考虑Exynos4412开发板。此外,您还可以使用python自己的TKinter来开发图形界面。

  因为安卓系统封装了一层基于Linux的应用编程接口,如果你是一个安卓驱动程序,你必须掌握Linux(上面的前十个阶段)。如果你只做安卓应用,你只需要结合安卓模拟器(最好是安卓手机)使用安卓工作室或eclipse,你不需要学习Linux或开发板。

  完成几个图形用户界面项目后,学习UML和设计模式,这将大大增强您的代码架构能力。

  网络开发。

  有时我们不得不在ARM板上构建一个网络服务器。在这里,我们必须学习HTML、CSS、Java、XML、Ajax、PHP等。它看起来像很多内容,但实际上并不多,因为这些语言很容易学习。初学者可以使用Adobe的Dreamweaver进行开发。开始后,一个卓越的文本将与火狐浏览器一起工作(并学习MVC模式)。此外,CGI程序必须用bash或python编写,这样底层的c语言接口才能在网页上使用。推荐《小白的博客》。

  十三.最后

  没有流程图绘制软件、文档生成工具等。(这两样东西在工作中经常用到)。从上面可以看出,嵌入式软件涉及到许多与计算机相关的知识。即使你掌握了上面提到的知识,那也只是一个小窗口,还有很多事情是做不到的。例如,二维码识别、视频采集卡等。

  嵌入式工作也分为几个岗位,即系统工程师、驱动工程师、软件工程师和用户界面工程师。

  系统工程师:熟悉操作系统的核心原理,熟悉内核源代码。主要职责是修补系统或添加新功能,例如热升级和提高系统的容错能力。一般公司不做这种开发。

  驱动工程师:熟悉各种外设的驱动开发,为内核和图形用户界面提供接口。由于许多集成电路制造商为相关芯片提供驱动,许多驱动工程师被解雇(需求减少)。

  软件工程师:熟悉各种编程语言和图形用户界面库和框架(不仅仅是检查文档,而且非常熟悉框架)。由于项目需求的频繁变化,开发效率跟不上变化,因此对软件工程师的需求大大增加。

【相关推荐】

发表如何学习嵌入式相关评论 (已有 条评论)

评论列表

    快来评论,快来抢沙发吧~