- 博客(26)
- 收藏
- 关注
转载 ARM+LINUX字符型设备驱动编写框架
最近在ARM+LINUX嵌入式环境下学习字符型设备的驱动程序的编写,现整理如下:字符型设备的编写其实还是有规律可循的,我自己总结了一个框图。 驱动程序框架:驱动程序里最重要的就是 module_init(XXX_init);和module_exit(XXX_exit);第一句话是告诉内核编写的这段程序是驱动程序,也就是将驱动程序以模块的形式注册进内核。后一句就是用于将驱
2009-06-24 17:28:00 1466
转载 Linux字符设备驱动程序的编写框架
一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1、对设备初始化和释放; 2、把数据从内核传送到硬件和从硬件
2009-06-24 17:25:00 661
原创 由strcpy, memcpy说起
一、strcpy、memcpy和memset的区别。strcpy原型:extern char *strcpy(char *dest,char *src);用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。例:char a[100]
2009-06-24 15:08:00 1951
转载 C++的虚函数机制
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做
2009-06-24 14:44:00 816
转载 TCP/IP协议栈uIP在远程监测系统中的应用
介绍一个适用于8/16位单片机的嵌入式TCP/IP协议栈(uIP)在发电机远程监测系统中的应用重点阐述uIP的功能特性、体系结构和相关接口,并详细介绍如何在该协议栈上实现一个嵌入式Web服务器目前uIP已成功地移植到51单片机上 目前,随着互联网的发展,越来越多的工业测控设备已经将网络接入功能作为其默认配置,以实现设备的远程监控和信息分布式处理笔者曾参与某发电机射频监测仪的开发,该设备主
2009-06-24 14:33:00 2075
转载 关于uC/OS-II中优先级翻转问题
1 uC/OS-II的运行机制 在嵌入式系统的应用中,实时性是一个重要的指标,而优先级翻转是影响系统实时性的重要问题。本文着重分析优先级翻转问题的产生和影响,以及在uC/OS-II中的解决方案。 uC/OS-II采用基于固定优先级的占先式调度方式,是一个实时、多任务的操作系统。系统中的每个任务具有一个任务控制快OS_TCB,任务控制块记录任务执行的环境,包括任务的优先级,任务的堆栈指针
2009-06-24 14:22:00 1538
转载 volatile-进阶之二
先看一个例子:#define RP volatile unsigned int * *(RP)(PMU_PMCR) = (n volatile 是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。声明变量时使用了volatile修饰符,编译器就不会把这个变量缓存在寄存器里——每次
2009-06-22 09:30:00 552
转载 volatile-进阶之一
泛型:volatile——多线程程序员最好的朋友volatile修正符及让你的编译器为你检查竞态条件(race conditions) Andrei Alexandrescu 我不想破坏你的情绪,但这篇专栏针对多线程编程中最可怕的问题。如果说——正如前面一篇泛型所说的——写出意外安全(exception-safe)的程序很难,但写意外安全的程序和多线程编程比起来
2009-06-22 09:29:00 663
转载 volatile-初次相识
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 使用该关键字的例子如下: int volatile nVint; 当要求使用volatile声明的变量的值的时候,系统总是重新从它所在的内存
2009-06-22 09:18:00 495
转载 如果你一天在电脑前超过4小时
1、伸伸懒腰,松松骨,每小时都要做! 2、推下推下推下,每小时推松手筋!3、不想变硬颈,得转转转,两边转!4、千祈千祈千祈,每小时转转胳膊!5、办公坐姿有讲究!6、拿鼠标有正确姿势哦! 7、5个手指多运动! 8、记住每小时转转脚松松筋!9、记住每小时松松手拉拉筋! 10、记住每小时踢踢腿,拉拉筋
2009-06-21 17:12:00 585
转载 Linux环境下的Socket编程
什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种特殊
2009-06-18 09:41:00 469
转载 Windows Socket 网络编程
Windows Socket 网络编程一、客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1、打开一通信通道并告知本地主机,它
2009-06-18 09:37:00 1247
转载 3G的由来
什么是3G? 3G中的“G”是“Generation(世代、一代)”的意思,3G也就是第三代移动通信系统。3G的核心技术是CDMA: 说到CDMA,可能大家的第一印象就是先前联通的CDMA手机(现在属于电信)吧。其实“联通的CDMA手机”中的“CDMA”指的是与GSM对立的 2G通讯技术——cdmaOne(IS-95 A/B)。而我们今天说的CDMA则是指与FDMA、TDMA并列的
2009-06-18 09:02:00 1295
原创 今天琐记
早上8点多,经理突然说,根据上面安排,要及时开一个小会。会上做了重大的调整:问我的进展。然后说项目比较急,公司做了一定的调整,让我从编码转到写文档。实质是想给我调换工作内容。(直到后来,我才感觉到。) 我还不知道背后有没有什么原因,只是觉得,可能是自己的编码水平实在太烂了,导致效率奇低(相对而言),经理对我的编码速度不满。尽管到现在我仍然不会写进程间同步、互斥的代码。不过这几天,我
2009-06-16 17:42:00 568
原创 一道题的深入解析
试题1:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str );} 试题2:cha
2009-06-15 13:20:00 616
转载 初入职场--比较不错的文章
第一:不要认为停留在心灵的舒适区域内是可以原谅的。 每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去 关心别人,不愿意去思考别人还有什么没有想到。这在学生时代是很容易被理解的,有时候这样的同学还跟“冷酷”“个性”这些字眼沾边,算作是褒义。然而相反,在工作之后,你要极力
2009-06-15 11:39:00 902
转载 sizeof你懂多少?
基本概念篇 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type)
2009-06-15 09:11:00 982
转载 c语言面试题__指针篇
注:至今,我对C指针的理解还很有限,对很多应用还不熟,甚至是陌生。 1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const
2009-06-14 16:45:00 1424
转载 Windows时间函数大全
介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者算法的运行时间。编译器和操作系统为我们提供了很多时间函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合适
2009-06-11 09:06:00 614
转载 Windows CE串口通讯类的实现
串行通讯是目前计算机、通信和控制领域最基本的通信方式。但采用那种串口通讯类呢?一般的情况下是给你提供一个Pocket PC 2002的SDK例子程序。但到底SDK的程序和MFC的结构有很大的不同,对于想用MFC编写通信程序的人来说也不是很便利。 另一方面,由于Windows CE是一个基于Unicode的操作系统,并且Windows CE不支持Windows下常用的串行通信重叠I/O方式(OV
2009-06-05 15:40:00 535
转载 VC++ 的串口通讯
在VC++中有两种方法可以进行串口通讯。一种是利用Microsoft公司提供的ActiveX控件 Microsoft Communications Control。另一种是直接用VC++访问串口。下面将简述这两种方法。 一、Microsoft Communications Control Microsoft公司在WINDOWS中提供了一个串口通讯控件,用它,我们可以很简单的利用串口进行通讯。在
2009-06-03 13:56:00 573
转载 Windows CE下的串口通信编程
现在大多数的笔记本电脑都没有外置串口,这不奇怪,因为有更快更稳定的接口代替了串口。不过基于 Windows CE 的设备仍然保留着串口,而且目前看来串口的地位暂时不会动摇。目前流行的基于CE的设备很多都具有像导航、打电话等功能,而GPS、GSM/GPRS模块都是外置串口的终端设备,你想不用串口都不行。 上面我说了我有着自己的观点,我的观点就是不要把串口通信封装成类。我不明白为什么有些人总
2009-06-03 13:32:00 595
转载 MFC程序和Win32程序的关系
MFC把具有相当固定行为的WinMain内部操作封装在CWinApp中,把有着相当固定行为的WndProc内部操作封装在CFrameWnd中。 几乎可以说CWinApp用来取代WinMain在SDK程序中的地位,CFrameWnd取代SDK程序中窗口函数的地位。首先MFC程序需要下面函数库:(1) Windows C Runtime函数库:LIBC.LIB / MSVCRT.LIB /
2009-06-03 11:45:00 587
转载 如何学好VC
这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。万事开头难,为了帮助朋友们更快的掌握VC开发,下面我将自己的一点体会讲一下:1、需要有好的C/C++基础。正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字符界面程序的编写。这样做的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编
2009-06-03 11:43:00 1058 1
转载 $GPRMC解析
由于$GPRMC比较重要,所以重点讲解:$GPRMC(Recommended Minimum Specific GPS/TRANSIT Data) 帧头UTC时间状态纬度北纬/南纬经度东经/西经速度$GPRMChhmmss.sssA/V
2009-06-02 10:25:00 49544 5
转载 我眼中的NMEA-0183协议
NMEA是National Marine Electronics Association(美国国家海事电子协会)的缩写。该协会是一家专门从事海洋电子设备方面研究的民间机构,它制定了关于GPS(全球定位系统)电子设备之间的通信接口和协议的NMEA标准。NMEA-0183协议是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。
2009-06-02 09:54:00 4765
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人