一、标准C语言开发
ANSI C是美国国家标准协会(ANSI)对C语言发布的标准。ANSIC能够被所有的平台、所有C编译器支持。C99标准应用最广泛。
标准C应用场景:标准C开发一般只是以基本语法和库的形式出现,能够完成基本的功能和简单的交互,但是如果要支持高效、复杂且有可视化交互功能,需要借助操作体系提供的系统
编程,或者更高级的应用框架编程。
标准C库函数查询:http://ganquan.info/standard-c/
标准C头文件:
库:一般见于链接的libc.lib
数据结构:数据结构是对C语言基本语法的高度封装运用,以面向对象的思维去表述现实问题。编程就是数据结构+算法。参考:数据结构与算法分析:C语言描述(原书第2版).pdf
C++语言开发:C++语言是从语法级支持面向对象开发,具有封装、组继承、多态等面向对象特性,天然具备数据结构的封装优势。参考:C++Primer中文版(第4版).pdf
JAVA语言开发:JAVA语言跟C++类似,是面对对象开发语言,但是比C++要简单些。其和C++相比,是在底层操作系统的基础上,还需要依赖于JAVA虚拟机来解释执行,即由JAVA虚拟机来讲JAVA中间代码转换为机器理解的指令。而C和C++在编译即变成机器理解的指令。参考:Java编程思想(第4版).pdf
编程规范:良好的编程规范是高级软件开发工程师的基本素质。参考:华为技术有限公司c语言编程规范.pdf
1. Windows C语言开发
经典开发平台:windows VC6.0
支持大部分C99标准。
选择Win32 ConsoleApplication
2. LinuxGNU C语言开发
在兼容标准C语言的基础上,由GNU的GCC工具链增加一部分特性。
LinuxC开发工具:Linux下C语言编程环境的工具.txt
Linux C语言编程特性:LinuxC编程特性.doc
Linux内核GCC特性:Linux 内核中的GCC特性.doc
二、系统编程
顾名思义,系统编程跟操作系统相关,由操作系统向应用层提供丰富且高效的接口。其包括多进程多线程编程、进程间同步与互斥、网络编程、高级文件IO及映射、图形编程、设备编程(如串口)、系统状态与控制等等。
系统编程应用场景:一般系统编程用于非UI系统,常见于服务端技术,或者前端的核心框架。UI应用一般使用在有Framework框架基础上的可视化编程。
库:部分库存在于运行时库CRT.O,如多进程多线程,部分库存在于系统支持库里面,见windows和linux的系统lib目录。
1. Windows系统编程
经典开发平台:windowsVC6.0
选择Win32 Application
Windows系统编程参考:WINDOWS.核心编程第五版.pdf
2. Linux系统编程
参考Unix环境高级编程,使用Posix标准。
开发平台:跟我一起写Makefile.pdf、GCC中文手册.pdf
Linux系统编程参考:linux系统编程.pdf、UNIX环境高级编程.pdf
三、可视化编程(应用框架编程)
可视化编程即所见即所得,如拉一个时间空间和列表控件出来,只需要编写很少部分函数代码(一般是callback)即可以完成系统功能。其一般都是基于特定的平台应用框架来开发的。其有丰富的UI控件接口,是对系统编程接口的再次组合和封装。
可视化应用场景:一般用于客户端、前端UI、应用界面编程。
库:一般可视化编程都有一个集成开发平台,平台已经集成了框架支持库。、
1. Windows可视化编程
应用编程框架:MFC
经典开发平台:windowsVC6.0
选择MFC AppWizard
Windows可视化编程参考:深入浅出.MFC.pdf
2. Linux可视化编程
应用编程框架:QT
开发平台:QtCreator
QT可视化编程参考:Qt编程及应用经典教程.pdf
3. Android可视化编程
Android其实也是基于Linux内核的,是在Linux操作系统的基础上开发了一个强大的而且是开放的Android应用框架。因此Android和QT是同等概念,都是基于Linux平台的应用框架。当然,Android的底层Linux区别于常规Linux内核,做了部分改动,如新增Binder驱动和Log日志驱动。
应用框架:Android应用框架
开发平台:Eclipse+JDK+ADT+Android
Android应用开发参考:Android应用开发详解.pdf
四、脚本编程
以上语言均需要通过编译之后才能执行,而脚本编程属于解释性语言,不需编译即可立即执行。脚本编程是基于系统抽象出可高度重复利用的库的基础上开发出来的一套语法和命令。主要用于系统配置、项目管理、自动化测试等方面。Makefile即是最经典的脚本编程范例。
Windows脚本编程:有CMD命令窗口进行管理和解释执行。参考windows批处理命令详解及脚本实例.doc
Linux脚本编程:由Shell命令窗口进行管理和解释执行,熟悉脚本编程是Linux开发人员的一项技能。参考Linux+命令行和shell脚本编程宝典.pdf
五、Web编程
Web编程是应用编程的一种特例,主要针对网页、网络编程。网页由HTML超文本标记语言和脚本组成,所以Web编程语言包括静态语言(即HTML格式语言)和动态语言(即脚本开发语言)。网页脚本开发语言包括:ASP、PHP、JAVASCRIPT、JSP等等,其由浏览器Browse负责展示、由服务端解释引擎负责解释响应。
Web编程一般是脚本开发,是解释执行的。
Web编程领域同样有很出名的应用框架,即由框架提供很多可重复利用的可视化控件,封装了底层的展示和控制逻辑。比较出名的有:微软提供的.NET框架、基于JAVA平台有很多出色的开源框架(Struts等)。
Web编程会涉及数据库编程,不同的框架提供访问数据库的能力是评价该框架优劣的重要因素。
Web编程使用HTTP应用层协议,而系统编程的网络编程(Socket编程)使用的网络层和传输层协议。
由于Web编程离嵌入式Linux课程体系太远,这里只做简单介绍,不提供参考书籍。
六、服务器端编程
Web编程一般称为前端编程,而服务器端编程一般称为后端编程。Web应用都是由前端交互程序和后端服务程序组成。服务器编程一般涉及到应用控制、业务逻辑、数据处理、数据库访问控制等内容。服务器编程一般属于第二的系统编程的其中一个大类。
服务端编程涉及到多个前端的同时并发访问,因此并发、高性能编程是服务器编程的关键技术。
七、嵌入式编程
以上编程都是基于一定操作系统平台的编程,属于带系统编程。而在嵌入式Linux操作系统平台上进行应用编程与Ubuntu Linux平台上的应用编程基本一致。
一般意义上,嵌入式编程主要是指如何移植和开发嵌入式操作系统以及其驱动,并给应用程序提供运行时库支持。另外,嵌入式编程也包含嵌入式控制器编程,控制器编程资源有限,一般会使用简单的操作系统或者没有操作系统。嵌入式编程更多指的是硬件体系编程,即基于特定的硬件处理器SOC进行驱动编程。
1. 资源有限型系统编程
一般指的是CPU主频较低,100M以下,内存在K字节级别,主要是单片机控制编程。单片机控制同样可以移植和构建多任务操作系统,如基于UCOS内核的操作系统。其包括封闭系统的应用开发和封闭系统的移植和定制,前者是带系统开发,后者是裸机开发。
2. 资源丰富型系统编程
一般指的是CPU主频在512M以上,内存在128M以上,主要是高级处理器编程。这里处理器一般会部署多任务实时操作系统,如嵌入式Linux或者Android系统(内核也是Linux,其要求内存在512M以上)。当今的手机和平板都是属于这一类。资源丰富型系统编程包括系统编程(如服务端应用)和应用框架编程(如android
APP),另外其还包括下面介绍的内核和驱动开发编程。
3. 嵌入式内核和驱动开发编程
这里是移植和定制嵌入式Linux操作系统,包括内核移植和驱动开发。
4. 嵌入式交叉工具链、调试、自动化测试
应用编程很少去关心工具链,但是嵌入式软件开发一定要深入地去理解交叉工具链和调试技巧,这是资深嵌入式开发工程师的重要技能。只有懂得这个,才能高效地定制和开发嵌入式产品。甚至,开发人员需要自己去定制开发一些嵌入式工具。
嵌入式自动化测试也是嵌入式开发的一项重要内容。
总体来说,嵌入式编程包括硬件体系编程、UBOOT启动、嵌入式Linux系统移植、根文件系统构建、Linux驱动开发等内容;而系统编程、网络编程、脚本编程都是在嵌入式Linux平台上的带系统编程。