自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 《程序员的修炼之道》读书笔记

最近看了《程序员的修炼之道-从小工到专家》,里面讲的是怎样成为一个注重实效的程序员。讲的是程序员,但是其实中间的很多道理作为一个职场人来说,都是适用的。因为最近看得个人管理方面的书籍比较多,还是按照很多大师经常提到的道、术、器、用四个字来总结一下这本书,也是给自己的一个发展定位:我自己想要成为一个怎样的程序员。 道:一个注重实效程序员需要秉持的理念书的第一章的名字叫注重实效的哲学。其实不像很多人想

2017-01-11 16:01:57 798

翻译 Google C++ Style Guide

最近把 Google C++ Style Guide 从头到尾看了一遍,把相应的内容记录在这里,也规范下以后自己的代码。 Header Files通常每一个 .cpp 文件都应该有一个对应的 .h 头文件,对于一个头文件来说(1)需要Self-contained,即一个头文件应该有相应的#define 保护、并包含所有他需要的其它头文件;(2)尽量应使用头文件而不是前置声明;(3)不能滥用内联

2016-12-26 18:54:31 764

原创 Linux驱动开发(七)——设备驱动模型

设备驱动模型提供了硬件的抽象,内核使用这样的抽象可以完成很多硬件重复的工作,这些抽象工作包括几个部分:电源管理 设备驱动模型使电源管理子系统可以以正确的顺序遍历系统上的设备。热插拔设备 设备驱动模型自动捕捉插拔信号,加载驱动程序,使内核容易和设备通信。与用户空间通信 用户空间程序通过 sysfs 虚拟文件系统访问设备的相关信息。通过对 sysfs 文件系统的操作,就能够控制设备,或者从设

2016-12-26 18:51:19 455

原创 Linux驱动开发(六)——内存使用

Linux 使用的是一个虚拟内存系统,意味着用户程序所使用的地址和硬件使用的物理地址是不等同的。本篇博客首先会简单描述相应的概念,然后介绍下内存存取的相应接口,最后讨论下和硬件IO相关的知识。 一、Linux 内存管理1. 地址类型我们会听到很多种的地址类型,而每种类型都有自己的语义,相应的地址类型的解释如下:用户虚拟地址 在用户空间看到的常规地址,每个进程都有自己的虚拟地址空间。物理地址

2016-12-26 18:50:25 471

原创 Linux驱动开发(五)——中断和时钟

除了部分仅使用 I/O 寄存器的设备之外,大部分的设备都需要与外部打交道。这些外部的工作通常都是在与处理器完全不同的时间周期内完成的,且通常比处理器的处理速度要慢,所以一直让 CPU 等待设备的处理是不能令人满意的。这时候我们就需要使用中断。 一、中断编程中断指的是 CPU 在执行的过程中,出现了某些突发事件基带处理,CPU 必须暂停执行当前的程序,转去处理相应的突发事件,处理完毕后返回程序被中断

2016-12-26 18:49:43 337

原创 Linux驱动开发(四)——I/O操作

对于 Linux 设备来说,设备是当作文件来处理的。所以,很多设备的 I/O 操作都是很重要的一个部分。这篇博客总结了 Linux 驱动开发中 I/O 相关的一些内容。包含阻塞和非阻塞 I/O 、I/O 轮询、异步 I/O 等。 一、阻塞和非阻塞 I/O阻塞是指设备操作时,如果不能获取资源,则挂起相应的操作单元直到满足可操作的条件后进行操作。而非阻塞是指在不能满足操作需求的时候,相应的操作单元并不

2016-12-26 18:48:18 360

原创 Linux驱动开发(三)——并发控制

并发的定义是:多个执行单元同时、并行的执行。并发会导致竞态:并发的执行单元对共享资源的访问。以下几种情况会发生竞态:对称多处理器(SMP)的多个 CPU。单个 CPU 内部的多个进程。中断与进程之间。解决竞态的途径是保证对共享资源的互斥访问:一个执行单元访问共享资源的时候,其他的执行单元被禁止访问。我们常用的互斥机制有: 中断屏蔽、原子操作、自旋锁、信号量。 一、中断屏蔽因为 Linu

2016-12-26 18:47:21 311

原创 Linux驱动开发(二)——字符设备驱动模型

一、驱动结构如上篇博客所说驱动开发关注的是两个重要的结构体:file_operations、inode,而对字符驱动设备来讲,我们关注的是 inode 中的 cdev 结构体和 file_operations 中的相关的操作函数。 cdev 结构体的定义如下: struct cdev { struct kobject kobj; //内嵌的kobj对象 s

2016-12-26 18:46:34 334

原创 Linux驱动开发(一)——驱动开发基础

从本篇博客开始,尝试给自己掌握的 Linux 设备驱动开发进行一个总结,这并不是一个很简单的工作,因为自己的确目前对 Linux 驱动开发也只是一知半解。尽自己所能吧。今天是第一天,先来谈谈 Linux 驱动开发的基础知识。 一、设备驱动程序简介设备驱动程序是十分重要的,它是连接硬件与软件的桥梁。无操作系统的设备需要单独开发设备驱动,并以相应的驱动模块存在,这样可以更好的划分应用工程师的工作。而在

2016-12-26 18:45:03 1255

原创 Linux学习总结(九)——网络编程

网络编程离不开的基础是网络体系结构,通常说的是 OSI协议参考模型,它是一个七层网络协议模型。而我们通常使用的 Internet 是基于 TCP/IP 协议的,TCP/IP 协议是 OSI 协议的一个4层简化模型,他们之间的对应关系如下图: 自下而上,简单介绍下相应各层在整体架构中的作用:网络接口层: Network Interface Layer 是 TCP/IP 的最底层,负责将二进制

2016-12-26 18:42:08 402

原创 Linux学习总结(八)——线程

进程,它是资源分配的最小单位,进程中的事情需要按照一定的顺序逐个进行,那么:如何让一个进程中的一些事情同时执行?这时候就需要使用线程。线程,有时又称轻量级进程,它是 程序执行的最小单位,系统独立调度和分派 cpu 的基本单位,它是进程中的一个实体。一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。 在了解线程之前需要清楚几个概念:并发 并发是指在同一时刻,

2016-12-26 18:40:09 338

原创 Linux学习总结(七)——进程间通信

Linux 的进程间通信方式是从 UNIX 平台继承而来的。传统的 UNIX 进程间通信方式有三种:管道、FIFO、信号。System V 进程间通信包括 System V 消息队列、 System V 信号量和 System V 共享内存。POSIX 进程间通信机制包括 POSIX 消息队列、POSIX 信号量和 POSIX 共享内存区。现在 Linux 中主要使用的进程间通信方式有:无名管道(

2016-12-26 18:36:37 371

原创 Linux学习总结(六)——进程

一、进程的概念进程是一个程序的一次执行的过程,它包括程序的创建,执行,调度,消亡。从宏观上讲进程是并行的,但微观层面是串行的。进程和程序的区别: 程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。 进程是一个动态的概念,它是程序执行的过程,包括创建、调度。 常见的进程可以分为三类:交互进程 该类进程是由shell控制和运行的。 前台进程 例如:./a.ou

2016-12-26 18:33:07 386

原创 Linux学习总结(五)——高级I/O

高级I/O包含了很多内容,本篇会首先解释下几个相关的概念:阻塞、非阻塞、同步、异步等的概念;接着介绍下 Linux I/O 操作的具体过程;最后讨论下多路复用、记录锁等几个相关函数。 一、概念说明Linux 的每个进程都是拥有自己的虚拟内存空间的,而一个进程的虚拟内存空间分为内核空间和用户空间两个部分,当进程的执行过程中期待的某种事情没有发生:请求系统资源失败、等待某种操作的完成、新数据尚未到达等

2016-12-26 18:31:05 409

原创 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 2395

原创 Linux学习总结(三)——Shell常见命令解析

Shell 的命令有很多,再加上相关软件的命令,更是多不胜数,但是常见的命令大致也就可以分为这五类: * 文件相关:诸如文件及目录的创建/编辑/传输等 * 磁盘相关:磁盘的检查/挂载/查看等 * 系统相关:系统的相关设置等 * 网络相关:网络的相关设置 * 用户相关:用户的几个命令从今天开始,逐步将常见的 Shell 命令的用法总结一下,简单的仅仅做个记录,复杂的分析下用法。

2016-12-26 18:27:23 330

原创 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 401

原创 Linux学习总结(一)——系统结构

嵌入式开发不可避免的大部分都是使用 Linux 进行开发的,本篇在这里简单介绍自己对 Linux 的认识。 什么是 LinuxLinux 背后有两个最关键的关键字: UNIX,GNU。 UNIX 最初是由贝尔实验室进行开发的,中间有过很曲折的发展历史,在这里就不详细说了。Linux是一个可自由发布的类UNIX内核实现,他是由Linus Torvalds 发明的。说一下所谓的最根本的哲学:简单原则

2016-12-26 18:23:30 434

原创 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 2294

原创 C语言学习总结(四)——数据结构

程序 = 数据结构 + 算法。 当我们需要解决一个计算机问题,大致的步骤是这样的: 1. 从一个具体的问题抽象出一个适当的数学模型 2. 设计一个解决这个模型的算法 3. 编写相应的程序,测试、调整直到得到最终解答。 所以:数据结构是一门用来研究非数值计算的程序设计问题中计算机的操作对象及他们之间的关系和操作等的学科。一、定义数据元素和数据元素之间的关系,也可称之为数据的组织形式,包括3方

2016-12-26 18:18:18 595

原创 环境变量总结

环境变量是什么:环境变量是操作系统中指定操作系统或者应用程序运行的一些参数,可以看作是系统的全局变量。可以分为系统级变量和用户级变量。 当要求系统运行一个程序却没有指定完整的路径时,首先会在当前目录下寻找相应的可执行文件,当没有符合条件的文件时,会到path指定的路径下寻找。 当程序运行需要一些参数时,可以通过环境变量将需要的参数传递进去。 环境变量有什么用:解决未指定路径的应用程序运行。

2016-11-26 22:31:09 990

原创 system 调用 Qt 程序的问题

system 调用 Qt 程序的问题在公司做了一个嵌入式系统的引导程序,进程在系统开始后自启动(这里使用的是 rc.local 添加启动项的方法),随后按照相应的顺序依次启动相应的程序,之前一直没有出现什么问题,直到增加了一个启动 Qt 程序,并监控程序状态的需求后,出现了一些无法解释的问题。编写代码的过程第一个需求:进程中调用一个 Qt 程序。这个代码很简单,为了省事,简单使用了 system

2016-11-22 17:48:21 5421

原创 C语言学习总结(四)——数据结构

一、定义数据元素和数据元素之间的关系,也可称之为数据的组织形式,包括3方面逻辑结构: 集合 线性结构 1:1 层次结构(树形结构)1:n 图形结构(网状结构)n:n存储结构: 顺序存储:讲数据元素按照逻辑上的先后次序存储到一片连续的内存中(一般用数组实现) 链式存储:讲数据元素存储在内存的不同位置(每个数据元素单独存),利用指针来建立元素之间的联系(用指针) 索引存储 散列存储

2016-11-01 20:52:26 598

原创 C语言学习总结(三)——C语言的基本语法

一、C语言的关键字C语言的关键字是一些编译器预先定义的具有一定具体含义的字符串。关键字共有32个,分为五大类:1. 基本数据类型——(9个) 关键字 含义 char 软件操作的最小数据单元 8bit int 系统单周期最大数据处理单元 32bit/64bit short 特殊长度的限制符(不能大于int) 通常16bit long 特殊长度的限制符(不能小于

2016-11-01 20:27:34 849

原创 在windows下打出tar.gz的尝试

作为一名嵌入式开发人员,Linux是必须使用的,但是不可避免的有些时候手头上没有装有Linux的电脑,或者不想去打开虚拟机。尤其是当你仅仅只是需要打个tar包的时候。这时候当然你可以使用7z的桌面版程序,就可以解决这种简单的需求。但是目前我遇到了一个这样的问题:公司需要对外提供一个软件打包工具,而用户通常是没有Linux系统的。这时候需要在程序中打出tar.gz的压缩包。第一种方法:使用gnu ta

2016-10-22 17:56:55 8434

原创 C语言学习总结(二)——GCC和GDB

一、GCC是什么GCC是什么,GCC是一个软件,GNU编译器套件(GNU Compiler Collection),最初由GNU组织为C语言开发,之后发展为一个套件。二、GCC编译过程1、预处理预处理的过程是编译器去将头文件进行包含,将宏定义进行替换,在这个过程中,inlude和define命令生效。 预处理过程中的常用知识点有:头文件未包含,<> 和 “” 的使用范围是不一样的,对于用户自定义

2016-10-20 22:52:40 909

原创 C语言学习总结(一)——开篇

开篇怎么去开始这个话题,我想从C语言的特性说起,其实,在刚刚开始进入嵌入式领域的时候,我就经常在想,为什么是C语言?C语言的独特性在哪里?我已经听过太多关于“C语言可以操作底层”,“C语言的指针是其它语言所不具备的”,“C语言是操作系统的唯一选择”诸如此般的论调。但是,随着我对学习的深入,尤其是当涉及到Linux驱动的学习后,发现林纳斯他们很多时候用C语言去实现一些面向对象编程的思想。为什么会这

2016-10-20 21:26:09 476

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除