<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/wordpress-mu-1.1.1" -->
<rss version="0.92">
<channel>
	<title>刀巴虫子的办公室</title>
	<link>http://my.donews.com/acestrong</link>
	<description>Just another My.donews.com weblog</description>
	<lastBuildDate>Tue, 01 Jul 2008 01:54:22 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>错题大全——3</title>
		<description>原题(7719): 问题：If you suspect that the illness might be serious you should not _______ going to the doctor.

put off

hold back

put aside

hold up

- - - - - - - - - - - - - - - - - - - - - - - - - - - -

答案: put ...</description>
		<link>http://my.donews.com/acestrong/2008/07/01/post-080701-095406-550/</link>
			</item>
	<item>
		<title>错题大全——2</title>
		<description>-----------------------我的错误单词-----------------------
quote                   v.            引用，引证；报价
waggon                  n.            四轮运货马车
impose                  v.            把…强加；征(税)
excessive               adj.          过多的，极度的
utility                 n.            效用，有用，实用
discharge               v.            释放；排出
commerce                n.            商业，贸易；社交
capacity                n.            容量；能力；能量
postpone                v.            延迟，推迟，延缓
income                  n.            收入；收益；进款
process                 v.            加工
breadth                 n.            宽度，幅度；幅面
indifferent             ...</description>
		<link>http://my.donews.com/acestrong/2008/07/01/post-080701-080743-967/</link>
			</item>
	<item>
		<title>错题大全——1</title>
		<description>-----------------------我的错误单词-----------------------
saw                     v.            锯，锯开
cement                  v.            粘结
oblige                  v.            迫使；施恩惠于
fine                    adj.          美好的；纤细的
coil                    n.            (一)卷；线圈
craft                   n.            工艺；手艺，行业
correspondence          n.            通信；符合；对应
counsel                 n.            商议；忠告；律师
manifest                v.            表明

-----------------------我做错的题目-----------------------

原题(7828): 问题：Through out his life, Henry Moore _________ an interest in encouraging art in ...</description>
		<link>http://my.donews.com/acestrong/2008/07/01/post-080701-080647-268/</link>
			</item>
	<item>
		<title>学习大拐</title>
		<description>今天早上去了，没和教练罗嗦，上车就匡匡的练了15分钟的小拐，上周五特训的结果自然不用说了，下了车问教练能学大拐了吗？教练没说死，不过意思是ok的啦～

第二把开始前有个学员也是第一次练大拐，教练拿根棍子教他看点，我也凑在一边听，轮到我的时候，上去就开始练大拐了。嘿嘿，教练看了喊了一嗓子“谁让你练大拐的啊！”，就让我练了～

大拐起始点位置很重要，要与路沿平行，距离要合适（1.2米～1.5米之间），倒车时看右后车窗上的三个点，从前到后我分别记为1，2，3，这三点与中杆对齐时为触发点，依次看1、3、2这三个点，动作分别为向右打死、向左回一圈、向右打死。车速开慢一点，方向盘打快一点就ok的啦！

本来还想练三把，下来一看人又多了，看看时间到11：30前来不及第三把了，干脆走人了～～ </description>
		<link>http://my.donews.com/acestrong/2007/11/19/post-071119-144337-359/</link>
			</item>
	<item>
		<title>在eclipse下使用Qt</title>
		<description>在Trolltech的主页上看到有eclipse的插件可用，就下载了下来，顺便下了一个专门针对C/C++开发的eclipse，就是带CDT的，不大，66M左右。把插件安装后跟着自带的教程走了一遍，OK的啦！～～Qt  Designer的功能全都有，再加上CDT的自动补齐和提示，简直太方便，太方便了！！：）

有感于原来下的那个100多M的eclipse体积太大，又下了一个针对java开发的eclipse，82M左右，顺便安装了GEF，把我的JTSS拷贝进它的workspace，打开后报错，看了一下，是缺少Drools。去了Drools的主页发现有新版本下载了，就下了最新的4.0.3版，解压进目录后运行还是报错，看了错误提示，完全没有理由啊！想到上一次从3升级到4时也是有drl语法变动的情况，于是就到doc里找文档，查找报错的函数，果然有专门的列表提供转换，好像就是insert、modify、update这些个单词的变化，改了以后就ok了～

现在电脑里搞了三个eclipse，分别用于java、c++、python的开发，各司其职，互不干扰，其乐融融啊～～：） </description>
		<link>http://my.donews.com/acestrong/2007/10/30/post-071030-190554-615/</link>
			</item>
	<item>
		<title>joke</title>
		<description>提问：茉莉花、太阳花、玫瑰花哪一朵花最没力？
回答：茉莉花。
原因：好一朵美丽(没力)的茉莉花。

提问：猩猩最讨厌什么线？
回答：平行线。
原因：平行线没有相交(香蕉)。

提问：橡皮、老虎皮、狮子皮哪一个最不好？
回答：橡皮。
原因：橡皮擦(橡皮差)。

提问：布和纸怕什么？
回答：布怕一万，纸怕万一。
原因：不(布)怕一万，只(纸)怕万一。

提问：铅笔姓什么？
回答：萧。
原因：削(萧)铅笔。

提问：麒麟到了北极会变成什么？
回答：冰淇凌。
原因：冰淇凌(冰麒麟)。

提问：哪位历史人物最欠扁？
回答：苏武。
原因：苏武牧羊北海边(被海扁)。

提问：从1到9哪个数字最勤劳，哪个数字最懒惰？
回答：1懒惰；2勤劳。
原因：一(1)不做二(2)不休。

提问：怎样使麻雀安静下来？
回答：压它一下。
原因：鸦雀无声(压雀无声)。

提问：历史上哪个人跑的最快?
回答：曹操
原因：说曹操曹操到

问题：米她妈是谁
答案：花
原因：花生米

小白加小白等于什么？
等于小白兔
原因：小白TWO

饺子是男人还是女人？
男人
原因：男人才有包皮

提问：男人嘘嘘是哪个歌手的名字?
回答：陶喆
原因：掏吉吉 </description>
		<link>http://my.donews.com/acestrong/2007/09/23/post-070923-194414-792/</link>
			</item>
	<item>
		<title></title>
		<description>2007-08赛季 休斯顿火箭赛程
日期                 主队                 客队                 时间
10.31                湖人                火箭                11:30
11.02                爵士                火箭                10:00
11.04                火箭                开拓者       ...</description>
		<link>http://my.donews.com/acestrong/2007/08/03/post-070803-084142-680/</link>
			</item>
	<item>
		<title>[转]利用RTLinux开发嵌入式应用程序</title>
		<description>利用RTLinux开发嵌入式应用程序

  对于中国工程师来说，利用实时Linux开发嵌入式应用程序是他们面临的困难之一，本文以RTLinux为例，并结合最为业界关注的是RTAI进行讨论，尽管这两种实现方式在句法细节上存在差异，但工作方式基本一样，因此所讲述的内容对两者都适用。

在实时任务与用户进程相互通信的过程中，有些实时应用程序无需任何用户界面即可在后台平静地运行，然而，越来越多的实时应用程序确实需要一个用户界面及其 它系统功能，如文件操作或联网等，所有这些功能都必须在用户空间内运行。问题是，用户空间操作是非确定性的，而且与实时操作不兼容。

幸运的是实时Linux具有一种可在时间上减弱实时与非实时操作的机制，这种机制表现为一种称为实时FIFO的驱动程序。当insmod将 rtl_fifo.o驱动程序插入Linux内核时，该驱动程序将自己注册为RTLinux的一部分，并成为Linux驱动程序。一旦插入Linux内 核，用户空间进程和实时任务都可使用实时Linux FIFO。

在深入探讨实时FIFO的细节之前，还要回顾一下实时应用程序结构的某些部分(图1)。有效的嵌入式应用程序设计方法是将实时部分与固有的非实时功能分离 开来(表1)。如果应用程序的任一部分，如用户界面、图形、数据库或网络仅需软实时性能，最好是将该部分写入用户空间。然后，仅将必须满足时序要求的那部 分写成实时任务。

注意，RTLinux(PSC，便携式信号编码)和RTAI(LXRT，Linux实时扩展)的最新版本已采用了一种可在用户空间执行软和硬实时任务的方法。



任何硬实时任务都是在RTLinux的控制下运行的，该任务一般可执行周期性任务、处理中断并与I/O设备驱动程序通信，以采集或输出模拟和数字信息。当 实时任务需要告诉用户进程有一个事件将发生时，它便将这一消息送给实时FIFO。每一个FIFO都是在一个方向上传送数据：从实时任务到用户空间，或反 之。因此，双向通信需要使用两个FIFO。任何读出或写入实时任务一侧的操作都是非模块操作，因此rtf_put()和rtf_get()都立即返回，而 不管FIFO状态是什么。

从应用程序一侧来看，FIFO就像一个常规文件。缺省情况下，RTLinux安装程序将在/dev目录下创建64个实时FIFO节点；如果需要，还必须自己创建新的节点。例如，要创建/dev/rtf80，需采用如下命令：

=========================
mknod c 150 80；
chmod 0666 /dev/rtf80
=========================

其中，150是实时FIFO主数，而80是rtf80的次数。

从用户进程的角度看，实时FIFO可执行标准文件操作。从实时任务来看，FIFO有两种通信方式：直接调用RTLinux FIFO功能，或将FIFO作为一个RTLinux设备驱动程序，并使用open()、close()、read()和write()操作。要想将 FIFO作为一个设备驱动程序，就必须将rtl_conf.h中的配置变量CONFIG_RTL_POSIX_IO设定为1。

rtf_create_handler()可设置处理程序功能。每次Linux进程读或写FIFO时，rtl_fifo驱动程序都要调用该处理程序。应注 意的是，该处理程序驻留在Linux内核，因此当Linux需要调用时，从该处理程序进行任何内核调用都是安全的。从该处理程序到实时任务间的最好通信方 法是使用旗语或线程同步功能。最后，FIFO驱动程序还必须对内核存储器进行配置。因此，实时线程内的rtf_create()不应调用。相反，可调用 init_module()中的rtf_create()功能及cleanup_module()中的rtf_destroy()功能。

例如，列表1给出了一个采用两个FIFO的简单数据采集应用程序的实时部分。两个FIFO都是在init_module()创建，并赋予minor numbers 为1和2。在调用rtf_create(minor, size)之前，该程序在已创建该FIFO的情况下调用rtf_destroy(minor)。这种情况就是另一个模块在开发过程中未被调用。然后，调用 rtf_create_handler(ID, &#38;pd_do_aout)以注册带该实时FIFO的数据采集模拟输出功能pd_do_aout()。注意，创建实时线程pp_thread_ep ()是因为它是周期性的，其间隔为1/100秒。

每次周期性线程得到系统控制权后，它就调用rtf_put(ID,dataptr,size)以便将数据插入minor number为2的FIFO。Linux进程打开/dev/rtf2，从实时FIFO中读取并显示所采集的数据。该进程还打开/dev/rtf1，将数据 写入其它实时FIFO。当用户移动屏幕滑动器以改变模拟输出电压时，进程就向该FIFO写入一个新的值。RTLinux便调用pd_do_aout()处 理程序，随后pd_do_aout()利用rtf_get()从FIFO获得值，并调用实际的硬件驱动程序以设置模拟输出的电压。可以看到，实时任务和用 户进程是异步使用FIFO的。

任务间的存储器共享

FIFO为用户进程和实时任务的连接提供了一种方便的机制，但将它们作为消息队列更合适。比如，一个实时线程可利用FIFO记录测试结果，然后用户进程就可读取该结果，并将之存入数据库文件。

许多数据采集应用程序涉及到内核及用户空间之间的大量数据。Linux内核v. 2.2.x并没有为这些空间的数据共享提供任何机制，但v. 2.4.0版本预计会包括kiobuf结构。为解决现有稳定内核的这个缺点，RTLinux包括mbuff驱动程序。该驱动程序可利用vmalloc() 分配虚拟内核存储器的已命名存储器区域，它采用的存储器分配和页面锁定技巧跟大多数Linux中bttv帧抓取器(frame-grabber)驱动程序 所用的一样。

更具体地说，mbuff一页一页地将虚拟内存锁定到实际的物理内存页面。任何实时或内核任务，或用户进程在任何时间都可访问该存储器。通过将虚拟内存页面 锁定到物理内存页面，mbuff可确保所分配的页面永久驻留在物理内存，而且不会发生页面错误。换言之，当实时或内核进程访问所分配的存储器时，它可确保 VMM不被调用。注意：由于实时任务执行期间实时Linux冻结标准内核的执行，任何对VMM的调用都会引起系统暂停。如果它要访问并不位于物理RAM内 的虚拟存储页面，那么即使正常的Linux内核驱动程序也会引起系统故障。

由于mbuff是一种Linux驱动程序，其功能可通过设备节点/dev/mbuff实现。该节点可显示几个录入点，其中包括可将内核空间地址映射到用户 空间的mmap()。它还可以利用录入点ioctl()来控制。然而，并不需要复杂的结构及直接调用ioctl。相反，mbuff可为ioctl()调用 提供一个包裹，而且仅仅调用两个简单的功能即可配置和释放共享的存储缓冲器。

当然，不能从实时任务调用mbuff驱动程序，因为该驱动程序所调用的虚拟存储器分配功能本身是不确定性操作。分配共享存储器所需的时间依赖于主系统的存 储器容量以及CPU速度、磁盘驱动器性能和存储器分配的现有状态。因此，只能从模块的Linux内核一侧来分配共享存储器，比如从init_module ()或一个ioctl()请求开始。

那么，一个共享缓冲器到底能分配多少存储器呢？如果不是任务繁重的服务器或图形应用，建议至少为Linux保留8MB存储空间。为了获得优化的配置，可在限制存储器大小的同时测量实时应用程序的性能，以确定需要多少存储空间。

列表2给出了如何从实时任务和用户进程方面访问共享的存储器。内核模块和用户任务采用同样的功能集。当然，要想使用insmod mbuff.o，还必须将之置于Linux内核中。例如，mbuff_alloc("buf_name", size)可将符号名buf_name分配给一个缓冲器，而mbuff_free("buf_name", mbuf)可将之释放。

当第一次调用带有符号缓冲器名的mbuff_alloc()时，mbuff执行实际的存储器分配。而当从内核模块或用户进程再次调用该功能时，它只是简单 地增加使用数(usage count)及将指针返回现有的缓冲器。每次调用mbuff_free()都会减少使用数，直至为零，这时mbuff就去分配带符号名的缓冲器。这种方法 从多个内核模块和用户进程获得一个指向同一共享缓冲器的指针，从而解决了问题。它还可确保共享缓冲器一直有效，直到最后的应用程序释放它。请注意，是实时 内核还是用户进程执行实际的buf1配置依赖于谁先获得控制权。

还有一个“笨”方法可在实时应用程序、内核模块和用户应用程序间共享存储器。对于嵌入式应用，该方法还是可以接受的。例如，如果PC带有128MB RAM，可将线搜索路径="mem=120m"添加进lilo.conf文件(列表3)。当启动带有Linux内核和RTLinux 2.3的系统时，Linux仅使用120MB内存。OS也不用剩下的8MB内存(物理地址为0x7F00000到0x7FFFFFF)，而是留给在OS下 ...</description>
		<link>http://my.donews.com/acestrong/2007/07/03/post-070703-170827-989/</link>
			</item>
	<item>
		<title>[转]Linux2.6内核的嵌入式系统应用</title>
		<description>
                         发表于                         ...</description>
		<link>http://my.donews.com/acestrong/2007/07/02/post-070702-143055-402/</link>
			</item>
	<item>
		<title>发现XPath就是好使～</title>
		<description>昨天试了一下，还是XPath方式好使！看了XPath的教程，非常的简单，再写了个测试程序，真的非常的好用。以后就用它了～～ </description>
		<link>http://my.donews.com/acestrong/2007/05/01/post-070501-225358-806/</link>
			</item>
</channel>
</rss>
