04 2011 档案

摘要:uCOS-II在ARM上的移植 详细方法:http://blog.eccn.com/space.php?uid=170730&do=blog&id=4847 移植工作介绍实际上uC/OS-II可以简单地看作是一个多任务调度器,在这个任务调度器上完善地添加了与多任务操作系统相关的一些系统服务,如信号量 阅读全文
posted @ 2011-04-30 20:31 hnrainll 阅读(1842) 评论(0) 推荐(0)
摘要:源地址:http://blog.eccn.com/space.php?uid=170730&do=blog&id=4847 UCOS-II移植ARM的笔记(转贴) UCOS-II的移植需要提供2,3个文件分别介绍如下: 一:OS_CPU.H 1 与编译器有关的数据类型 经典的全局变量定义,可以套用, 阅读全文
posted @ 2011-04-30 20:30 hnrainll 阅读(6356) 评论(2) 推荐(0)
摘要:一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由 阅读全文
posted @ 2011-04-30 20:24 hnrainll 阅读(769) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <malloc.h>voidprint(char*,int);main(){char*s1="abcde";char*s2="abcde";char s3[] ="abcd";long int*s4[100];char*s5="abcde";int a=5;int b=6;//a,b在栈上,&a>&b 地址反向增长printf("variables address in main function:\n\s 阅读全文
posted @ 2011-04-30 20:17 hnrainll 阅读(894) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 100char bak_str[MAX];void Del_Blank(char *p){ int i = 0; int j = 0; int flag = 0; while(*(p + i) != '\0') { while ( *(p+i) == ' ' ) { i++; flag = 1; } if(1 == flag) { *(bak_str + j) = ' '; j 阅读全文
posted @ 2011-04-30 20:05 hnrainll 阅读(434) 评论(0) 推荐(0)
摘要:在Linux下使用ipmsg(飞鸽传书)ipmsg是个不错的局域网通讯软件,非常小巧,无需服务器端,使用非常方便。在Linux下使用需要自行编译。在官方网站下载源码:http://www.ipmsg.org/index.html.en(http://www.ipmsg.org/archive/g2ipmsg-0.9.5.tar.gz)解压后需要修改源码以支持中文:文件:src/codeset.c原文:#define IPMSG_PROTO_CODE "CP932"改成:#define IPMSG_PROTO_CODE "GBK"然后,编译之,为了方便在任 阅读全文
posted @ 2011-04-30 00:36 hnrainll 阅读(5464) 评论(0) 推荐(1)
摘要:http://code.google.com/p/qipmsg/downloads/listdeb,rpm包都有!官网:http://ipmsg.org/ 阅读全文
posted @ 2011-04-30 00:27 hnrainll 阅读(735) 评论(0) 推荐(0)
摘要:/***********************************************************本人(ypxing)根据下面的协议,C语言写的ipmsg(聊天,文件/文件夹传输)*请参见:http://blog.chinaunix.net/u1/35100/showart_689330.html**********************************************************/最近看到一些朋友在编写网络程序是遇到一些问题,故把以前做IPMSG时翻译的文档贴过来,希望对网络编程新手有所帮助,在寻找编程项目的同学们也可参照此文档写出自己的I 阅读全文
posted @ 2011-04-30 00:15 hnrainll 阅读(518) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: link.c * Description: * Version: 1.0 * Created: 2011骞?4鏈?9鏃?17鏃?2鍒?3绉? * Revision: none * Compiler: gcc * Author: wen hao (WH), hnrain1004@gmail.com * Company: sunplusapp * *************************************** 阅读全文
posted @ 2011-04-29 18:17 hnrainll 阅读(2203) 评论(0) 推荐(0)
摘要:已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数strcpy char *strcpy(char *strDest, const char *strSrc);{ assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 char *address = strDest; // 2分 while( (*strDest++ = * strSrc++) != ‘\0 阅读全文
posted @ 2011-04-29 15:55 hnrainll 阅读(8485) 评论(0) 推荐(2)
摘要:原地址:http://www.cnblogs.com/tuyile006/archive/2007/06/07/774734.html本章首先引入最优化的概念,然后介绍一种直观的问题求解方法:贪婪算法。最后,应用该算法给出货箱装船问题、背包问题、拓扑排序问题、二分覆盖问题、最短路径问题、最小代价生成树等问题的求解方案。1.1 最优化问题 本章及后续章节中的许多例子都是最优化问题( optimization problem),每个最优化问题都包含一组限制条件( c o n s t r a i n t)和一个优化函数( optimization function),符合限制条件的问题求解方案称为可 阅读全文
posted @ 2011-04-29 14:23 hnrainll 阅读(1047) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: link.c * Description: * Version: 1.0 * Created: 2011骞?4鏈?9鏃?17鏃?2鍒?3绉? * Revision: none * Compiler: gcc * Author: wen hao (WH), hnrain1004@gmail.com * Company: sunplusapp * *************************************** 阅读全文
posted @ 2011-04-29 14:12 hnrainll 阅读(1405) 评论(0) 推荐(0)
摘要:打开多个文件:1.vim还没有启动的时候:在终端里输入vim file1 file2 ... filen便可以打开所有想要打开的文件2.vim已经启动输入:open file可以再打开一个文件,并且此时vim里会显示出file文件的内容。同时显示多个文件::split:vsplit在文件之间切换:1.文件间切换Ctrl+6—下一个文件:bn—下一个文件:bp—上一个文件对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。2.在窗格间切换的方法Ctrl+w+方向键——切换到前/下/上/后一个窗格Ctrl+w+h/j/k/l ——同上Ctrl+ww——依次向后切换 阅读全文
posted @ 2011-04-29 13:45 hnrainll 阅读(127739) 评论(4) 推荐(1)
摘要:1、打 开 新 标 签 页启动 Vim 时用 "vim -p filename ...":tabe[dit] *:tabe* *:tabedit* *:tabnew*:tabnew 在当前标签页之后打开带空窗口的新标签页。:tabe[dit] [++opt] [+cmd] {file}:tabnew [++opt] [+cmd] {file} 打开新标签页并编辑 {file},其余和 |:edit| 类同。:tabf[ind] [++opt] [+cmd] {file} *:tabf* *:tabfind* 打开新标签页并编辑 'path' 里的 {file 阅读全文
posted @ 2011-04-29 13:45 hnrainll 阅读(12471) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: test.c * Description: 将10进制数转换成为其他任意进制数 * Version: 1.0 * Created: * Revision: none * Compiler: gcc * Author: wen hao * Company: * ************************************************************************/#include 阅读全文
posted @ 2011-04-29 10:41 hnrainll 阅读(621) 评论(0) 推荐(0)
摘要:原地址:http://www.cnblogs.com/hicjiajia/archive/2011/01/20/1940154.html一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。与DOS和早期的Windows不同,Unix/Linux系统是真正实现多任务操作的系统,可以说,不使用多进程编程,就不能算是 阅读全文
posted @ 2011-04-28 18:01 hnrainll 阅读(612) 评论(0) 推荐(1)
摘要:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://tuhao.blogbus.com/logs/22833492.htmlextern char **environ;int execl(const char*fullpath, const char*arg, ...);int execlp(const char*file, const char*arg, ...);int execle(const char*fullpath, const char*arg, ..., char* constenvp[]);int execv(const char*fullpath, 阅读全文
posted @ 2011-04-28 18:00 hnrainll 阅读(648) 评论(0) 推荐(0)
摘要:源地址:http://blog.csdn.net/copal/archive/2010/04/06/5454279.aspx1. 概念按照 POSIX, 异步 (外部) 信号发送到整个进程.所有线程共享同一个设置, 即通过 sigaction 设置的线程处置方法.每个线程有自己的信号掩码, 线程库根据该掩码决定将信号发送到哪个线程.由于Linux 线程实现上的独特性, 外部信号始终发送到特定的线程. 2. 例子view plaincopy to clipboardprint?#include<pthread.h>#include<stdio.h>#include< 阅读全文
posted @ 2011-04-28 06:33 hnrainll 阅读(5220) 评论(0) 推荐(0)
摘要:MPlayer名称概要说明一般注记播放选项 ( 仅用于 MPLAYER)分路器 / 媒体流选项OSD/ 字幕选项音频输出选项 ( 仅用于 MPLAYER)视频输出选项 ( 仅用于 MPLAYER)解码 / 滤镜选项编码选项 ( 仅用于 MENCODER)键盘控制SLAVE 模式协议文件示例BUGS作者标准声明名称 mplayer − Linux下的电影播放器mencoder − Linux下的电影编码器概要 mplayer [选项] [ 文件 | URL | 播放列表 | - ]mplayer [全局选项] 文件1 [特定选项] [文件2] [特定选项]mplayer [全局选项] {一组文件 阅读全文
posted @ 2011-04-26 06:35 hnrainll 阅读(9587) 评论(0) 推荐(0)
摘要:播放文件使用 MPlayer 播放媒体文件最简单的方式是:mplayer <somefile>MPlayer 会自动检测文件的类型并加以播放,如果是音频文件,则会在命令行中显示该播放文件的状态信息;而假如是视频文件的话,则会打开一个新的播放窗口。倒退与快进在播放文件的时候,你可以通过以下三组快捷键来对播放进程进行倒退与快进操作:左方向键和右方向键:分别执行倒退 10 秒和快进 10 秒操作下方向键和上方向键:分别执行倒退 1 分钟和快进 1 分钟操作下翻页键和上翻页键:分别执行倒退 10 分钟和快进 10 分钟操作播放 DVD虽然 MPlayer 不支持 DVD 菜单,但是却能够播 阅读全文
posted @ 2011-04-26 06:34 hnrainll 阅读(2430) 评论(0) 推荐(0)
摘要:首先说明,虽然我已经成功地做到了调用MPlayer并给它发送命令然后读取结果,但是具体的过程细节到底是怎样的我还不是很清楚。同样是因为这样的原因,我在文中的叙述可能有技术上的错误,欢迎指正popen()函数用于打开一个进程,返回结果是一个FILE*类型,这个返回值根据打开方式的不同,分别指向使用popen()打开的程序的输入流或输出流,可以直接当成一个普通文件来使用。popen()的第一个函数是命令行,就是要执行的程序的命令,第二个参数可以是"r“或"w",这和fopen是差不多的,一个是读取,这时候返回结果可以当成打开的进程的输出流,另一个w就是输入,返回结果可 阅读全文
posted @ 2011-04-26 06:18 hnrainll 阅读(3326) 评论(0) 推荐(0)
摘要:本来是因为毕业设计要用到mplayer的slave模式 ,找了半天没有中文的,所以花了一晚上的时间翻译了下,官方的帮助文档,发在blog,大家交流下,小弟英语水平一般,就一个cet-4水平,要是哪里大牛勿鄙.....==============================================================================###################### Translate by Killua ######################slave模式协议-------------------在关于slave模式,MPlayer为后台 阅读全文
posted @ 2011-04-26 00:05 hnrainll 阅读(3338) 评论(0) 推荐(1)
摘要:很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种,比如main()函数运行结束、在程序的某个地方用exit() 结束程序、用户通过Ctrl+C或Ctrl+break操作来终止程序等等,因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理。方法就 是用atexit()函数来注册程序正常终止时要被调用的函数。 atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:int atexit (void (*)(void)); 在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的 阅读全文
posted @ 2011-04-25 08:38 hnrainll 阅读(485) 评论(1) 推荐(0)
摘要:进程间通信的一种方式是使用UNIX套接字,人们在使用这种方式时往往用的不是网络套接字,而是一种称为本地套接字的方式。这样做可以避免为黑客留下后门。创建使用套接字函数socket创建,不过传递的参数与网络套接字不同。域参数应该是PF_LOCAL或者PF_UNIX,而不能用PF_INET之类。本地套接字的通讯类型应该是SOCK_STREAM或SOCK_DGRAM,协议为默认协议。例如:int sockfd;sockfd = socket(PF_LOCAL, SOCK_STREAM, 0);绑定创建了套接字后,还必须进行绑定才能使用。不同于网络套接字的绑定,本地套接字的绑定的是struct sock 阅读全文
posted @ 2011-04-24 20:23 hnrainll 阅读(3170) 评论(0) 推荐(0)
摘要:在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t;struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具体如下:/* Structure 阅读全文
posted @ 2011-04-24 20:22 hnrainll 阅读(48523) 评论(0) 推荐(2)
摘要:struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */char sa_data[14]; /* 14 bytes of protocol address */};sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。sa_data是14字节协议地址。此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构sockaddr_in(在net 阅读全文
posted @ 2011-04-24 20:21 hnrainll 阅读(9880) 评论(0) 推荐(0)
摘要:生产者线程用于往链表里添加节点,数个工作线程从链表取出节点并处理。对于一般的mutex_lock,mutex_unlock方式,如果这一段时间没有工作,那么工作线程将会不停的调用lock,unlock操作。而这样的操作毫无疑义。在这里系统给我们提供了另外一种同步机制,信号灯,Semaphore。信号灯其实就是一个计数器,也是一个整数。每一次调用wait操作将会使semaphore值减一,而如果semaphore值已经为0,则wait操作将会阻塞。每一次调用post操作将会使semaphore值加一。将这些操作用到上面的问题中。工作线程每一次调用wait操作,如果此时链表中没有节点,则工作线程将 阅读全文
posted @ 2011-04-24 19:51 hnrainll 阅读(12586) 评论(0) 推荐(0)
摘要:内核同步:主要是防止多核处理器同时访问修改某段代码,或者在对设备驱动程序进行临界区保护。主要有一下几种方式:1. Mutex(互斥)头文件:#include <linux/mutex.h>初始化方法:DEFINE_MUTEX(name);或者void mutex_init(struct mutex *lock);使用方法:void mutex_lock (struct mutex *lock);Tries to lock the mutex, sleeps otherwise.Caution: can't be interrupted, resulting in proce 阅读全文
posted @ 2011-04-24 19:49 hnrainll 阅读(1645) 评论(0) 推荐(0)
摘要:利用c.vim插件,你可以实现添加文件头 添加注释 插入一些代码片段 语法检查 读函数文档 注释代码块这一插件的作者是Fritz Mehner,目标就是打造程序员流畅的编辑环境。这一插件还能完成:Statement oriented editing of C / C++ programs Speed up writing new code considerably. Write code and comments with a professional appearance from the beginning. Use code snippets 接下来我们对这一插件详细介绍.3 安装插件S 阅读全文
posted @ 2011-04-24 19:37 hnrainll 阅读(1969) 评论(0) 推荐(0)
摘要:作为程序员,要取得非凡成就需要记住的15件事。1.走一条不一样的路在有利于自己的市场中竞争,如果你满足于“泯然众人矣”,那恐怕就得跟那些低工资国家的程序员们同场竞技了。2.了解自己的公司以我在医院、咨询公司、物流企业以及大技术公司工作的经验来看,这一点所言不虚。不同公司的运营模式差异极大。如果你理解企业的运营模式,那你就不一样了!在这家公司中(或者对客户而言),你是参与业务运营的资产,你的工作能直接产生效益!3.与最优秀的人为伍很早以前,我喜欢打篮球,被分配到一个水平比较高的队里。一开始适应的确很困难,但环境的压力越大(重大比赛),我的长进也就越明显。每个领域其实都一样:你周围人的水平(以及对 阅读全文
posted @ 2011-04-24 19:32 hnrainll 阅读(176) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/minico/archive/2007/12/15/1938050.aspx1.官方网站下载最新的gvim7.1 win32,然后选择完全安装;我是安装在d:\vim目录下面,安装后的目录结构如下:D:\VIM├─vim71│ ├─autoload│ ├─colors│ ├─compiler│ ├─doc│ ├─ftplugin│ ├─indent│ ├─keymap│ ├─lang│ ├─macros│ ├─plugin│ ├─spell│ ├─syntax│ ├─tools│ └─tutor└─vimfiles├─after├─autoloa 阅读全文
posted @ 2011-04-24 00:33 hnrainll 阅读(599) 评论(0) 推荐(0)
摘要:进行有效编辑的七种习惯 Bram Moolenaar 如果你的很多时间是用来敲纯文本,写程序或HTML,那么有效地使用一个好的编辑器能节省你不少时间。这篇文章里的指导和提示将有助于你更快工作,更少犯错误。 文中采用开源文本编辑器Vim(Vi IMproved)说明有效编辑的思想,但这些思想也适用于其他编辑器。择合适的编辑器只是有效编辑的第一步,对于哪个编辑器更好的讨论将占很大地方,这里就不提了。如果你不知道该用哪个编辑器,或者对现在所使用的不太满意,不妨试试Vim;你是不会失望的。 第一部分:编辑一个文件 快速定位 编辑中大部分时间是花费在阅读、查错和寻找应该进行编辑的地方上,而不是插入新文字 阅读全文
posted @ 2011-04-23 23:35 hnrainll 阅读(1681) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/super119/archive/2011/03/26/1996145.htmlfunc是一个函数指针,该函数返回值是int,没有输入参数;然后主程序中声明了一个函数指针myFuncPointer,该函数指针代表的函 数输入参数是一个int,返回值也是一个函数指针,类型就是func类型的。所以我们可以把func2这个函数赋给myFuncPointer这个指针。 interview的题目要的就是myFuncPointer这个指针的声明。 //add by wenhao //20110422 添加注释#include <stdio.h> 阅读全文
posted @ 2011-04-22 20:01 hnrainll 阅读(2624) 评论(0) 推荐(0)
摘要:/* ************************************************************************ * Filename: m_mutex.c * Description: * Version: 1.0 * Created: 2011年04月22日 阅读全文
posted @ 2011-04-22 19:34 hnrainll 阅读(26356) 评论(0) 推荐(1)
摘要:最近使用sqlite较多,这东西现在是越用越着迷,不管是工作或者个人自娱自乐写东西,只要有数据存储首先就想到了sqlite,我一直对C/S模式的数据存储很反感,记得在知道sqlite之前的很长一段时间里一直用的是xml来存数我的数据,我喜欢将数据存储在单一文件里,我可以随时把数据带在身上,而且它们兼 阅读全文
posted @ 2011-04-22 10:44 hnrainll 阅读(15788) 评论(0) 推荐(0)
摘要:驱动程序和用户程序可不一样,它是作为一个模块连接到内核模块来运行的,运行在内核空间里面。所以要运行我们自己构造的模块,需要自己的系统已经配置好内核树,然后把目标模块和内核树连接起来运行!可以查看一下自己的电脑有没有配置内核树,可以到 /lib/modules/2.6.35-22-generic目录下面,看看有没有build这个文件夹,如果有,说明你已经有内核树了,如果没有,就自己构建内核树吧。内核树构建过程安装编译内核所需要的软件(也可不装,除非你要用 make menuconfig,用make oldconfig不要)sudo apt-get install build-essential 阅读全文
posted @ 2011-04-22 08:35 hnrainll 阅读(2388) 评论(0) 推荐(0)
摘要:本文是参考了网上多篇帖子而写的算不上什么原创。唯一值得欣慰的只不过在本机上实现罢了。因为毕竟失败了几次。也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的。望有识之士不要笑话。最后,希望本文能给刚学驱动而还没开头的人提供一些帮助。 刚看 O'REILLY 写的《LINUX 设备驱动程序》 阅读全文
posted @ 2011-04-21 21:42 hnrainll 阅读(862) 评论(1) 推荐(0)
摘要:Linux系统调用实验【实验目的】理解系统调用的概念,熟悉系统调用的用法。【实验设备】装有Linux操作系统的PC机一台。【实验要求】编程创建系统调用mycall(),实现功能是显示字符串到屏幕上。编译2.4.18内核,用新内核引导系统。编程调用自己创建的系统调用。【实验原理】操作系统是用户与计算机之间的接口,用户通过操作系统的帮助,可以快速、有效和安全可靠地使用计算机系统中的各种资源来解决自己的问题。为了使用户方便的使用操作系统,OS向用户提供了“用户与操作系统的接口”。这种接口支持用户与操作系统之间进行交互,这些接口可以被分为命令和程序接口两种。前者直接提供给用户在键盘终端上使用;后者则是 阅读全文
posted @ 2011-04-21 20:29 hnrainll 阅读(2399) 评论(0) 推荐(0)
摘要://信号量---线程间通信//“生产者消费者” 问题#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<semaphore.h>#include<pthread.h>#define msleep(x) usleep(x*1000)#define PRODUCT_SPEED 3 //生产速度#define CONSUM_SPEED 1 //消费速度#define INIT_NUM 3 //仓库原有产品数#define TOTAL_NUM 10 //仓库容量sem_t 阅读全文
posted @ 2011-04-21 19:43 hnrainll 阅读(6995) 评论(1) 推荐(0)
摘要:SYNOPSIS #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value);//初始化信号量 int sem_wait(sem_t * sem);//等待信号,获取拥有权 int sem_trywait(sem_t * sem); int sem_post(sem_t * sem);//发出信号即释放拥有权 int sem_getvalue(sem_t * sem, int * sval); int sem_destroy(sem_t * sem);//注销信号量,在linux中 阅读全文
posted @ 2011-04-20 16:55 hnrainll 阅读(30764) 评论(0) 推荐(3)
摘要:ioctl函数本函数影响由fd参数引用的一个打开的文件。#include<unistd.h>int ioctl( int fd, int request, .../* void *arg */ );返回0:成功 -1:出错第三个参数总是一个指针,但指针的类型依赖于request参数。我们可以把和网络相关的请求划分为6类:套接口操作文件操作接口操作ARP高速缓存操作路由表操作流系统下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型:类别Request说明数据类型套接口SIOCATMARKSIOCSPGRPSIOCGPGRP是否位于带外标记设置套接口的 阅读全文
posted @ 2011-04-20 16:21 hnrainll 阅读(706) 评论(0) 推荐(0)
摘要:1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a; 这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。 voi 阅读全文
posted @ 2011-04-20 13:24 hnrainll 阅读(427) 评论(0) 推荐(0)
摘要:#include<stdlib.h>#include<stdio.h>#include<unistd.h>#include<pthread.h>void clean_fun1(void * arg){ printf("this is clean fun1\n");}void clean_fun2(void * arg){ printf("this is clean fun2\n");}void * thread_fun(void * arg){ pthread_cleanup_push(clean_fun1 阅读全文
posted @ 2011-04-20 12:31 hnrainll 阅读(4489) 评论(0) 推荐(0)
摘要:概述 在很多情况下,尤其是读别人所写代码的时候,对 C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。 问题:声明与函数 有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做? 答案 答案是 (*(void (*)( ) )0)( )。看起来确实令人头大,那好,让我们知难而上,从两个不同的途径来详细分析这个问题。 答案分析:从尾到头 首先,最基本的函数声明: void function (paramList); 最基本的函数调用: function(paramLis 阅读全文
posted @ 2011-04-20 10:12 hnrainll 阅读(505) 评论(0) 推荐(0)
摘要:1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:M 阅读全文
posted @ 2011-04-19 18:56 hnrainll 阅读(287) 评论(0) 推荐(0)
摘要:原地址:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序。尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化。让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了。然后将回顾一下在各个步骤到底发生了什么。在整个过程中,参考一下内核源代码可以帮助我们更好地了解内核源代码树,并在以后对其进行深入分析。概述图 1 是我们在 20,000 阅读全文
posted @ 2011-04-19 18:21 hnrainll 阅读(290) 评论(0) 推荐(0)
摘要:vivi_Makefile分析笔记:#定义vivi版本信息,vivi版本号为0.1.4VERSION = 0PATCHLEVEL = 1SUBLEVEL = 4VIVIRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)#定义目标平台体系结构,目标平台体系结构是ARM.#"="和":="都是给变量赋值,使用":="的作用是立即把定义中参考到的函数和变量都展开.如果使用"=",函数#和变量参考会留在那里,就是说改变一个变量的值会导致其他变量的值也被改变.见教材P32.ARCH := 阅读全文
posted @ 2011-04-14 08:02 hnrainll 阅读(516) 评论(0) 推荐(0)
摘要:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。函数原型:int scanf( const char *format [,argument]... );其中的format可以是一个或多个:{%[*] [width] [{h|l|I64|L}] type|'_'|'\t'|'\n'|非%符号},注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。² width:宽度,一般可以忽略,用法如:const char sourceStr[] = "hel 阅读全文
posted @ 2011-04-13 19:06 hnrainll 阅读(1194) 评论(0) 推荐(0)
摘要:http://www.ibm.com/developerworks/cn/IBM developworks有很多很经典的资料 阅读全文
posted @ 2011-04-13 17:22 hnrainll 阅读(441) 评论(0) 推荐(0)
摘要:程序1(test1.l):%{#include <stdio.h>%}%% begin printf("Started\n");hello printf("Hello yourself!\n");thanks printf("Your welcome\n");end printf("Stopped\n");%%在linux中:第一步:flex test1.l第二步:gcc -o test1 lex.yy.c -lfl第三步:运行./test1 输入begin 程序将在屏幕上打印Started.程序2:( 阅读全文
posted @ 2011-04-12 21:58 hnrainll 阅读(276) 评论(0) 推荐(0)
摘要:源地址: http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.htmlLex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。LexLex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。它一次 阅读全文
posted @ 2011-04-12 21:08 hnrainll 阅读(522) 评论(0) 推荐(0)
摘要:本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标。伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标有两点原因:1.避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突。2.提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心。以下就这两个问题我们进行分析讨论:1.如果我们需要书写这样一个规则:规则所定义的命令不是去创建目标文件,而是使用make指定具体的 阅读全文
posted @ 2011-04-12 20:56 hnrainll 阅读(17272) 评论(0) 推荐(3)
摘要:用途生成一个与输入流的简单语法分析相匹配的 C 或 C++ 语言程序。语法lex [ -C ] [ -t ] [ -v| -n ] [ File... ]描述lex 命令读取 File 或标准输入,生成 C 语言程序并将它写到一个名为 lex.yy.c 的文件中。这个文件,lex.yy.c ,是一个兼容的 C 语言的程序。一个 C++ 编译器也能够编译 lex 命令的输出。-C 标志将输出文件重命名为 lex.yy.C 供 C++ 编译器使用。由 lex 命令生成的 C++ 程序可使用 STDIO 或 IOSTREAMS。如果在 C++ 编译中,cpp 定义 _CPP_IOSTREAMS 是真 阅读全文
posted @ 2011-04-12 20:23 hnrainll 阅读(2268) 评论(0) 推荐(0)
摘要:摘要:本期的目的是向大家介绍shell的概念和基本原理,并且在此基础上动手做一个简单shell解释器。同时,还将就用到的一些 linux环境编程的知识做一定讲解。本文适合的读者对象 对linux环境上的c语言开发有一定经验;对linux环境编程(比如进程、管道)有一点了解。概述本章的目的是带大家了解shell的基本原理,并且自己动手做一个shell解释器。为此,首先,我们解释什么是shell解释器。其次,我们要大致了解shell解释器具有哪些功能;最后,我们具体讲解如何实现一个简单的 shell 解释器,并对需要用到一些 linux环境编程的知识做一定讲解,并提醒你如果想深入掌握,应该去看哪些 阅读全文
posted @ 2011-04-12 19:52 hnrainll 阅读(3520) 评论(0) 推荐(0)
摘要:下面列举相关文件/etc/sysconfig/i18n$ cat /etc/sysconfig/i18nLANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"复制代码我的是英文环境,所以整体语系是en_US.UTF-8,可以在修改相关的环境变量进行设定。有人会纳闷?为什么会是i18n呢?internationalization,不过这个单词太长啦。所以把中间18个单词用18来代替了。/etc/profile这个文件比较有统一性。几乎所有版本的*NIX都会有。同时对所有的用户都有效。里面设置了一些比较重要的环境变量。PA 阅读全文
posted @ 2011-04-12 15:13 hnrainll 阅读(3192) 评论(0) 推荐(0)
摘要:四、 关于串口终端 在 boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。造成这个问题主要有两种原因:(1) boot loader 对串口的初始化设置不正确。(2) 运行在 host 端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置。 此外,有时也会碰到这样的问题,那就是:在 boot loader 的运行过程中我们可以正确地向串口终端输出信息,但当 boot loader 启动内核后 阅读全文
posted @ 2011-04-12 14:12 hnrainll 阅读(387) 评论(0) 推荐(0)
摘要:三、Boot Loader 的主要任务与典型结构框架 在继续本节的讨论之前,首先我们做一个假定,那就是:假定内核映像与根文件系统映像都被加载到 RAM 中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在 ROM 或 Flash 这样的固态存储设备中直接运行。但这种做法无疑是以运行速度的牺牲为代价的。从操作系统的角度看,Boot Loader 的总目标就是正确地调用内核来执行。 另外,由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结 阅读全文
posted @ 2011-04-12 14:11 hnrainll 阅读(652) 评论(0) 推荐(0)
摘要:作者:詹荣开 (zhanrk@sohu.com) 本文选自:IBM DW 2003年12月30日 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。 一、引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系 阅读全文
posted @ 2011-04-12 14:09 hnrainll 阅读(991) 评论(0) 推荐(0)
摘要:Phony TargetsPHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。例如: clean: rm *.o temp因为"rm"命令并不产生"clean"文件,则每次执行"makeclean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会执行;为避免这 阅读全文
posted @ 2011-04-12 10:46 hnrainll 阅读(61646) 评论(1) 推荐(6)
摘要:vivi开发笔记【专辑】http://blogold.chinaunix.net/u/21948/showart_344254.html 阅读全文
posted @ 2011-04-11 14:55 hnrainll 阅读(254) 评论(0) 推荐(0)
摘要:文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中的命令而无需从头开始制作一个新的根文件系统。不过这儿的制作过程可以让我们更深一点理解Linux的文件系统。 2.主要的根文件系统* Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 阅读全文
posted @ 2011-04-10 15:19 hnrainll 阅读(484) 评论(0) 推荐(0)
摘要:XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是我平常使用不可缺少的工具。今天没事看了下XShell的帮助,找到了一些很实用的技巧,分享给大家。复制和粘贴由于在linux的Shell下,Ctrl+c是中断当前指令,这个快捷键和windows下的复制快捷键冲突,所以经常犯错误。。。想复制的时候按了ctrl+c,结果中断了当前指令。在Xshell中,提供了其它的快捷键来执行这些操作:复制:Ctrl+Insert粘贴:Shift+Insert粘贴还有一个键就是鼠标中键,另外你还可以设置点鼠标右键就是粘贴,设置选项在这: 将当前Shell中的内容复制到“记事本”中有时候需要 阅读全文
posted @ 2011-04-07 19:07 hnrainll 阅读(981) 评论(0) 推荐(0)
摘要:1 #============================================================================= 2 转载请注明出处: http://blog.csdn.net/tge7618291 8 #============================================================================= 9 1. 查看 key 相关信息说明的命令 :help keycodes10 11 #==================================================== 阅读全文
posted @ 2011-04-07 19:02 hnrainll 阅读(2998) 评论(0) 推荐(0)