2014年3月14日

随机数洗牌

摘要: 扑克牌洗牌是我们生活中比较喜欢玩的一个游戏。那么我们有没有什么办法自己设计一个扑克牌洗牌的方法呢?在c运行库当中有一个随机函数rand,它可以生成0~32767之间的任意数。那么有没有可能利用这么一个函数对我们扑克牌进行随即洗牌呢? 在这里我抛砖引玉一下,谈一谈自己目前已经看到的两个算法。欢迎朋友们谈一谈其他的方法。随机数洗牌1)任意洗牌 步骤如下所示: a)首先生成一个数组,大小为54,初始化为1~54 b)按照索引1到54,逐步对每一张索引牌进行洗牌,首先生成一个余数 pos1 = rand %54,pos2=rand %54,那么我们的索引牌就和这两个余数牌进... 阅读全文

posted @ 2014-03-14 16:24 程良 阅读(248) 评论(0) 推荐(0) 编辑

itoa函数递归实现

摘要: 库函数中有atoi函数,用意是将字符形式输入的数据转换成数字,而库函数有没有提供一个将数字转换成字符的函数呢?答案是有的,而且功能很是强大,那就是sprintf()、snprintf()格式化转换函数,它的原型是:int sprintf(char *buf,const char *format,...) int snprintf(char *buf,int size,const char *format,...) 以上都是将数字转换成字符的形式的标准库函数。那么有没有别的自己实现的函数呢?好看看下面递归实现的:void _itoa(int value,char *str,int radix.. 阅读全文

posted @ 2014-03-14 15:59 程良 阅读(696) 评论(0) 推荐(0) 编辑

Socket编程详解

摘要: 什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的.. 阅读全文

posted @ 2014-03-14 15:15 程良 阅读(2141) 评论(0) 推荐(0) 编辑

网络之基础知识

摘要: TCP/IP是个协议集,根据OSI的七层理论,TCP/IP分为四层,分别是:应用层,传输层,网络层,数据链路层.我们一般说TCP在传输层,而IP在Internet层,TCP/IP的应用程序包括我们平时经常用到的Ping,Telnet,Ftp,Finger等等 一、IP地址的概念 我们知道因特网是全世界范围内的计算机联为一体而构成的通信网络的总称。联在某个网络上的两台计算机之间在相互通信时,在它们所传送的数据包里都会含有某些附加信息,这些附加信息就是发送数据的计算机的地址和接受数据的计算机的地址。象这样,人们为了通信的方便给每一台计算机都事先分配一个类似我们日常生活中的电话号码一样的标... 阅读全文

posted @ 2014-03-14 11:05 程良 阅读(424) 评论(0) 推荐(0) 编辑

2014年3月13日

进程上下文&中断上下文

摘要: 文章出自http://hi.baidu.com/bkhcvzdvmjfkpyr/item/5444001fa68d065bf1090ea6处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。进程上下文用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。中断 阅读全文

posted @ 2014-03-13 11:53 程良 阅读(207) 评论(0) 推荐(0) 编辑

linux下设备驱动的结构&编译&加载

摘要: 构造和运行模块insmodmodprobermmod用来装载模块到正运行的内核和移除模块的用户空间工具。#includemodule_init(init_function);module_exit(cleanup_function);用于指定模块的初始化和清除函数的宏。__init__initdata__exit__exitdata仅用于模块初始化或清除阶段的函数(__init 、__exit)和数据 (__initdata、__exitdata) 标记。标记为初始化的项目会在初始化结束后丢弃;而退出项目在内核为被配置为可卸载模块的情况下被丢弃。内核通过将相应的目标对象放置在可执行文件的特殊E 阅读全文

posted @ 2014-03-13 11:38 程良 阅读(268) 评论(0) 推荐(0) 编辑

自旋锁&信号量

摘要: 1. 自旋锁 Linux内核中最常见的锁是自旋锁。一个自旋锁就是一个互斥设备,它只能有两个值:"锁定"和"解锁"。如果锁可用,则"锁定"位被设置,而代码继续进入临界区;相反,如果锁被其他进程争用,则代码进入忙循环并重复检查这个锁,直到锁可用为止。这个循环就是自旋锁的"自旋"。自旋锁最多只能被一个可执行的线程持有。如果一个执行线程试图获得一个被争用的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用。注意,同一个锁可以用在多个位置。缺点:一个被争用的自旋锁使得请求它的线程在等待锁重新可用时自旋(特别浪费处理器 阅读全文

posted @ 2014-03-13 11:31 程良 阅读(1111) 评论(0) 推荐(0) 编辑

嵌入式Linux的启动过程

摘要: 1.了解 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了巨大的发展。虽然 Linux 在桌面 PC 机上的普及程度远不及微软的 Windows 操作系统,但它的发展速度之快、用户数量的日益增多,也是微软所不能轻视的。而近些年来 Linux 在嵌入式领域的迅猛发展,更是给 Linux 注入了新的活力。 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(bootloader), Linux 内核,文件系统,应用程序。其中 bootloader是系统启动或复位以后执行的第一段代码,.. 阅读全文

posted @ 2014-03-13 11:24 程良 阅读(2461) 评论(1) 推荐(0) 编辑

【转载】vim 中文帮助手册的安装

摘要: 本文出处http://hi.baidu.com/bkhcvzdvmjfkpyr/item/9c238224c1a69498b6326360 vim自带的帮助手册是英文的, 对平时编程的人来说没有多大阅读困难, 何况还有"星级译王"呢, 可偏偏有一帮人将其翻译成了中文, 可偏偏我又挡不住诱惑将它安装了, 唉.......又痛失一个学习英文的好机会, 下不为例.大家看看我的中文帮助界面吧:(--- 图2 ---)安装方法:在下面的网站下载中文帮助的文件包:http://vimcdoc.sf.net (English)http://vimcdoc.sourceforge.net/ 阅读全文

posted @ 2014-03-13 10:53 程良 阅读(270) 评论(0) 推荐(0) 编辑

2014年3月12日

面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)

摘要: /*-------------------------*先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410)以watchdog (看门狗,俗称狗中断)为例,编写简单的中断(驱动)-------------------------*/#include #include #include #include #include #include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("cheng");typedef struct mydev{ 阅读全文

posted @ 2014-03-12 20:34 程良 阅读(373) 评论(0) 推荐(0) 编辑

导航