gzyueqian
13352868059

西安嵌入式培训机构教你如何在嵌入式软件开发入门

更新时间: 2018-10-16 17:04:19来源: 西安嵌入式培训浏览量:4293

    本篇致力于列出初级嵌入式软件工程师工作中用到的技术和它们的学习路线,希望给想要走嵌入式软件方向的同学一些指引。
    嵌入式系统的定义
    以应用为中心,以计算机技术为基础,软硬件可裁剪,适用应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

    例如,微波炉是专用于加热食物的产品,电视是专用于闭路电视播放的产品,手机原本是专用于通信的产品,现如今电视也可以播放网路视频,手机也可以用于看视频、打游戏了,这都得益于嵌入式技术的蓬勃发展。


    宏观上的嵌入式包含所有的带有控制器的电子产品,其都满足“嵌入受控器件内部”的条件。
    所涉及技能
    * 必备技能:
    计算机组成原理:了解基本的计算机组成原理。
    C语言基础:C语言的基础语法。
    电路基础:对于初级工程师要能看得懂简单的电路原理图,掌握万用表、示波器的使用,单片机软件开发岗位可能要求设计电路,会使用Altium Designer等软件绘PCB板。
    单片机:51单片机,掌握通过直接操作芯片寄存器操作外围器件(LED、红外、电机等),掌握UART、I2C、 SPI 等通信协议。
    Linux基础:除去单片机开发工程师的工作,现在大部分嵌入式设备都是使用的Linux系统。需要熟炼使用Linux系统,掌握常用的命令。Linux C:掌握使用C语言操作Linux文件系统、网络开发、多线程多进程开发。这时可以找到纯Linux软件的工作,如服务器开发、内容分发系统等,这类工作要求熟练掌握网络开发和并发编程。
    至少一门语言:C++/JAVA,理解和使用基本的面向对象开发,后面可能遇到的QT图形开发基于C++,Android开发基于JAVA。
    * 其它:
    Linux 其它:系统移植、驱动开发等。
    算法,算法在程序实现中占据重要的地位,大公司对于算法的要求较高,
    数据库,当操作的数据量较大,便会使用数据库进行管理,需要了解常用的SQL语句,掌握基于MySQL、SQLite等数据库的开发。
    零、零基础
    如果你现在是零基础,也就是高中生或者其它专业想要转行的,有一些话写在前面。
    前面已经讲过了嵌入式是什么,以及举例,所以你以后从事的可能就是手机系统、电视系统、机器人控制、汽车电子系统的开发,你要仔细的评估你是不是想要从事这样的工作,是不是足够的兴趣,对于学习,尤其是自学来说,兴趣我觉得是重要的。
    软件行业并不是一个能够速成的行业,都需要大量的代码练习和思考,且除了嵌入式,还有其它很多其它的可以学习,例如JAVA Web,PHP Web,网页前端,UI,安卓/IOS开发,C#软件开发,Unity 3D图形开发,软件测试,等等。这些门类每个都有自己的学习路线,并不在本篇的范围之中。
    在自学中,有几个技能点使用的比较多,
    1、学会搜索
    在学习中遇到问题,大都可以通过搜索得到,大多数情况下,你并不是个遇到这个问题的人。经常有人软件安装过出了问题就来问我,我就让他把出现问题的弹框里面的字去百度。这经常是一个有效的办法。包括软件编译的错误,如何更换软件源,某个命令如何使用呀,这些都可以搜索得到。
    但搜索并不只是有百度,如果能会翻墙的话,就用谷歌,如果不会,就去学(大多数初学者的问题,百度是足够了的,只是不怎么好用而已)。搜索某个商品的信息就用淘宝,搜索期刊、专利都有专门的网站。
    2、练习
    计算机科学是实践的科学,如果你没有写一行代码,只是看书,是学不会的。而且,练习会在巩固知识的同时让自己获得成就感会增强学习的兴趣。在学习的每个阶段,你都需要练习,甚至到了工作之后,你仍然在不断的训练你的编程技巧。
    一、C语言环境
    与汇编、JAVA、C++等语言相比,C语言具有高效、易理解、可移植、能直接访问硬件等优点,所以嵌入式系统的编写语言主要是C语言。
    学习C语言,现在的大学一般还是用的Visual C++ 6.0,但是已经过时了(Windows下的推荐使用Code::Blocks),我的建议是在开始就使用Linux+GCC作为编译工具进行开发。有几点好处:
    VC是上个世纪就淘汰的工具,对C标准的支持还停留在C89上,这是1989年确立的C标准,而gcc工具是一直与时俱进的,支持的C11标准;
    gcc工具是嵌入式开发的标配,在个人电脑开发嵌入式系统是需要交叉编译的,目前支持的就是gcc工具;
    早点儿开始熟悉Linux系统的操作,常用的个人电脑是Windows的可视化界面,但在Linux上大部分采用命令行的方式操作电脑,早点接触和掌握Linux的操作是有益于我们后面的学习的;
    使用gcc进行交叉编译是嵌入式开发的基础,迟早需要掌握。
    具体操作:
    步,安装Linux虚拟机,安装 VMware 软件,下载 Ubuntu 镜像安装好Linux虚拟机就安装好了。
    第二步,使用gcc编写程序,在Ubuntu中安装好gcc,一般Ubuntu会自带gcc,使用
    gcc --version
    测试,如果提示没有安装则使用命令
    sudo apt-get update
    sudo apt-get install gcc g++
    安装,apt-get 是Ubuntu上的安装包管理软件,update 命令用于更新软件包信息,install 命令用于安装软件,gcc 用于编译 C 文件,g++ 用于编译 C++ 文件。
    先熟悉Linux操作(常用的概率和基本命令)
    软件编写可以直接使用Linux 的软件编辑工具vi 或者vim(去熟悉怎么安装)。但是推荐使用文件共享,这样我们可以使用Windows下的带有图形界面的编辑器来写软件。
    实现共享有两种方式:1、推荐使用 samba 软件和虚拟机共享;2、也可以直接在VMware中开启Windows共享文件(samba配置是在Linux环境下的,比较麻烦;共享在VMware软件设置就可以了,较方便)。这两种方式一个是Linux共享给Windows,文件存在Linux,另一个则相反,但都能使我们在Windows上编写代码而使用gcc编译和运行。
    第三步,编译运行,假设我们已经编辑好了helloworld.c,我们便能使用gcc来编译了,
    gcc helloworld.c
    便会在当前目录下产生一个a.out文件,
    ./a.out
    便能运行程序,看到执行结果,如果要生成指定的可执行文件的名字,可以加参数 -o [file_name],即
    gcc helloworld.c -o [app_name]
    ./[app_name]
    运行程序,关于gcc的使用还有很多的技巧,需要在实际使用中去掌握。
    二、C语言基础
    搭建好环境,接下来可以正式开始C语言的基本语法的学习,一般一门计算机语言由两部分组成,语法和应用,首先先要学习C语言的基本语法,后面的单片机和Linux C都是C语言的一种应用场景。
    如果这是你的门编程语言,在刚学习的时候有很多的新概念是需要建立的,例如计算机语言、变量、函数,所以刚开始学习会比较慢,但是没关系,跟着书循序渐进,一直学习就行了。
    涉及到的主要知识点有:数据类型、变量与算术表达式、流程控制语句、函数、指针、结构体、共用体、枚举等等。其中指针是重点,还有在实际中用的比较多的回调函数要注意掌握。如果用Linux编译的话,在学习的时候可以使用gdb进行调试。
    在学习的时候,每章节的课后编程练习至少要做三道。
    三、电路基础
    嵌入式软件相对于纯软件开发,要多一点的就是对硬件要有所了解,对于简单的原理图的理解,只需要有初中的电路基础就行了。但是要自己设计电路,涉及到三极管、放大器、滤波、运算器、数字元件等,就需要有更高的模拟/数字电路基础了,这部分并不是我的强项。
    四、51单片机
    51单片机的软件环境是Keil,使用的语言是C语言。
    有了C语言基础之后,就可以学习51单片机了,51单片机是一种微型的控制器,开发方式是通过直接操作芯片寄存器操作外围电路(如LED、红外、电机等),从而实现整个的嵌入式系统(如机器人、报警器等)。学校普遍教的是51单片机,进阶就是STM32之类的了,51和STM32的本质是一样的,不同的是STM32由于频率和内存更高,可以带小型的操作系统(μC/OS、VxWorks、μClinux等)。
    单片机比较难的是要接受大量的硬件知识,然后买一块51单片机的开发板(附带数码管、红外、LCD、A/D、D/A、步进电机、温度传感器等外设,详细的资料),然后跟着书边学习便实践。学习单片机主要是为了掌握如何控制硬件,理解寄存器、引脚等概念。
    五、Linux C
    其实,在有了C语言基础之后,先学单片机或者Linux C都可以,可以根据自己的兴趣选择先学哪一门。
    Linux 是嵌入式系统和服务器中使用多的系统,这部分主要学习文件系统编程、网络编程、多进程多线程编程等等。
    六、嵌入式系统
    Linux C用于构建嵌入式应用程序,而对于嵌入式系统的裁剪以及驱动编程却没有学习,在这个部分,我们需要一块ARM的开发板,推荐讯为的iTOP4412开发板,既支持Linux,又能运行Android的开发。然后跟着资料就可以开始学习了。
    总结
    以上,你应该能够胜任初级嵌入式软件开发工作了,如应用开发工程师或者驱动开发工程师。更多的经验就需要结合工作来提升了。

免费预约试听课