大家学习嵌入式首先要打好基础,像C语言基础和数字电路等都是最重要的,嵌入式是综合了计算机硬件技术、计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理,单片机基础,C语言基础,操作系统,数据结构,编译原理,计算机控制,计算机网络等知识。下面我们就来讲下嵌入式Linux C的基本知识点。
一、基本开发环境
使用工具:程序生成工具GCC、程序调试工具GDB、工程管理工具为make和Makefile。开发流程:使用编辑工具编写C语言源文件,然后编译生成机器代码为主的二进制可执行程序。编译流程:C语言经过编译-汇编-链接,最终生成可执行程序格式。可执行程序包含两部分内容:程序头和程序主体。
嵌入式C语言的开发环境
程序的生成一般使用的是从x86到目标机的编译工具,程序的开发工具是运行于x86机器上的可执行程序,而是用开发工具生成的目标是以目标机器代码为实体的映像文件或者可执行程序,这个工程称为“交叉编译“。
和普通Linux环境下开发相比,更需要掌握一些几点:
*库函数和系统调用*C语言高级应用*C语言在嵌入式中的特殊语法(大小端,内存对齐等)*资源性能考虑(运行效率与存储空间)
二、基本开发工具
主要这个掌握VI三种模式的切换:命令模式、文本输入模式、和末行模式,以及VI编辑器的各种命令与操作。学习VIM的使用,编辑vimrc文件,gedit~./vimrc修改功能(比如显示行数、颜色加亮等)。
GCC程序开发工具
GCC能完成从C、C++、Objective-C等源文件向运行在特定CPU硬件上的目标代码的转换。对于通用计算机,一般使用GCC生成x86的可执行代码;对于嵌入式开发系统使用交叉编译的GCC,生成目标机可以运行的程序。
利用GCC/G++生成应用程序可以分为以下四步:(1)预处理:生成.i文件(预处理器cpp)(2)编译:将预处理后的文件转换为汇编语言,生成.s文件(编译器gcc)(3)汇编:由汇编代码生成目标代码,即机器代码,生成.o文件(汇编器as)(4)链接:由各个文件的目标代码,生成可执行程序(链接器ld)这里涉及到另外一个知识点就是静态链接库和动态链接库的生成。
Make工程管理工具
Makefile是一个决定怎样编译工程的文本文件,有一定的书写规则。在工程更新的时候,使用GNU的make工具根据当前的Makefile对工程进行有选择的编译。
自动生成Makefile的工具有autoconf、automake。其他的类似工具比如cMake等。
GDB调试工具
在使用GDB之前,需要对源程序增加-g编译选项,此时编译出来的程序包含需要调试的信息,可以利用GDB进行调试。主要使用的命令是run(开始运行程序)、break(设置断点)、next(执行一行且不进入函数)、step(进入函数)、continue(继续程序运行)。
调试分为本地GDB调试和远程GDB调试,远程GDB更适合嵌入式系统的调试手段,使用个目标机端的GDB服务器和主机端的GDB调试器完成调试工作。
三、基本学习函数
(1)标准输入/输出类函数scanf printf putchar getchar putc getc puts ungetc等。(2)字符处理及转换函数isdigit isalpha sprint strncat stncpy strlen strchr strstr strrev memset memmove memcpy memcpy等。(3)数学计算类函数div acos/asin pow exp log ceil abs floor fmod等(4)数据结构和算法类函数bsearch lfind lsearch qsort rand srand等(5)文件I/O操作类函数fopen fclose fgetc fputs fseek fwrite ffush等(6)时间日期类函数clock time gmttime mktime asctime等(7)错误处理及工具函数clearer feof perror errno assert setjmp longjmp等
Linux C中C语言的扩展库函数
(1)文件I/O操作函数open close read write lseek ioctl fcntl mmap dup create等(2)文件权限相关函数access chown chmod utime umask link stat unlink等(3)用户操作函数getgid/setgid getegid/setegid geteuid/seteuid等(4)信号及进程类函数kill raise alarm signal getpid fork sleep exec _exit等
四、C语言高级编程