![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式学习总结
myintelex
这个作者很懒,什么都没留下…
展开
-
C语言学习总结(一)——开篇
开篇怎么去开始这个话题,我想从C语言的特性说起,其实,在刚刚开始进入嵌入式领域的时候,我就经常在想,为什么是C语言?C语言的独特性在哪里?我已经听过太多关于“C语言可以操作底层”,“C语言的指针是其它语言所不具备的”,“C语言是操作系统的唯一选择”诸如此般的论调。但是,随着我对学习的深入,尤其是当涉及到Linux驱动的学习后,发现林纳斯他们很多时候用C语言去实现一些面向对象编程的思想。为什么会这原创 2016-10-20 21:26:09 · 458 阅读 · 0 评论 -
Linux学习总结(七)——进程间通信
Linux 的进程间通信方式是从 UNIX 平台继承而来的。传统的 UNIX 进程间通信方式有三种:管道、FIFO、信号。System V 进程间通信包括 System V 消息队列、 System V 信号量和 System V 共享内存。POSIX 进程间通信机制包括 POSIX 消息队列、POSIX 信号量和 POSIX 共享内存区。现在 Linux 中主要使用的进程间通信方式有:无名管道(原创 2016-12-26 18:36:37 · 364 阅读 · 0 评论 -
Linux学习总结(八)——线程
进程,它是资源分配的最小单位,进程中的事情需要按照一定的顺序逐个进行,那么:如何让一个进程中的一些事情同时执行?这时候就需要使用线程。线程,有时又称轻量级进程,它是 程序执行的最小单位,系统独立调度和分派 cpu 的基本单位,它是进程中的一个实体。一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。 在了解线程之前需要清楚几个概念:并发 并发是指在同一时刻,原创 2016-12-26 18:40:09 · 324 阅读 · 0 评论 -
Linux学习总结(九)——网络编程
网络编程离不开的基础是网络体系结构,通常说的是 OSI协议参考模型,它是一个七层网络协议模型。而我们通常使用的 Internet 是基于 TCP/IP 协议的,TCP/IP 协议是 OSI 协议的一个4层简化模型,他们之间的对应关系如下图: 自下而上,简单介绍下相应各层在整体架构中的作用:网络接口层: Network Interface Layer 是 TCP/IP 的最底层,负责将二进制原创 2016-12-26 18:42:08 · 391 阅读 · 0 评论 -
Linux驱动开发(一)——驱动开发基础
从本篇博客开始,尝试给自己掌握的 Linux 设备驱动开发进行一个总结,这并不是一个很简单的工作,因为自己的确目前对 Linux 驱动开发也只是一知半解。尽自己所能吧。今天是第一天,先来谈谈 Linux 驱动开发的基础知识。 一、设备驱动程序简介设备驱动程序是十分重要的,它是连接硬件与软件的桥梁。无操作系统的设备需要单独开发设备驱动,并以相应的驱动模块存在,这样可以更好的划分应用工程师的工作。而在原创 2016-12-26 18:45:03 · 1227 阅读 · 0 评论 -
Linux驱动开发(二)——字符设备驱动模型
一、驱动结构如上篇博客所说驱动开发关注的是两个重要的结构体:file_operations、inode,而对字符驱动设备来讲,我们关注的是 inode 中的 cdev 结构体和 file_operations 中的相关的操作函数。 cdev 结构体的定义如下: struct cdev { struct kobject kobj; //内嵌的kobj对象 s原创 2016-12-26 18:46:34 · 327 阅读 · 0 评论 -
Linux驱动开发(三)——并发控制
并发的定义是:多个执行单元同时、并行的执行。并发会导致竞态:并发的执行单元对共享资源的访问。以下几种情况会发生竞态:对称多处理器(SMP)的多个 CPU。单个 CPU 内部的多个进程。中断与进程之间。解决竞态的途径是保证对共享资源的互斥访问:一个执行单元访问共享资源的时候,其他的执行单元被禁止访问。我们常用的互斥机制有: 中断屏蔽、原子操作、自旋锁、信号量。 一、中断屏蔽因为 Linu原创 2016-12-26 18:47:21 · 304 阅读 · 0 评论 -
Linux驱动开发(四)——I/O操作
对于 Linux 设备来说,设备是当作文件来处理的。所以,很多设备的 I/O 操作都是很重要的一个部分。这篇博客总结了 Linux 驱动开发中 I/O 相关的一些内容。包含阻塞和非阻塞 I/O 、I/O 轮询、异步 I/O 等。 一、阻塞和非阻塞 I/O阻塞是指设备操作时,如果不能获取资源,则挂起相应的操作单元直到满足可操作的条件后进行操作。而非阻塞是指在不能满足操作需求的时候,相应的操作单元并不原创 2016-12-26 18:48:18 · 346 阅读 · 0 评论 -
Linux驱动开发(五)——中断和时钟
除了部分仅使用 I/O 寄存器的设备之外,大部分的设备都需要与外部打交道。这些外部的工作通常都是在与处理器完全不同的时间周期内完成的,且通常比处理器的处理速度要慢,所以一直让 CPU 等待设备的处理是不能令人满意的。这时候我们就需要使用中断。 一、中断编程中断指的是 CPU 在执行的过程中,出现了某些突发事件基带处理,CPU 必须暂停执行当前的程序,转去处理相应的突发事件,处理完毕后返回程序被中断原创 2016-12-26 18:49:43 · 323 阅读 · 0 评论 -
Linux驱动开发(六)——内存使用
Linux 使用的是一个虚拟内存系统,意味着用户程序所使用的地址和硬件使用的物理地址是不等同的。本篇博客首先会简单描述相应的概念,然后介绍下内存存取的相应接口,最后讨论下和硬件IO相关的知识。 一、Linux 内存管理1. 地址类型我们会听到很多种的地址类型,而每种类型都有自己的语义,相应的地址类型的解释如下:用户虚拟地址 在用户空间看到的常规地址,每个进程都有自己的虚拟地址空间。物理地址原创 2016-12-26 18:50:25 · 461 阅读 · 0 评论 -
Linux学习总结(六)——进程
一、进程的概念进程是一个程序的一次执行的过程,它包括程序的创建,执行,调度,消亡。从宏观上讲进程是并行的,但微观层面是串行的。进程和程序的区别: 程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。 进程是一个动态的概念,它是程序执行的过程,包括创建、调度。 常见的进程可以分为三类:交互进程 该类进程是由shell控制和运行的。 前台进程 例如:./a.ou原创 2016-12-26 18:33:07 · 374 阅读 · 0 评论 -
Linux学习总结(五)——高级I/O
高级I/O包含了很多内容,本篇会首先解释下几个相关的概念:阻塞、非阻塞、同步、异步等的概念;接着介绍下 Linux I/O 操作的具体过程;最后讨论下多路复用、记录锁等几个相关函数。 一、概念说明Linux 的每个进程都是拥有自己的虚拟内存空间的,而一个进程的虚拟内存空间分为内核空间和用户空间两个部分,当进程的执行过程中期待的某种事情没有发生:请求系统资源失败、等待某种操作的完成、新数据尚未到达等原创 2016-12-26 18:31:05 · 399 阅读 · 0 评论 -
Linux学习总结(四)——标准I/O与文件I/O
在应用开发中,经常要访问文件,Linux 下的文件读写方式分为两大类:标准 I/O 和 文件 I/O,下面分别介绍下两种 I/O 的相关操作,并比较下两种 I/O 的特点。 一、标准I/O标准I/O库接口由ANSI C标准定义,标准IO函数提供了一种对不用缓冲IO函数的带缓冲的接口。不仅在UNIX系统,在很多操作系统上都实现了标准I/O库,标准I/O库处理很多细节,如缓存分配、以优化长度执行I/O原创 2016-12-26 18:29:16 · 2355 阅读 · 0 评论 -
C语言学习总结(二)——GCC和GDB
一、GCC是什么GCC是什么,GCC是一个软件,GNU编译器套件(GNU Compiler Collection),最初由GNU组织为C语言开发,之后发展为一个套件。二、GCC编译过程1、预处理预处理的过程是编译器去将头文件进行包含,将宏定义进行替换,在这个过程中,inlude和define命令生效。 预处理过程中的常用知识点有:头文件未包含,<> 和 “” 的使用范围是不一样的,对于用户自定义原创 2016-10-20 22:52:40 · 845 阅读 · 0 评论 -
C语言学习总结(三)——C语言的基本语法
一、C语言的关键字C语言的关键字是一些编译器预先定义的具有一定具体含义的字符串。关键字共有32个,分为五大类:1. 基本数据类型——(9个) 关键字 含义 char 软件操作的最小数据单元 8bit int 系统单周期最大数据处理单元 32bit/64bit short 特殊长度的限制符(不能大于int) 通常16bit long 特殊长度的限制符(不能小于原创 2016-11-01 20:27:34 · 382 阅读 · 0 评论 -
C语言学习总结(四)——数据结构
一、定义数据元素和数据元素之间的关系,也可称之为数据的组织形式,包括3方面逻辑结构: 集合 线性结构 1:1 层次结构(树形结构)1:n 图形结构(网状结构)n:n存储结构: 顺序存储:讲数据元素按照逻辑上的先后次序存储到一片连续的内存中(一般用数组实现) 链式存储:讲数据元素存储在内存的不同位置(每个数据元素单独存),利用指针来建立元素之间的联系(用指针) 索引存储 散列存储原创 2016-11-01 20:52:26 · 542 阅读 · 0 评论 -
环境变量总结
环境变量是什么:环境变量是操作系统中指定操作系统或者应用程序运行的一些参数,可以看作是系统的全局变量。可以分为系统级变量和用户级变量。 当要求系统运行一个程序却没有指定完整的路径时,首先会在当前目录下寻找相应的可执行文件,当没有符合条件的文件时,会到path指定的路径下寻找。 当程序运行需要一些参数时,可以通过环境变量将需要的参数传递进去。 环境变量有什么用:解决未指定路径的应用程序运行。原创 2016-11-26 22:31:09 · 975 阅读 · 0 评论 -
C语言学习总结(四)——数据结构
程序 = 数据结构 + 算法。 当我们需要解决一个计算机问题,大致的步骤是这样的: 1. 从一个具体的问题抽象出一个适当的数学模型 2. 设计一个解决这个模型的算法 3. 编写相应的程序,测试、调整直到得到最终解答。 所以:数据结构是一门用来研究非数值计算的程序设计问题中计算机的操作对象及他们之间的关系和操作等的学科。一、定义数据元素和数据元素之间的关系,也可称之为数据的组织形式,包括3方原创 2016-12-26 18:18:18 · 554 阅读 · 0 评论 -
C语言学习总结(五)——C库函数总结
C 库函数主要指那些由美国国家标准协会(ANSI)或国际标准化组织(ISO)发布的标准中规定的库函数,按照标准 C 的要求来进行 C 语言编程是很重要的,因为这样你的代码才有可能跨平台使用。 最早的 C89 中有15个标准头文件: assert.h ctype.h errno.h float.h limits.h locale.h math.h setjmp原创 2016-12-26 18:22:09 · 2261 阅读 · 0 评论 -
Linux学习总结(一)——系统结构
嵌入式开发不可避免的大部分都是使用 Linux 进行开发的,本篇在这里简单介绍自己对 Linux 的认识。 什么是 LinuxLinux 背后有两个最关键的关键字: UNIX,GNU。 UNIX 最初是由贝尔实验室进行开发的,中间有过很曲折的发展历史,在这里就不详细说了。Linux是一个可自由发布的类UNIX内核实现,他是由Linus Torvalds 发明的。说一下所谓的最根本的哲学:简单原则原创 2016-12-26 18:23:30 · 420 阅读 · 0 评论 -
Linux学习总结(二)——Shell编程
Shell 是 Unix 系统下的一个命令解释器,主要用于系统和用户的交互。在 Unix 上有各种不同版本的 Shell,Bash是Linux标准默认的Shell,它是BourneAgain Shell的缩写。我们这里主要讨论的也是 Bash。Linux常用命令表 ( 约60个常用命令)| 分类 命令 文件相关 cd, whereis, pwd, ls, file, echo, mkd原创 2016-12-26 18:26:40 · 388 阅读 · 0 评论 -
Linux学习总结(三)——Shell常见命令解析
Shell 的命令有很多,再加上相关软件的命令,更是多不胜数,但是常见的命令大致也就可以分为这五类: * 文件相关:诸如文件及目录的创建/编辑/传输等 * 磁盘相关:磁盘的检查/挂载/查看等 * 系统相关:系统的相关设置等 * 网络相关:网络的相关设置 * 用户相关:用户的几个命令从今天开始,逐步将常见的 Shell 命令的用法总结一下,简单的仅仅做个记录,复杂的分析下用法。原创 2016-12-26 18:27:23 · 319 阅读 · 0 评论 -
Linux驱动开发(七)——设备驱动模型
设备驱动模型提供了硬件的抽象,内核使用这样的抽象可以完成很多硬件重复的工作,这些抽象工作包括几个部分:电源管理 设备驱动模型使电源管理子系统可以以正确的顺序遍历系统上的设备。热插拔设备 设备驱动模型自动捕捉插拔信号,加载驱动程序,使内核容易和设备通信。与用户空间通信 用户空间程序通过 sysfs 虚拟文件系统访问设备的相关信息。通过对 sysfs 文件系统的操作,就能够控制设备,或者从设原创 2016-12-26 18:51:19 · 438 阅读 · 0 评论