自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux多线程

一、线程的特点1. 线程是进程的一个执行流,是CPU调度和分配的基本单位。线程是程序运行的最小单位。2. 线程不会影响到其它线程的运行。比如一个线程崩溃,其它线程正常运行。3. 同一进程内的线程共享进程的地址空间。二、一个线程的组成1. 一个指向当前被执行指令的指令指针2. 一个栈空间3. 一个寄存器值的集合4. 一个私有

2016-10-31 22:15:44 285

原创 利用两个线程实现生产者消费者模型

代码如下:[html] view plain copy #include stdio.h>  #include stdlib.h>  #include string.h>  #include pthread.h>  #include semaphore.h>    #define TEXT_SZ 1024    s

2016-10-30 22:22:24 2197

原创 Linux C ----信号

一、信号量的概念1、信号量(信号灯):与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制,主要用途是保护临界资源,相当于内存中的标志,进程可以根据它判断是否能够访问某些共享资源,同时,进程也可以修改标志,除了用于访问控制外,还可用于进程同步,信号量还可以保护进程间的同步互斥。2、同步:进程间按一定的顺序去执行3、互斥:某一进程占用资源时,只有其释放资源后其

2016-10-29 23:43:27 448

原创 Linux进程间的通信方式----消息队列

1. 消息队列就是一个消息的链表。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新信息,对消息队列有读权限的进程可以从消息队列中读走消息,消息队列是随内核持续的。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值,用户ID,组ID,消息队列中消息数目等,甚至记录了

2016-10-28 23:26:14 401

原创 信号通信之共享内存

一、共享内存的概念共享内存就是允许多个不相关的进程访问的同一个物理内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种最快的方法,不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址。而如果某个进程向共享内存写入数据,所做的数据变化将立即影响到可以访问同一段共享内存的任何其他进程且这些进程能够

2016-10-28 09:40:58 361

原创 进程间的通信之信号通信

1、  kill        函数的作用:传递信号给指定的进程函数的原型:int  kill(pid_t pid,  int sig)函数的参数:pid: > 0,指定的进程pid                pid:=0,发送给目前进程相同进程租的所有进程                 Pid : -1,广播给系统的所有的进程        

2016-10-26 22:15:24 324

原创 进程间的通信方式之管道通信

一、管道通信的特点1. 管道是单向的,先进先出的。2.一个进程在管道尾部写入数据,另一个进程在管道头部读取数据。因此管道通信是半双工的。3. 管道提供了简单的流控制机制,当进程试图读空管道时,进程将阻塞。当管道已经写满时,进程再试图向管道写入数据,进程将阻塞。4.数据被进程读出,将从管道中删除二、管道通信的区别1、有名管道2、无名管道

2016-10-25 23:06:12 1232

原创 进程

1、进程是一个具有独立功能的程序的一次运行活动,也是资源分配的最小单元2、程序和进程的区别:①程序是放在磁盘里的可执行文件,进程是程序执行的异性实例                                          ②程序是静态的,进程是动态的                                          ③程序是长久的,进程是暂时的3、进程的组

2016-10-24 22:55:41 258

原创 带缓存的I/O操作

1、标准的I/O提供了三种类型的缓冲:全缓冲、行缓冲、不带缓冲2、全缓冲:在填满标准的I/O缓冲区后才进行实际的I/O操作3、行缓冲:当在输入和输出中遇到换行符是,标准的I/O库执行I/O操作4、不带缓冲:标准的I/O库不对字符进行行缓冲储存5、fopen函数作用:打开文件函数原型:FILE *fopen(const char *path, const char *mode

2016-10-23 21:37:08 282

原创 Linux C 文件操作及小结

1、文件创建 -- creat函数原型:int creat(const char *pathname, mode_t mode);函数参数:pathname --创建的文件名                  mode --创建的方式S_IRUSR:可读S_IWUSR:可写S_IXUSR:可执行S_IRWXU:可读可写可执行0755 --> 111 101 101

2016-10-22 21:43:22 430

转载 文件锁

1、当多个用户同时访问一个文件的时候,Linux会采取给文件上锁的机制防止共享资源产生竞争状态。于是便有了文件锁的概   念。2、文件锁包括建议性锁和强制性锁。   建议锁要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下内核和操作系统都不使用建议   性锁。 3、强制性锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对该文件进

2016-10-21 20:44:09 358

转载 linux进程调度介绍

一、Linux新老版本调度器对比在 2.6 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。这是由于调度器是使用一个复杂度为 O(n) 的算法实现的。在这种调度器中,调度任务所花费的时间是一个系统中任务个数的函数。换而言之,活动的任务越多,调度任务所花费的时间越长。在任务负载非常重时,处理器会因调度消耗掉大量的时间,用于任务本身的时间就非常少了。因此,这个算法缺乏可伸缩性

2016-10-20 22:15:08 487

原创 exec族函数解析

一、fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可

2016-10-19 21:26:33 390

转载 [Linux C编程]文件操作

文件操作1. Linux系统调用及用户编程接口(API)    所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务为什么用户程序不能直接访问系统内核提供的服务呢? 由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不

2016-10-17 21:09:53 347

转载 linux进程调度介绍

一、Linux新老版本调度器对比在 2.6 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。这是由于调度器是使用一个复杂度为 O(n) 的算法实现的。在这种调度器中,调度任务所花费的时间是一个系统中任务个数的函数。换而言之,活动的任务越多,调度任务所花费的时间越长。在任务负载非常重时,处理器会因调度消耗掉大量的时间,用于任务本身的时间就非常少了。因此,这个算法缺乏可伸缩性

2016-10-16 21:43:46 350

转载 [数据结构]抽象数据类型&算法

第一章 绪论1.3 抽象数据函数数据类型:一个值的集合和定义在这个值集上一组操作的总称。例:C语言中,提供int,  char, float, double等基本数据类型,数组、结构体、共用体、枚举等构造数据类型,还有指针、空(void)类型等。用户也可用typedef自己定义数据类型typedef   struct  {            

2016-10-15 19:55:22 825 1

转载 [数据结构]基本概念和术语

第一章 绪论1.1 什么是数据结构数据结构研究的主要内容:    数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。1.2 基本概念和术语·数据(data):所有能被输入到计算机中,且被计算机处理的符号的集合是计算机操作对               象的总称。·数据元素(data element)

2016-10-15 19:53:54 1312 1

转载 并发无锁队列学习(数据结构)

提到并行计算通常都会想到加锁,事实却并非如此,大多数并发是不需要加锁的。比如在不同电脑上运行的代码编辑器,两者并发运行不需要加锁。在一台电脑上同时运行的媒体播放放器和代码编辑器,两者并发运行不需要加锁(当然系统调用和进程调度是要加锁的)。在同一个进程中运行多个线程,如果各自处理独立的事情也不需要加锁(当然系统调用、进程调度和内存分配是要加锁的)。在以上这些情况里,各个并发实体之间没有共享数据,所以

2016-10-13 22:25:53 801

转载 Linux内存寻址之一:内存地址分类以及MMU介绍

对于程序员来说,可以简单的把内存地址理解为一种访问存储单元的内容的一种方式。而对于80x86系列微处理器来说,我们需要区分三种地址: 1)逻辑地址 这种地址通常使用在机器语言里用于指定操作数或机器指令的地址。该类地址在著名的80x86分段体系架构中得到了很好体现,因此DOS程序员和windows程序员都不得不把他们的程序分成一段一段的(如代码段、数据段、堆栈段等等)。每一个逻辑地址都是由一

2016-10-12 18:38:00 382

转载 串行通信接口小结

处理器与外部设备通信的两种方式:并行通信传输原理:数据各个位同时传输。优点:速度快缺点:占用引脚资源多 串行通信传输原理:数据按位顺序传输。优点:占用引脚资源少缺点:速度相对较慢 串行通信按照数据传送方向,分为:单工:数据传输只支持数据在一个方向上传输半双工:允许数据在两个方向上传输,但是,在某一时

2016-10-11 20:26:07 368

转载 [UC/OS-II原理及应用]在ARM7上移植μC/OS-Ⅱ

第九章 在ARM7上移植μC/OS-Ⅱ9.1 移植规划9.1.1 编译器的选择适用于ARM处理器核的C编译器有很多种,例如:ADS、SDT、IAR、TASKING和GCC,其中使用比较多的是SDT、ADS和GCC。9.1.2 ARM7工作模式的选择ARM7处理器核具有用户、系统、管理、中止、未定义、中断和快中断7种模式。为了实现工作模式的切换,在移植

2016-10-10 18:00:17 1248

转载 单片机按键去抖原理

按键去抖由上图可以看出理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖动时间的长短和按键的机械特性有关,一般为5~10ms。通常我们手动按键然后释放,这个动作中稳定闭合的时间超过了20ms。因此单片机在检测键盘是否按下时都要加上去抖动操作,有专用的去抖动电路,也有专门的去抖动芯片,但通常我们采用软件延时的方法就可以解决抖动问题。/* 软

2016-10-09 21:08:34 1972

转载 C++类和类的定义

原文出处:http://www.yesky.com/22/194022.shtml 在面向对象的程序设计中,有经常接触类、对象等专业名词;到底什么是类、什么是对象呢?在程序又是怎样运用呢?类是面向对象程序设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,因为类是通过抽象数据类型的方法来实现的一种数据类型。类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的

2016-10-08 22:32:48 11020

转载 使用scanf函数时应该注意的问题

原文网址:http://blog.csdn.NET/mishifangxiangdefeng/article/details/71630021、scanf()中的变量必须使用地址。    2、scanf()的格式控制串可以使用空白字符或其它非空白字符,使用空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。使用非空白字符会使scanf()函数在读入时剔除

2016-10-07 21:15:34 571

转载 [uC/OS-II原理及应用]信号量集

第六章 信号量集6.1 信号量集的结构6.1.1 基本概念信号量集:信号量集实质上就是一个多输入、多输出的组合逻辑,输入为其他任务发出的多个信号,输出为这多个输入逻辑运算的结果。6.1.2 信号量集的结构    信号量集由一个标志组和多个等待任务控制块组成信号量集的功能:标志组、等待任务链表标志组:信号量集的所有信号

2016-10-06 21:03:11 541

转载 [UC/OS-II原理及应用]在51单片机上移植μC/OS-Ⅱ

第八章 在51单片机上移植μC/OS-Ⅱ8.1 μC/OS-Ⅱ移植的一般性问题8.1.1 可重入函数能允许同时被多个任务所调用,而不会通过函数中变量的耦合引起任务之间的相互干扰的函数叫做可重入函数。一个可重入函数只使用局部变量,因为函数的局部变量存储在任务的堆栈中,所以可保证不同的任务在调用同一个函数时不会发生冲突。如果函数一定要使用全局变量,则需要对使用的全局变量

2016-10-05 21:22:07 1088

转载 [UC/OS-II原理及应用]动态内存管理

第七章 动态内存管理7.1 内存控制块    μC/OS-Ⅱ对内存进行两级管理,即把一个连续的内存空间分为若干各分区,每个分区分为若干个大小相等的内存块。操作系统以分区为单位来管理动态内存,而任务以内存块为单位来获取和释放动态内存。7.1.1 可动态分配内存划分1. 内存块   μC/OS-Ⅱ以内存块为单位向应用程序提供动态内存。内存块的大小由用户定制。

2016-10-04 21:17:24 907

原创 ucos-II(五)

1 任务间的同步 制约关系:  直接制约关系  间接制约关系 直接制约关系源于任务间的合作间接制约关系源于资源的共享 在多任务合作工作的过程中,操作系统应该解决两个问题:一是各任务间应该具一种互斥关系,即对于某个共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放该资源后,等待的任务之一才能使用它;二是相关的任务在执行上要有先后次序,一个任务要等其伙伴

2016-10-03 19:10:23 452

原创 ucos-II(四)

1 uC/OS-II的中断过程uC/OS-II系统响应中断的过程是:系统接收到中断请求后,如果这是CPU处于中断允许状态(即中断时开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统会根据情况返回到被中止的任务去继续运行,或者转向运行另一个具有更高优先级别的就绪任务。函数OSIntEnter()的作用就是把全局变量OSI

2016-10-02 20:23:56 326

原创 ucos-II(三)

一、 任务控制块的初始化初始化任务控制块函数OSTCBInit() :INT8U OSTCBInit(           INT8U prio,      //任务的优先级别,保存在OSTCBPrio中           OS_STK * ptos,   //任务堆栈栈顶指针,保存在OSTCBStkPtr中           OS_STK * pbos,  //任务堆栈栈

2016-10-01 13:42:28 337

空空如也

空空如也

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

TA关注的人

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