
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、送给初学者:嵌入式linux c入门大全系统专业是综合了计算机硬件技术、计算机软件技术以及技术的一门综合学科,所涉及的内涵和学问十分广泛,包括:数字电路,计算机组成原理,基础,基础,操作系统,数据结构,编译原理,计算机控制,计算机网络等学问。在真正学习嵌入式开发之前,首先要打好基础。其中最重要的是c语言基础、数字电路、计算机组成原理三门课程。下面我们就来讲下嵌入式 c的基本学问点。一、 基本开发环境linux下c语言开发环境用法工具:程序生成工具gcc、程序调试工具gdb、工程管理工具为make和makefile。开发流程:用法编辑工具编写c语言源文件,然后编译生成机器代码为主的二进制可执行程
2、序。编译流程:c语言经过编译-汇编-链接,终于生成可执行程序格式。可执行程序包含两部分内容:程序头和程序主体。嵌入式c语言的开发环境程序的生成普通用法的是从x86到目标机的编译工具,程序的开发工具是运行于x86机器上的可执行程序,而是用开发工具生成的目标是以目标机器代码为实体的映像文件或者可执行程序,这个工程称为“交错编译“。和一般linux环境下开发相比,更需要把握一些几点:* 库函数和系统调用 * c语言高级应用* c语言在嵌入式中的特别语法(大小端,内存对齐等)* 资源性能考虑(运行效率与存储空间)二、 基本开发工具linux文本编辑工具vi主要这个把握vi三种模式的切换:指令模式、文本
3、输入模式、和末行模式,以及vi编辑器的各种指令与操作。学习vim的用法,编辑vimrc文件,gedit ./vimrc修改功能(比如显示行数、色彩加亮等)。gcc程序开发工具gcc能完成从c、c+、objective-c等源文件向运行在特定cpu硬件上的目标代码的转换。对于通用计算机,普通用法gcc生成x86的可执行代码;对于嵌入式开发系统用法交错编译的gcc,生成目标机可以运行的程序。利用gcc/g+生成应用程序可以分为以下四步:(1) 预处理:生成.i文件(预处理器cpp)(2) 编译:将预处理后的文件转换为汇编语言,生成.s文件(编译器gcc)(3) 汇编:由汇编代码生成目标代码,即机器
4、代码,生成.o文件(汇编器as)(4) 链接:由各个文件的目标代码,生成可执行程序(链接器ld)这里涉及到另外一个学问点就是静态链接库和动态链接库的生成。make工程管理工具makefile是一个打算怎样编译工程的文本文件,有一定的书写规章。在工程更新的时候,用法gnu的make工具按照当前的makefile对工程举行有挑选的编译。自动生成makefile的工具有autoconf、automake。其他的类似工具比如cmake等。gdb调试工具在用法gdb之前,需要对源程序增强-g编译选项,此时编译出来的程序包含需要调试的信息,可以利用gdb举行调试。主要用法的指令是run(开头运行程序)、b
5、reak(设置断点)、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 mem
6、move 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等
7、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语言运行过程中所用法的内存总体分为
8、静态存储区和动态存储区两种。静态存储区c语言程序中静态数据存储区别为三类:只读存储器(ro)、已初始化读写数据区(rw data)、未初始化读写存储器(bss)。在程序运行初始化阶段开拓,在运行过程中不会变幻(大小和位置固定),程序退出时被系统回收。动态存储区动态存储区别为堆和栈两类,在程序运行过程中动态分配(位置和大小动态变幻),常见动态内存管理是栈内存从高地址向低地址分配,堆内存从低地址向高地址分配,普通来说堆用法链表实现,栈用法线性存储方式。在c语言程序中,栈空间是由编译器管理的,在程序中可以体现栈空间用法的例子是参数的传递、返回值的用法以及自动变量空间。普通来说假如栈空间是从高地址向低
9、地址增长的。参数入栈的挨次是:后面的参数在高地址处、前面的参数在低地址处。自动变量在栈空间,前面的变量放入栈的高地址,后面的自动变量放入栈的低地址。在函数退出时函数栈上的内容将被释放。因此,自动变量的地址不行以作为函数返回值在c语言中,堆内存区域的分配和释放是通过调用库函数完成的,malloc、calloc、realloc、free4个库函数实现堆内存的分配、释放和管理。分配内存后要记得手动释放,否则其资源是不会被系统回收的,会造成内存泄漏。同时指针被释放后,指针应当被设置为null,避开野指针。总的来说,栈内存是由编译器分配和释放,堆内存是由程序分配和释放。函数指针的用法函数指针是一个指向函数的指针(本质上是一个代码区的地址),而函数本身代表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语-山东省淄博市滨州市2024-2025学年度2025届高三模拟考试(淄博滨州一模)试题和答案
- (一模)萍乡市2025年高三第一次模拟考试语文试卷(含答案解析)
- 防撞护角施工方案
- 第十课 《数据可视化》教学设计 2023-2024学年浙教版(2020)初中信息技术七年级上册
- 分拣工人劳务合同范本
- 认知治疗模式
- 乡下老宅转让合同范例
- 班级社会实践活动的总结与反思计划
- 班级合作项目实施计划
- 后勤保障部服务质量提升总结计划
- 枯死松树清理服务投标方案(完整技术标)
- MOOC 针灸学-经络养生与康复-暨南大学 中国大学慕课答案
- 第4课 中古时期的亚洲(教学课件)-【中职专用】《世界历史》同步课堂(同课异构)(高教版2023•基础模块)
- 《监理企业安全责任清单(2.0版)参考模板》
- 团队统一思想培训
- 小区停车收费方案
- 经桡动脉脑血管造影术前术后护理
- 《让我们的家更美好》教学设计
- 提升渔业与水产养殖技术的高效养殖模式
- 装饰公司小区团购活动策划
- 曲率系数不均匀系数自动计算
评论
0/150
提交评论