当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。

嵌入式系统专业是综合了计算机硬件技术、计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理,单片机基础,C语言基础,操作系统,数据结构,编译原理,计算机控制,计算机网络等知识。

在真正学习嵌入式开发之前,首先要打好基础。其中最重要的是C语言基础、数字电路、计算机组成原理三门课程。下面我们就来讲下嵌入式Linux C的基本知识点。

一、 基本开发环境

Linux下C语言开发环境

使用工具:程序生成工具GCC、程序调试工具GDB、工程管理工具为make和Makefile。 开发流程:使用编辑工具编写C语言源文件,然后编译生成机器代码为主的二进制可执行程序。 编译流程:C语言经过编译-汇编-链接,最终生成可执行程序格式。可执行程序包含两部分内容:程序头和程序主体。

嵌入式C语言的开发环境

程序的生成一般使用的是从x86到目标机的编译工具,程序的开发工具是运行于x86机器上的可执行程序,而是用开发工具生成的目标是以目标机器代码为实体的映像文件或者可执行程序,这个工程称为“交叉编译“。

和普通Linux环境下开发相比,更需要掌握一些几点:

* 库函数和系统调用 * C语言高级应用* C语言在嵌入式中的特殊语法(大小端,内存对齐等)* 资源性能考虑(运行效率与存储空间)

二、 基本开发工具

Linux文本编辑工具VI

主要这个掌握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调试器完成调试工作。

三、 基本学习函数

C语言标准库函数

(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语言高级编程

C语言运行过程中所使用的内存总体分为静态存储区和动态存储区两种。

静态存储区

C语言程序中静态数据存储区分为三类:只读存储器(RO)、已初始化读写数据区(RW Data)、未初始化读写存储器(BSS)。在程序运行初始化阶段开辟,在运行过程中不会变化(大小和位置固定),程序退出时被系统回收。

动态存储区

动态存储区分为堆和栈两类,在程序运行过程中动态分配(位置和大小动态变化),常见动态内存管理是栈内存从高地址向低地址分配,堆内存从低地址向高地址分配,一般来说堆使用链表实现,栈使用线性存储方式。 在C语言程序中,栈空间是由编译器管理的,在程序中可以体现栈空间使用的例子是参数的传递、返回值的使用以及自动变量空间。一般来说如果栈空间是从高地址向低地址增长的。

参数入栈的顺序是:后面的参数在高地址处、前面的参数在低地址处。

自动变量在栈空间,前面的变量放入栈的高地址,后面的自动变量放入栈的低地址。

在函数退出时函数栈上的内容将被释放。因此,自动变量的地址不可以作为函数返回值

在C语言中,堆内存区域的分配和释放是通过调用库函数完成的,malloc、calloc、realloc、free4个库函数实现堆内存的分配、释放和管理。分配内存后要记得手动释放,否则其资源是不会被系统回收的,会造成内存泄漏。同时指针被释放后,指针应该被设置为NULL,避免野指针。 总的来说,栈内存是由编译器分配和释放,堆内存是由程序分配和释放。

函数指针的使用

函数指针是一个指向函数的指针(本质上是一个代码区的地址),而函数本身代表了算法,此时C语言的算法就可以通过指针的形式,像普通变量一样被使用。函数指针可以作为一个结构体的成员,也可也作为一个参数传递给其他的函数,同样也可以作为函数的返回值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭