0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式Linux C的基本知识点详解

Q4MP_gh_c472c21 来源:未知 作者:胡薇 2018-10-15 09:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式系统专业是综合了计算机硬件技术、计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路模拟电路,计算机组成原理,单片机基础,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语言的算法就可以通过指针的形式,像普通变量一样被使用。函数指针可以作为一个结构体的成员,也可也作为一个参数传递给其他的函数,同样也可以作为函数的返回值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20159

    浏览量

    328991
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218015

原文标题:送给初学者:嵌入式Linux C入门大全

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式应掌握的几种能力

    1. 编程语言 基本掌握嵌入式必备的编程语言。C语言为主,C++为辅。在资源有限的情况下,大多数嵌入式产品还是使用C语言为主的,特别是底层
    发表于 12-08 06:05

    CW32嵌入式软件开发的必备知识

    的数据手册及用户手册,查找所需外设工作原理。 4、 嵌入式操作系统(深入知识点) 掌握常用的嵌入式操作系统,如μC/OS、FREERTOS等,了解其内核、进程管理、内存管理、设备管理和
    发表于 11-28 07:48

    嵌入式与FPGA的区别

    分为算法和控制,而算法的工资会比控制高,因为技术含量比控制高得多,但算法适合高数比较好的人学。 ⭕最后在了解下入行门槛? ✅1、嵌入式系统的门槛比较低,不管是嵌入式linux还是纯软,开发语言远远
    发表于 11-20 07:12

    嵌入式开发的关键介绍

    嵌入式开发在现代科技中扮演着非常重要的角色。随着物联网的发展,嵌入式系统的需求也越来越大。嵌入式开发不仅需要开发人员具备深入的硬件知识和编程经验,还需要不断学习新的技术和工具,以满足不
    发表于 11-13 08:12

    嵌入式达到什么水平才能就业?

    :包括GPIO、定时器、中断、ADC 等外设的配置与调试,能实现如温湿度采集、电机控制等功能掌握嵌入式 Linux 驱动开发基础:能编写简单字符设备驱动,实现设备的初始化、读写操作,会用内核调试
    发表于 09-15 10:20

    盘点嵌入式就业所需要的技能有哪些?

    ,把握未来的职业机遇。 1.智能汽车行业: - 熟悉嵌入式编程语言,如C/C++、Python等。 - 掌握嵌入式系统设计与开发流程,了解汽车电子控制系统的基本原理。 - 具备良好的
    发表于 08-11 15:43

    入行嵌入式应该怎么准备?

    知识: 一、C/C++编程C/C++是嵌入式系统开发中最常用的编程语言。熟练掌握
    发表于 08-06 10:34

    【「Yocto项目实战教程:高效定制嵌入式Linux系统」阅读体验】+基础概念学习理解

    。为了对珠峰更了解些,开始接触 Linux 系统开发,并逐渐认识到 Yocto 项目在定制嵌入式 Linux 系统方面的重要性。所以很想拜读下此书。 二、书籍内容概述 基础知识 书中首
    发表于 08-04 22:29

    Linux嵌入式和单片机嵌入式的区别?

    : 单片机嵌入式 :开发环境相对简单,通常使用C语言或汇编语言进行编程,开发工具包括Keil、IAR等。 Linux嵌入式 :开发环境较为复杂,除了需要掌握
    发表于 06-20 09:46

    【书籍评测活动NO.61】Yocto项目实战教程:高效定制嵌入式Linux系统

    新的浪潮,嵌入式 Linux 系统已广泛应用于国产芯片、智能家居、工业控制、智能汽车等领域,并在 AIoT(人工智能物联网)、边缘计算、智能医疗等方向发挥着关键作用。 然而,嵌入式 Linux
    发表于 05-21 10:00

    嵌入式开发入门指南:从零开始学习嵌入式

    特定功能的计算机系统,广泛应用于智能家居、工业控制、医疗设备、车载系统等领域。 2. 学习嵌入式开发的前置知识熟悉C语言编程掌握基本的数据结构与算法了解数字电路与微控制器原理熟悉Linux
    发表于 05-15 09:29

    嵌入式适合自学吗?

    构、时钟系统、电源管理、存储映射等。 嵌入式必学技术↓↓↓ 1硬件与软件的结合 2实时性要求与资源限制 3跨领域知识整合 4调试与测试困难 二)缺乏专业指导 1)容易走弯路:自学嵌入
    发表于 04-27 09:54

    嵌入式硬件杂谈:推挽、开漏、高阻态、上拉电阻

    对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对推挽、开漏、高阻态、上拉电阻这些
    的头像 发表于 04-17 19:31 1824次阅读
    <b class='flag-5'>嵌入式</b>硬件杂谈:推挽、开漏、高阻态、上拉电阻

    怎么嵌入式linux下控制dlp?

    请问怎么嵌入式linux 下控制dlp,有没有支持
    发表于 03-03 07:02

    新手怎么学嵌入式?

    。但面对这个复杂的领域,很多人可能会感到迷茫,不知从何处入手。别担心,本文将为你提供一些入门学习嵌入式技术的建议。 新手入门学习嵌入式技术的途径 1. 了解基础知识 首先,要对嵌入式
    发表于 12-12 10:51