- 博客(42)
- 资源 (3)
- 收藏
- 关注
转载 内核线程与用户线程
http://www.jianshu.com/p/5a4fc2729c17前言linux内核不存在整真正意义上的线程。linux将所有的执行实体都称之为任务(task),每一个任务在干年上都类似于一个单线程的进程,具有内存空间、执行实体、文件资源等。但是,linux下不同任务之间可以选择公用内存空间,因而在实际意义上,共享同一个内存空间的多个任务构成了一个进程,而这
2016-04-09 19:35:56 1590 1
原创 linux中断流程详解
<span style="font-size:12.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt">异常体系比较复杂,但是linux已经准备了很多的函数和框架,但是因为中断是和具体的开发板相关,所以中断需要我们自己来处理一些方面,但是这也是很少的一部分,很多公用的处理函数内核已经实现,linux内核搭建了一个非常
2016-04-01 01:37:28 3103
原创 GPIO中断
主要功能:通过两个GPIO(S5PV210_GPJ2(7)和S5PV210_GPJ3(0))作为输出,来控制两个作为中断的GPIO(S5PV210_GPH1(4)和S5PV210_GPH1(2)),从而触发两个LED灯( S5PV210_GPH0(6)和S5PV210_GPH0(7))。主要参考文件linux/interrupt.h, kernel/irq/manage.c, linux/irq.
2016-04-01 01:37:25 987
原创 Linux内核线程
1.内核线程介绍: 内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread)完成——独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。 内核线程只能由其它的内核线程创建,L
2016-04-01 01:37:23 543
原创 c库函数
字符与字符串 4 #define vi *( volatile unsigned int * )56 #define SET_ZERO( addr, bit ) ( (vi addr) &= ( ~ ( 1 7 #define SET_ONE( addr, bit ) ( (vi addr) |= ( 1 89 #define SET_B
2016-04-01 01:37:20 311
原创 linux C 中常用的字符串操作函数
点击(此处)折叠或打开/*字符串长度函数*/ size_t strlen(const char *string); /*不受限制的字符串函数*/ char *strcpy(char *dst, const char *src); char *strcat(char *dst, const char *src); int strcmp(const char *s1, const ch
2016-04-01 01:37:17 1456
原创 c疑难点
很容易得出p[-2]=10,p[-1]=20,p[0]=30,p[1]=40,p[2]=50,p[3]=60; p++,指针p往后移一个单位,则p=a+3,此时p[0]=*(p+0)=40; *p++, 是先取出*p的值,再执行p++操作, 则*p++=40,p=a+4; *++p,p先往后移一个单位,再取对应地址的值,则*++p=60; ++*p,
2016-04-01 01:37:14 325
原创 环形缓冲区的C语言实现
#include #include #include #include #include #define BUFFSIZE 1024 * 1024 #define min(x, y) ((x) pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; struct cycle_buffer
2016-04-01 01:37:05 6591
原创 SPI读写总结
SPI协议是主从模式:从机不主动发起访问,总是被动执行操作。CSN:片选信号。SCK:时钟信号。MOSI:master output slave input,即主机输出从机输入。可以理解主机写从设备。MISO:master input slave output,即主机输入从机输出。可以理解主机读从设备。SPI全称:Serial Peripheral interface,即串行外围设备接口。SPI协
2016-04-01 01:36:55 11673 1
原创 linux设备驱动归纳总结(三):6.poll和sellct
linux设备驱动归纳总结(三):6.poll和sellctxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx接下来会讲系统调用select在驱动中的实现,如果对系统调用select不太懂的话,建议先看书补习一下。xxxxxxxxxxxxxxxxxxxxxx
2016-04-01 01:36:45 807
原创 嵌入式C编程经验 之 全局变量猛于虎
/********************************************************************************* * Filename: 一线研发之声:嵌入式C编程经验 之 全局变量猛于虎 * Author:SedateFire E-mail:SedateFire@126.com * Version:1.001
2016-04-01 01:36:36 6084 2
原创 用户空间和内核空间通讯之【proc文件系统】
今天我们介绍另一种用户内核空间通信的方法:proc文件系统。 proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失。proc文件系统最开始的设计主要是为满足内核向用户态进程报告其状态而设计,并没有为输入做规定和说明。随着发展,现在的proc文件系统已经演变成一个“用户-内核”空间半双工的通信方式了(虽然目前已经开始有点混乱了,但某些
2016-04-01 01:36:33 1543
原创 linux设备驱动归纳总结(四):5.SMP下的竞态和并发
linux设备驱动归纳总结(四):5.多处理器下的竞态和并发xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将在上一节的基础上介绍支持多处理器和内核抢占的内核如何避免并发。除了内核抢占和中断外,由于多处理起的缘故,它可以做到多个程序同时执行。所以,进程除了
2016-04-01 01:36:31 814
原创 不要对知识与技术的遗忘感到焦虑
这段时间一直在复习linux设备驱动,越是复习越是觉得心慌,以前的知识好像全都忘记了,晚上打开衣柜,甚至认不出那是我去年冬天买的外套,感慨一下,我的记忆力大不如前了。以下内容转自同学的博客:http://blog.csdn.net/elevenxjz以下四段是我转自CSDN上的一篇帖子:1、一门技术必须多用才能掌握,最好的办法是在项目中运用。如果你在真实的项目中使用了某一项技术,那么印象就
2016-04-01 01:36:28 363
原创 linux设备驱动归纳总结(五):2.操作硬件——IO内存
linux设备驱动归纳总结(五):2.操作硬件——IO内存xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx在之前章节的驱动,都没有对硬件进行操作,接写来将从我之前学的裸板驱动开始,讲解在linux系统下如何访问硬件。xxxxxxxxxxxxxxxxxxxx
2016-04-01 01:36:18 356
原创 Linux 错误码列表
#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #defi
2016-04-01 01:36:09 540
原创 Linux驱动学习笔记(3)字符设备驱动
今天对程序进行编译,结果出现make -C /lib/modules/3.3.2-6.fc16.x86_64/build M=/home/jqzeng/workSpace/ldd3/ldd3-samples-1.0.0/scull LDDINC=/home/jqzeng/workSpace/ldd3/ldd3-samples-1.0.0/scull/../include modulesmake[1
2016-04-01 01:35:59 674
原创 存储管理
一、存储器分为两类:内存储器(内存)和外存储器(外存)。CPU只能直接访问内存。 二、存储体系结构:高速缓存——内存——外存,容量逐渐降低,存储速度逐渐降低。 三、存储管理的任务:内存的分配和管理;内存共享;存储保护;内存扩充;地址映射。 四、内存空间分为两个部分:系统区,存放操作系统且常驻内存;用户区,分配给用户使用。 五、存储管理方案:分区管理、页式管理、段式管
2016-04-01 01:35:57 1086
原创 NOR FLASH驱动程序
http://www.cnblogs.com/liulipeng/p/3377626.htmlNOR FLASH驱动程序 NOR NAND接口: RAM-Like,引脚多 引脚少,复用容量: 小 1M 2M 3M
2016-04-01 01:35:47 618
原创 arm中的PLL,MPLL,UPLL,FCLK,HCLK,PCLK的作用概述
前言: 不同公司,不同等级的ARM架构也是有许多共同的地方,因此以最为广泛使用的2440为实例讲解。一,PLL S3C2440 CPU主频可达400MHz,开发板上的外接晶振为12M,通过时钟控制逻辑的PLL(phase locked loop,锁相环电路)来倍频这个系统时钟。2440有两个PLL(phase locked loop)一个是MPLL,一个是UPLL。UP
2016-04-01 01:35:37 1006
原创 linux设备驱动归纳总结(三):4.ioctl的实现
linux设备驱动归纳总结(三):4.ioctl的实现一、ioctl的简介:虽然在文件操作结构体"structfile_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的函数操作。出于这样的原因,ioct
2016-04-01 01:35:28 1629
原创 为什么要使用copy_from_user?
原理上,内核态是可以直接访问用户态的虚拟地址空间的,所以如果需要在内核态获取用户态地址空间的数据的话,理论上应该是可以直接访问的,但为什么还需要使用copy_from_user接口呢?因为:直接访问的话,无法保证被访问的用户态虚拟地址是否有对应的页表项,即无法保证该虚拟地址已经分配了相应的物理内存,如果此时没有对应的页表项,那么此时将产生page fault,导致流程混乱,原则上如果没有页表项
2016-04-01 01:35:25 2227 1
原创 函数参数的传递问题(一级指针和二级指针)
原以为自己对指针掌握了,却还是对这个问题不太明白。请教! 程序1: void myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变
2016-04-01 01:35:23 416
原创 linux中gets()函数和fgets()函数
在学习c语言时遇到这样的问题,当需要输入字符串的时候,我们会用到gets()函数,当我们gcc编译时会遇到一个警告,这让我们编程时感觉很不爽。究其原因,就是gets()函数在输入时没有限定字符串的长度,而linux是很严谨的,所以这里给出一warning。 但我们编程时会有很多的替代函数,例如fgets()函数就完全可以替代了gets()函数。例如:输入字符串:char string[LEN
2016-04-01 01:35:20 1267 1
原创 Android WIFI模块分析
一:什么是WIFI WIFI是一种无线连接技术,可用于手机、电脑、PDA等终端。WIFI技术产生的目的是改善基于IEEE802.11标准的无线网络产品之间的互通性,也就是说WIFI是基于802.11标准的,但WIFI不等同无线网络。 二:Android平台下的WIFI模块 简单介绍一下,WIFI模块的基本功能: 1. 开关WIFI 除了在WIFI设置界面可以开关
2016-04-01 01:35:18 1854
原创 Android之Wifi学习(2)------连接Wifi
之前有一篇文章已经简单的讲过Wifi的基本知识,请见Android之Wifi学习(1)。本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡、关闭无线网卡、检查网卡状态、扫描网络、扫描结果、连接Wifi、断开Wifi、Wifi连接状态。运行效果图如下:其中连接Wifi是比较让我头疼的。需要在程序中进行连接,这会有两种情况。第一,Wifi没有密码,可以直接连接;第二,Wifi有密码,在程序
2016-04-01 01:35:15 483
原创 Android之Wifi学习(1)
在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。简单介绍一下:大致可以分为四个主要的类ScanResult,wifiConfiguration,WifiInfo,WifiManager(1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。(2)wifiConfiguration
2016-04-01 01:35:05 826 1
原创 Linux驱动学习之:PWM驱动
PWM(Pulse Width Modulation)——脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域。s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,因此用s3c2440可以很容易地实现PWM功能。载有s3c2440芯片的Mini2440 板子带有一个蜂鸣器,它是
2016-04-01 01:35:03 598
原创 工薪阶层如何用5年理出100W?绝对实用方法
100万人民币,对于身处帝都或者国内大多数一线城市来说,并不算什么太大数字,也不能解决什么根本性问题,但是对于一个刚刚工作几年的程序员来说,却是一个难以实现的人生目标。 不过作为过来人我要告诉你,合理的做好规划,这个目标是不难实现的,并且五年后的你得到的不只是100万,而是人生通往成功的稳固基石。 那么步入正题,作为一个程序员,如何攒够100万呢? 资金的积累无外乎开源节流
2016-04-01 01:35:00 533 1
原创 程序员到底是一个什么职业?
为什么有人在技术造神 大家应该已经感受到,技术圈这两年已经和娱乐圈创业圈差不多的氛围了,这其实是有原因的。 最主要的原因是,创业公司和创业媒体越来越多,他们需要大量的程序员投身到创业这个高风险的行业中,而造神,正是让程序员们自动跳进火坑的绝佳办法。不是说程序员不能创业,我是说,创业媒体们故意模糊了创造和创业的界限,把程序员们的创造冲动偷换概念,鼓吹了太多不适合的人去创业。
2016-04-01 01:34:58 1010
原创 VoIP的原理及技术
VoIP的原理及技术 通过因特网进行语音通信是一个非常复杂的系统工程,其应用面很广,因此涉及的技术也特别多,其中最根本的技术是VoIP (Voice over IP)技术,可以说,因特网语音通信是VoIP技术的一个最典型的、也是最有前景的应用领域。因此在讨论用因特网进行语音通信之前,有必要首先分析VoIP的基本原理,以及VoIP中的相关技术问题。 一、 VoIP的基本传输过程
2016-04-01 01:34:48 9838 1
原创 voip基本原则
IP电话的五项基本原则 IP电话系统建设应遵循五项基本原则,它们是:延时400毫秒的基本原则,99.9999%可靠电信原则,网络的开发原则,后方管理的保障原则。 1、 延迟400毫秒的基本原则 能否将语音业务集成到数据网络中,关键就是如何保证QoS。对于IP电话而言,保证其QoS就怎样保证语音传输的最低延迟及怎样减少丢包率。据专家介绍,只有端到端延迟降低到400毫秒以下,将丢包
2016-04-01 01:34:38 592
原创 H323、H248(MGCP)、SIP三协议浅析
转载自http://blog.csdn.net/evsqiezi/article/details/43021891 在传统电话系统中,一次通话从建立系统连接到拆除连接都需要一定的信令来配合完成。同样,在IP电话中,如何寻找被叫方、如何建立应答、如何按照彼此的数据处理能力发送数据,也需要相应的信令系统,一般称为协议。目前在国际上,比较有影响的IP电话方面的协议包括ITU-T提出的H.3
2016-04-01 01:34:29 3574
原创 H323、H248(MGCP)、SIP三协议浅析
转载自http://blog.csdn.net/evsqiezi/article/details/43021891 在传统电话系统中,一次通话从建立系统连接到拆除连接都需要一定的信令来配合完成。同样,在IP电话中,如何寻找被叫方、如何建立应答、如何按照彼此的数据处理能力发送数据,也需要相应的信令系统,一般称为协议。目前在国际上,比较有影响的IP电话方面的协议包括ITU-T提出的H.3
2016-04-01 01:34:26 1159
原创 uboot移植总结
1.uboot的介绍及体系结构 1.1 uboot的介绍 Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks, QNX, RTEMS, ARTOS,LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、
2016-04-01 01:34:24 3056
原创 linux设备驱动归纳总结(八):2.match.probe.remove
linux设备驱动归纳总结(八):2.总线、设备和驱动的关系xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx上一节介绍了总线、设备和驱动函数的注册,这节着重介绍它们三者的关系,和上一节一样,我模拟一条usb总线,一个usb鼠标设备和一个usb鼠标驱动函数,当然
2016-04-01 01:34:21 1001
原创 Source Insight 3.5安装问题
今天在装Source Insight 3.5的时候出现了一些问题,搞了很久才把它搞定,现在这里mark一下: 首先之前我的系统中Source Insight 3.5都是可以用的,序列号来自网上。后来在重装Source Insight 3.5的时候,一切都很顺利,在装完的最后,弹出“An invalid source insight serial number was detected”
2016-04-01 01:34:19 1650
原创 Linux下samba的安装与配置
背景 在window7下面虚拟了一个CentOS6.3,为了学习命令行就没有装图形包,所以我的CentOS是黑屏的那种,呵呵,当然了,VMWare提供的增强功能我就不能用了(或许能吧,我不知道怎么设置?),正好,就借这个机会逼着自己把samba学习一下,说“逼”一点也不夸张,我从昨天下午6点到现在8点了都没合眼,当然不睡觉还有其他的原因。下面是我这一夜的成果,写出
2016-04-01 01:34:16 874
原创 嵌入式软件笔试(转载)
时间:2005-06-25 地点:深圳南山区 方式:闭卷,写程序 1、将一个字符串逆序 2、将一个链表逆序 3、计算一个字节里(byte)里面有多少bit被置1 4、搜索给定的字节(byte) 5、在一个字符串中找到可能的最长的子字符串 6、字符串转换为整数 7、整数转换为字符串 1、将一个字符串逆序 2、将一个链表逆序 3、计算一个字节里(byte)里面有多少bit被置1 4、搜
2016-04-01 01:34:07 417
原创 char *s="string"和char s[]="string"的区别
char *s="string"的内容是不可以改的void main(){ char* pStr1 = "Hello!"; char pStr2[] = "Hello!"; change(pStr1); change(pStr2);}void change(char* pInstr){ pInstr[0]='O';}两种change编译都可以通过,但发现第二个chan
2016-04-01 01:34:04 485
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人