- 博客(17)
- 资源 (22)
- 问答 (1)
- 收藏
- 关注
原创 secureCRT 日志保存并记录每条记录的时间
对于嵌入式工程师来说,和设备交互是工作中必不可少的事。在同事中串口工具一般都是使用secureCRT 和Xshel ,具体那个好在此不做讨论。我觉得都很好,看个人喜好。对于嵌入式系统工程师来说,系统的启动时间是个重要指标。因此能够准确测量系统每个模块所用时间尤其重要。下面介绍一下在使用secureCRT过程中一个很好用的技巧,保存每条记录并打印记录的时间先
2017-06-22 13:30:18 25431 1
原创 Linux 内核中的并发--信号量与互斥体
信号量(down操作->临界区->up操作)信号量的使用方式和自旋锁类似,进程只有得到信号量才能执行临界区代码但与自旋锁不同的是,当进程获取不到信号量时并不是原地打转而是睡眠等待中断服务函数不能进行睡眠,因此信号量不能用于中断当中,如果中断函数一定要用信号量可以使用尝试上锁(down_trylock)进行操作,不能获取锁就立刻返回,以避免阻塞,通过返回值判读可执行与否
2017-06-01 18:16:53 1290
原创 Linux 内核中的并发--自旋锁
自旋锁(获取自旋锁->临界区->释放自旋锁)自旋锁的名称源于它的工作原理:尝试获取一个自旋锁,如果锁空闲就获取该自旋锁并继续向下执行;如果锁已被占用就循环检测该锁是否被释放(原地打转直到锁被释放)只有在占用锁的时间极短的情况下使用;不能递归使用一个自旋锁(形成死锁);占用锁时不能使用可能引起进程调度的函数,如copy_xx_user()、kmalloc()、msleep()…自旋锁主要
2017-06-01 18:02:41 777
原创 Linux 内核中的并发--中断屏蔽
中断屏蔽(进入临界区之前屏蔽中断,退出临界区之后开启中断):由于进程调度依赖中断实现,因此进程抢占产生的竞态也得以避免;保证中断服务函数不访问临界区;关中断是一种很谨慎的操作,而且长时间屏蔽中断很危险,要细心使用。在SMP多处理器下,该方式就失效了,因为开关中断都是对本cpu的操作中断屏蔽相关函数:local_irq_disable(); //屏蔽所有中断.
2017-06-01 17:32:19 3617
原创 Linux 内核中的并发--概念
基本概念:并发指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态。当多个进程、线程或中断同时访问同一个资源,可能导致错误.进程上下文:应用程序陷入内核运行时所处的内核环境中断上下文:中断服务程序执行时所处的内核环境抢占式内核:用户程序在执行系统调用期间可以被高优先级进程抢占非抢占式内
2017-06-01 17:22:32 831
原创 Linux内核定时器--timer_list
定时器:linux操作系统提供了一个内核定时器内核定时器可在未来的某个特定时间点调度执行某个函数,完成指定任务linux内核定时器提供了一种异步处理的机制用户通过设置将来某一时刻的滴答值来实现定时功能假设HZ的值为200,Linux定时器最短定时时间为5ms,小于该时间的定时可直接通过硬件定时器完成定时器使用过程:定时器接口函数介绍:
2017-06-01 16:54:07 935
原创 Linux 内核延时
linux的时间概念:Linux系统定时器是可编程的频率中断处理器,此频率为每秒的定时器节拍数,对应内核变量HZHZ是一个与体系结构相关的常数:Linux为大多数平台提供HZ值范围为50-1200x86 PC平台默认为1000,我们的内核为200内核中有一个非常重要的全局变量:jiffies它是一个无符号32位整数,用来记录自内核启动以来的时钟滴答总数(即每
2017-06-01 16:43:08 751
原创 Linux内核异步数据处理--kfifo
引题:在驱动编程中,经常会遇到异步数据处理的情况,比如采用中断或定时器处理数据输入输出等情况此时数据的采集与处理往往不同步,于是驱动编程中数据采集方需要将采集的数据暂时放到一个缓冲区中,使用方在需要处理数据时从缓冲区中将数据读出驱动编程中常采用队列这种数据结构来实现整个过程,我们可以选择自己编写一个队列,也可以利用内核中现有队列kfifo来实现kfi
2017-06-01 16:29:23 2478
原创 Linux内核中断底半部--概述
基本概念:在大多数真实的系统中,当中断来临时,要完成的工作往往不能立即完成,而是需要大量的耗时处理。中断处理通常分两个部分:顶半部:一个急切抢占并与硬件交互的顶半部底半部:完成重大工作负载,执行过程中所有中断都是使能的,可被打断。中断的底半部实现机制:软中断(softirq):基本的底半部机制,现在很少使用微线程(tasklet):微
2017-06-01 16:06:45 601
原创 Linux内核中断底半部处理--工作队列
工作队列的使用过程:工作队列相关函数介绍:#include /*头文件包含*/1.工作队列的创建及销毁:定义一个工作队列结构体指针static struct workqueue_struct *key_workqueue;创建工作队列struct workque
2017-06-01 16:05:12 3115
原创 Linux内核中断底半部处理--内核微线程
内核微线程使用过程:内核微线程相关函数介绍:#include //头文件包含微线程创建:方法一(采用宏):DECLARE_TASKLET(name, func, data);参数:微线程名称、任务处理函数、任务处理函数的参数/*无需提前定义,直接写上na
2017-06-01 15:35:16 689
原创 Linux内核中断处理
基本概念: Linux操作系统下同裸机程序一样,需要利用中断机制来处理硬件的异步事件但用户态不允许中断事件,因此中断必须由设备驱动程序来接收与处理如果CPU接收到一个中断,它会停止一切工作,调用中断处理函数,因为进程调度依赖中断,此时进程调度也会停止所以就要求我们的中断处理一定要快中断处理程序运行在中断上下文中断处理程序运行在中断上下文中:上下文:内核运
2017-06-01 14:58:36 632
原创 Linux内核信号
内核信号的概念:信号是UNIX进程间通信的一种标准方式,在最早期的UNIX系统中已经存在。我们在系统编程中了解过,信号可以作为进程间通信的一种方式同样我们编写的驱动也可以使用信号通知应用层及其它进程特定事件的发生内核信号的使用:#include //内核信号接口函数头文件#include //current创建一个信号结构体:
2017-06-01 14:16:05 1281
原创 Linux 内核 线程
内核线程的概念:内核线程类似于用户进程,通常用于并发处理些工作,它是一种在内核空间实现后台任务的方式,并且可以参与时间片轮转调度内核线程可以进行繁忙的异步事件处理,也可以睡眠等待某事件的发生,内核线程可以访问内核函数和数据结构很多设备驱动程序都是用了内核线程来完成辅助任务,例如:USB设备驱动程序中的khubd内核线程用来监控USB集线器,并在USB被热插拔的时候配置USB设备内核
2017-06-01 14:08:10 509
原创 Linux kernel 中的的等待队列(阻塞式)
等待队列在Linux内核中用来阻塞或唤醒一个进程,也可以用来同步对系统资源的访问,还可以实现延迟功能等待队列接口函数介绍:#include //头文件包含1.定义、初始化等待队列(指向等待队列链表)定义一个等待队列头wait_queue_head_t my_queue;初始一个等待队列头
2017-06-01 12:25:27 3735
原创 Linux kernel轮询与等待队列
根据不同需求,linux内核有不同I/O操作模型:非阻塞:进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直到可以进行操作为止阻塞:指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作条件后再进行各项操作等待队列:用来阻塞或唤醒一个进程,实现阻塞I/O访问轮询操作:非阻塞I/O访问的应用程序通常使用select()和poll()系统调
2017-06-01 12:09:45 812
原创 Linux kernel 中的轮询操作-select poll
轮询操作:应用程序通常会使用select()系统调用查询是否可对设备进行无阻塞的访问。该函数通过系统调用最终会引发设备驱动中的poll()函数被执行该机制还可以实现一个用户进程对多个设备驱动文件的监测轮询操作应用层接口函数介绍:文件描述符集合的基本操作:文件描述符集合的变量的定义fd_set fds;清空描述符
2017-06-01 11:44:21 2339
xgcom-0.04.2.tgz
2016-07-05
framebuffer 一行一行memcpy耗时,直接写int很快,大侠们这是为什么?
2018-12-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人