2007年2月27日星期二
[tc]NAND Flash BackUP 2.1
虽说是模仿GHOST,其实没有针对文件系统,只是将Flash中的二进制数据保存下来而已。
为确保正确性,[tc]作了以下两件事:
1、设定了一个简单的信令,由计算机向开发板发送数据请求信号,保证了超时、桢同步错误可以断点续传
2、写了一个简单的MD5算法校验程序
实际情况表明,断点续传作用明显,由于种种原因,通讯有时会中断,在超时程序的帮助下,可以找回正在传输的部分,继续传输。但是,信令带来了额外的传输开销。实际的输出速度为10 KB/s,64MB的Flash共用将近2小时传输。
好在下载这些备份不需要这么慢,可以用USB接口,大约有500KB/s。
2007年2月24日星期六
[选译]关于随机函数发生器的简单讨论
今天有幸看到DONALD E. KNUTH先生的《THE ART OF COMPUTER PROGRAMMING》SECOND EDITION,第2卷:Seminumerical Algorithms,第1部分论述的是随机函数。揭示了[tc]几天前用到的自定义随机函数。
其中最简单的函数莫过于Linear Congruential Method,以下译为“线性余数法”。
线性余数法1949年发明于D. H. Lehmer,定义了下面的迭代函数,产生一个序列,用于简单的计算机(伪)随机序列:
Xn+1 = (aXn + c) mod m,n>=0
其中X0为“种子”。对于常数X0,a,c,m的选取,原作进行了详细的讨论,选译如下。
定义b=a-1
可证a>=2, b>=1时
X n+k = (a^k Xn + (a^k - l)c/b) mod m, k >= 0, n >= 0,
定理A:当且仅当m,a,c,X0满足下列条件时,具有长度为m的周期:
1、c与m为互质数
2、b=a-1是p的倍数,p为m的一切质因子
3、如果m是4的倍数,那么b也是
证明稿据说起源于100年前的定理,M.Greenberger将之推广到m=2^e。证明过程反正我也没看懂就不译了。
定理B:令λ(p^e) = (p-1) p^(e-1) , p>2
当c=0时能达到的最大周期是λ(m)。该周期满足下列条件时可以达到。
1、X0与m为互质数
2、a是模m的素元([tc]:素元是指整环R中的非零非可逆元素。如果p能整除R中某两个元素的乘积(如ab),则必整除其中一个(如p|a或p|b))
问题在于:如何寻找模m的素元?于是:
定理C:满足下列条件之一时,数a是模p^e的素元
1、p^e=2,a为奇数;或者p^e=4,a mod 4=3;或者p^e=8,a mod 8=3,5,7;或者p=2,e>=4,a mod 8=3,5
2、p为奇数,e=1,a<>0(mod p),a^(p-1)<>1(mod p)
3、p为奇数,e>1,a满足第二条,a^(p-1)<>1(mod p^2)
正定理可用于计算机中较大的p的试验
定理D:如果m=10^e,e>=5,c=0,X0不是2或5的倍数,线性余数法周期为5*10^(e-2)。当且仅当a mod 200=下列数之一:
3,11,13,19,21,27,29,37,53,59,61,67,69,77,83,91,109,117,123,131,133,139,141,147,163,131,173,179,181,187,189,197
小结:
满足上述要求的a=z^k+1,2<=k<=e
若取c=1,则:Xn+1=((z^k+1)Xn+1)mod z^e
([tc]:这一部分的论述,我认为原作所用的计算方法已经过时了,没有摘抄)
若设X0=0,那么再次出现0可认为是一个周期,所以有
Xn=((a^n-1)*c/b) mod m
并且,用二项式展开式展开a^n-1=(b+1)^n-1,化简得:
Xn=c(n+[n,2]b+...+[n,s]b^(s-1))mod m
([tc]:其中比b^s更高阶的项由于是m的整数倍,被忽略了。式中的[n,2]是排列组合公式)。
(1)基数为1:a=1。Xn=cn(mod m),显然不随机
(2)基数为2:Xn=cn+cb (n,2),也不够随机。
(Xn, X(n+1), X(n+2))总是依赖于d+m,d-m,d,d-2m四个位面
(3)基数为3:序列开始比较随机,但是在Xn, X(n+1), X(n+2)中存在高阶相关性。试验表明序列效果一般
总之,基数到达5,看起来才足够随机。
例如:m=2^35,a=2^k+1。那么b=2^k。此时k>=18时b^2=2^(2k)是m的倍数,基数为2。如果k=17,16,...,12,基数为3。基数为4时k=11,10,9。因此k<=8,即a<=257.
稍后将会看到,小的乘积因子有可能被忽略。这样我们就排除了所有的成绩因子的取值。
假设w是计算机字长,m=w+1或w-1,那么基本上m不可能是质数的大的倍数,较高的基数也是不可能的。因此最大的周期是无法达到的。这就是为什么(当初会提出)c=0。
另外值得强调的是,大的基数也不是必要的。
-----------------------------------------
看到这里,来分析一下[tc]用过的随机函数。
(1)VC++(VS 2005)
X0=0, a=214013/(2^17)=3.266, c=2531011/(2^17)=38.620, m=0x7fff=32767
这个,OTL,居然是小数,不知道怎么分析。
(2)VB6
X0=327680, a=0x43fd43fd=1140671485, c=0xc39ec3=12820163, m=0xffffff+1=16777216
应用定理A:
(1)
12820163的因子为:1, 2293, 5591, 12820163
16777216的因子为:1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216
的确互质。
(2)
1140671485-1的质因子为:2
满足条件。
应用定理B:
327680的因子为:1, 2, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 128, 160, 256, 320, 512, 640, 1024, 1280, 2048, 2560, 4096, 5120, 8192, 10240, 16384, 20480, 32768, 40960, 65536, 81920, 163840, 327680
可见X0与m不互质,不过这个不影响。
m=2^24
p=2
e=24
1140671485 mod 8 =5
满足素元要求。
所以这组数据可以满足随机函数要求。
2007年2月23日星期五
浏览器内嵌播放器错误(勉强解决,供参考)
[谁在作怪]
第一反应是IE不稳定,跑去从镜像里抠出以前的IE,不行。用FF2试了一下,不行。
第二反应是暴风影音,换了老版本(其实还不够老),不行。
第三反应,mpc的Bug,换了一个mpc以前的主程序,不行。又卸载暴风影音,用WMP 10居然好了!这样不算解决问题!又把暴风影音装回来(废话!当然是不一样的版本!)也OK!
[什么毛病]
满心欢喜。其实这是凌晨发生的事。现在是同一天的晚上,问题又来了,现象一样。
OK,耐下心,凌晨和现在什么区别?访问的文件不同![tc]遂想起这一版的暴风影音有个毛病:文件格式不支持的时候会异常退出。
接下来的几分钟十分无聊,就不写了。
[祭出必杀]
[tc]的必杀技是会用调试器。于是在问题再一次发生时,用Visual Studio自带的调试器打断,发现是一处除数为零错误。
03DBBB98 div eax,ecx
此时ecx=0。经查发现03DBBB98属于SHNTrans.ax。
一阵google,净是些菜鸟抱怨系统不稳定的帖子,无聊。
[再靠自己]
把SHNTrans.ax打开一看,发现是个DLL文件。打开之,字符串列表中有一行:Shorter Compressed Audio。放到暴风影音的滤镜列表中一看,叫做SHN to wave Filter。
第一反应,又没有新版本?无果。
第二反应,不要行不行?我又不听SHN文件,这个滤镜用不上。
删除该文件,问题解决。
[结论]
DirectShow好奇怪……
2007年2月21日星期三
欢迎来到NHK
NHK=日本家里蹲协会
由泷本龙彦原作小说改编的漫画改编的动画,讲述大学退学的 佐藤达广 在学弟 山崎薫 的影响下成为半个Otaku,同时面对女生 中原岬 的故事。大体上包括相识、签约、跟踪、约会、制作、孤岛、网游(Ultimate Fantasy 诸神的黄昏)、传销、回家、绝望、结局。
主角 佐藤君 的家里蹲史n起n落,令人忍俊不禁。而所谓的“巨大组织的阴谋”、所谓的“罚款100万”(后来变成1000万、1亿万了)、所谓的Purupuru Pururin Rin,都令这部动画增色不少!薫 的GAL Game(不是ACG来的吗?)相关内容,大体上也能反映一些Otaku的现状吧。不过网游受害者这个角色,似乎渲染得比较过分了,有点恐怖。~~囧~~
小林沙苗 配音的 柏瞳(学姐),也是值得关注。中原岬 再一次让[tc]深深感觉到,牧野由依 的声音比较单调(跟单纯不一样),还要再努力一把!总的说来,NHK是一部成功的作品!

TrueWorld~真実のセカイ~
这个游戏,[tc]我花了一个小时来玩。OTL,剧中的设定在哪里啊~~~~
[tc]Puru Puru Rin
http://webdisk.cech.com.cn/download/file_share_2914802.html
2007年2月15日星期四
[tc]Lost My Music
音乐大体上可以反映[tc]的意图,但是许多细节都不尽人意。[tc]我也是工作到今天凌晨三点才搞定的。[tc]搞音乐一向虎头蛇尾,大家就忍了吧。
今天为了上传音乐化了点功夫。结果还使用了网盘。
文件在这里:
[tc]Lost My Music.mp3
两种uC线程切换不同的实现方法
到底发生了什么
——两种uC线程切换不同的实现方法
一、前言
[tc]在VC上移植的uC/OS前些天遇到了许多奇怪的问题:不同的uC线程顺序的使用VC提供的rand()随机函数得到了相同的结果;另一方面,VC版在检查堆栈的使用情况OSTaskStkChk时,总是返回一致的结果。为什么?到底发生了什么?[tc]的移植存在问题吗?
二、两种任务切换方法
即将讨论的方法显然不是任务切换仅有的方法,只是[tc]只亲生经历过这两种方法。
1、法一:标准方法
即在任务切换时,挂起该任务(在这种方法中,CPU只有一个,实际上调度开始时只要暂停中断即可),保存所有寄存器的内容(EAX、EBX……)到该任务的ptos指示堆栈中,更新OS_TCB。
2、法二:Windows切换
而[tc]采用的不是上面的方法,Windows有自己的一套线程调度算法,我只是在VC上实现一些功能而以,何必认真呢?于是每当OSTaskCreate发生时,实际上是调用CreateThread来生成一个线程。与Win32程序不同的是,为了让uC来做调度,不得不挂起这些线程SuspendThread,直到调度方生时恢复之ResumeThread。
三、后果如何
实际的效果是,[tc]的uC更加稳定。由于用了M$的函数,可以避免Win下的复杂环境,许多操作实际上Win会帮你完成。而跟踪“标准方法”的某个程序之后,不难发现在复杂的中断发生时,该方法的uC很难保证稳定性。[tc]曾见过文佳同志的uC(我对此人并无恶意,只是就事论事),在控制台属性变化时,系统崩溃。原因大概是uC进入临界代码时无法真正的屏蔽一切中断,结果寄存器遭到修改。
缺点也是很明显的。由于实现方法的不同,许多行为与uC的原作者的意愿相背离了。这就是开头所述的问题的起源。
四、解释一下前言中的两个问题
1、随机函数
本人接触过的各种编译器所提供的随机函数使用的都是线性迭代法(这名字是[tc]瞎起的,听起来还挺专业……)。即:r(0)=种子,r(n)=(A*r(n-1)+B)/C Mod D,其中A、B、C是常数,C一般取2的幂次以回避除法,D是最大值。我猜想原作者使用的BC4.5也是这样做的。
随机函数不具有可重入性这是显而易见的。因此作者建议使用信号量来解决。但是遗憾的是,现在的编译器已经自带了所谓的信号量机制。比如下面是VS 2005的一段东西:
_ptiddata ptd = _getptd();
也就是说,VS会自动负责区分不同的线程。对于每个线程而言,rand函数是独立的。这就是为什么,[tc]的若干个任务(现在是Windows线程了),虽然顺序的调用随机函数,却不能达到随机的目的的原因。
看起来要想解决这个问题有两种方法:(1)写个线程,用来给其他线程提供随机函数(真是有病);(2)自己写个随机函数,为了装B,可以用华丽的[tc]正态分布函数……
2、不同的线程被认为堆栈使用量相同
uC的计算方法大概是,循环遍历整个堆栈,找出已经使用的部分。那么不同的线程,如果算法不同,理应占用不同大小的堆栈。
当一个决定性的证据出现——所有线程总是只占用22个字节的堆栈——时,[tc]恍然大悟!
道理很简单,由于调用了CreateThread,实际上,线程的堆栈是由Windows分配的,而不是uC。那22个字节是用来保存任务特征的一个数据结构的大小。
五、后记
作为uC的初学者就能分析到这一步,佩服自己……
夜明け前より瑠璃色な
Carillon Harmonia
Yoakena
“斯菲阿国”公主 菲娜·法姆·阿修莱特 到男主角 朝雾达哉 家后宫的故事。音效欠火候,没气氛,音乐还不错。故事对政治问题分析得很不严肃。以上。
2007年2月13日星期二
2007年2月12日星期一
让基于uC/OS的ARM程序在VC上调试
明眼人看标题就知道其实这是一个操作系统移植的简单问题。在不同的平台上,只要接口一致,主程序就能互相通用。
1、主题
ARM的调试工具已经十分强大了,但是在M$面前还是如同孩子一般幼稚。如果能在Microsoft Visual Studio 2005中建立一个通用的框架,那么ARM平台的程序就可以在x86下设计、调试。完成后拷贝到ADS中编译。
2、移植
当然,要让uC/OS能在VC中使用,首先需要将uC/OS移植到PC上。下面的方案我是在参考了一些代码的基础上总结出来的,难称原创,而且估计有不少错误……
原作者是在BC4.5上编写uC/OS的。Windows有其特殊的变成风格,比如uC的系统定时器、新进程的启动、中断的允许等问题,完全应该交由Windows完成,而进程调度还是得由uC完成。这里面的矛盾只需要让Windows产生的线程处于睡眠状态就可以轻松搞定。
另外中断屏蔽需要用到互斥对象(Mutex),需要时用WaitForSingleObject保持互斥状态,直到进程调度结束。
最不好理解的问题莫过于恢复线程状态,这个[tc]我也不是很懂,还要再研究研究。
3、框架
完成uC之后,需要分别为ARM和PC设定一个编程框架。[tc]选用的是昨天移植好的ARM的框架。大意如下:
(1)首先是低级初始化
[ARM]
还是那些老东西,恢复到“重启”状态、时钟、重入
[PC]
什么都不做,x86就是好啊……
(2)Console级
[ARM]
2410这东西不能使用stdio.h,所以把各种功能函数定义在这里。
[PC]
#include
为了让各种2410功能也能运行于PC,应该在这里设计各种各样的函数。
(3)FrameWork级
[ARM]
设定了分频比、初始化IRQ。但是时钟中断不要修改!初始化MMU。
[PC]
基本上,又是什么都不做。x86,我爱你……
(4)Application级-OSinit
[ARM]
创建两个基本进程。将看门狗中断定义为系统时钟OSTimeTick()(此前用的是Timer4,但是看门狗更适合。)
[PC]
创建两个基本线程,创建时钟线程调用OSTimeTick(),设定Windows线程优先级
从这里开始两个平台已经完全一样了。
4、调试
这件事情滞后考虑。[tc]眼下想把uC/FS搞来移植,uC/TCPIP就免了,太复杂。其实哪个文件系统已经很复杂了……
[tc]XP补丁包3、4,今日打包
每年两次的[tc]对XP补丁的打包工作今天结束。此次打包的文件有以下两个:
[tc]XP补丁包3 2006.8-2007.1.exe
[tc]XP补丁包4 正版用户补丁 2005-2007.1.exe
从大小来看,此次的补丁包3的50 MB比以往的补丁要小一些。应该是巧合吧,每次的补丁包是一次比一次小。给人一种“XP问题越来越少”的错觉。
与以往不同,今天还打包了一个“包4”,这是自微软Windows Update启用正版用户验证以来,从2005年至今的,仅针对正版用户的Windows补丁。[tc]我的获得途径有两条:一是其它网站,二是某些网站公布的微软网站实际的下载地址(即绕过了正版验证)。
不过这些“正版补丁”也大都是一些无关紧要的东西,比如:某国家自某日起时钟改为夏令计时、Windows某软件新增了几个小功能(比如msconfig新增了一页、远程桌面连接增加了身份验证)、AMD双核需要一些补丁修正电源效率问题等等。不装也罢。
需要补丁的小朋友发邮件。
现视研相关
-1签-
现视研
第一季动画一共12集
漫画一共八卷共50话
现视研(げんしけん)= 现代视觉文化研究会
笹原完士 在进入大学之后,致力于理解“漫画·动画·游戏”的新体验。于是认识了包括 高坂真琴 在内的一票Otaku,自己也朝这个道路前进。另一方面出现在现视研的一直恋慕着高坂的 春日部咲 和cosplay的 大野 等各种人也以现视研为舞台展开了许多有趣的生活。
木尾士目原作的漫画,描写大学生御宅族生活的《现视研》,一开播反响就很大,今天看到这部作品,果然非常有趣,每一集(特别是接近尾声的时候)等能引人大笑一阵。虽然[tc]不是Otaku,但是似乎能从剧情中找到自己的影子。
-2签-
不公正抽签
OVA 3话
除了现视研出现的一些镜头以外,不用问还有其他内容。回过头来看,《现视研》中对《不签》的评论可以说十分到位了。几乎可以说,由于有现视研的评论在先,《不签》才显得格外出色,几乎成为完美的特别适合Otaku看的动画。
不同于一般的校园恋爱、恶搞动画,《不签》的全部内容都是围绕“对决”展开的(照理说是指对候补学生会的认同仪式),剧中,蘑菇料理对决、网页点击对决、在三温热里冷得不能再冷的笑话、诱惑的军训、全世界都要崩溃的卡拉OK、拖延时间的外星人游泳(务必请与TV版的外星人联系起来看!)、高度运气的麻将、可以通PHS电话的骷髅地下室。无一不堪称经典!
-3签-
不公正抽签
TV 12话
TV版讲述的是 千寻 一行人从抽签入学到当上次界立桥院学生会的过程。不过改变了“原作”的不少设定。比如把 夏本 千寻 设定为缺钙正太会长(应该是书记),秋山 时乃 变成了青梅竹马的副会长(应该是会长),律子变成某丰满女(CV居然是 小清水亚美,汗)。唯一值得期待的罗莉会计 朝雾小雪 是个超能力人(应该是会计的浩浩闹闹的一家子中最小的一个),她姐,眼睛女 朝雾忍,人如其名,是个忍者(应该是 朝雾 小牧,会计)、橘泉美 是个反叛的R3S学生会暴力部门领导者(原作是副会长),上石神井莲子 原作是一个半路冒出来的大嘴女、现在居然是书记……这个世界是不真实的。T_T
这次的人物关系变换,以时尚动画来说的确更适合一些,不过以Otaku的眼光恐怕并不是这样认同的。
另外,上届学生会副会长 如月 香橙 的CV是 野上 ゆかな,泰莎的配音。[tc]一直到最后一集才听出来,失败。
从画风角度上说,TV版不如OVA这么卡哇,而且人物经常变型。虽然制作上不受[tc]认同,但是常常在瞬间中产生的暴笑镜头,还是能让本人狂笑不止。特别是外星人的相关内容……
-4签-
现视研2
???
虽然《现视研2》似乎是理所当然应该出现的,不过制作计划却夭折了。可惜!
2007年2月11日星期日
μc/OS-II在S3C2410上的移植小记
uC/OS移植的要点,在[tc]看来主要是两方面:
1、编写任务切换程序
2、实现系统Tick(这是实现可剥夺的关键)
前者很简单,备份当前程序的状态,取回下一任务的状态即可。后者主要是利用定时中断的4号定时器完成。4号定时器是一个内部定时器,从200MHz时钟4分频后(分频比应该在初始化系统时间时设定PLL),经过预分频、分频得到适当的定时长度,然后指定pISR_TIMER4的指针,运行服务程序,最终调用OSTimeTick(),就完成了一次调度过程
。
这个看似简单的过程实际实施起来却异常艰难。
首先,使用定时中断需要MMU帮忙,然而[tc]配的MMU单独运行时没问题,使用定时中断也没问题,但是加上uC就不能工作。
其次,初始化程序不大稳定,有时不硬件复位就会自动软复位。
总之,[tc]智商不够,最后用了官方的SMDK2410的演示程序为样本,适当修改,这才得以工作。
接下来还要调试uC/OS的其它功能,如消息队列、进程同步、死锁、邮箱等等。而进一步的要求,如文件系统、TCPIP等,看来只能等到开学以后了。
累!
2007年2月9日星期五
RightMark CPU Clock Utility
今天发现一款不错的CPU超/降频软件:RightMark CPU Clock Utility。
此前还见过一款界面不错的软件:Notebook Hardware Control(也是非常优秀的!),只是那款的未注册版本限制比较多。
该软件主要实现按照不同的策略设置CPU频率。如图所示,设置为“最大性能”时,CPU工作在200M X 10 = 2GHz下,而“省电”模式下工作在800MHz下,温度是23摄氏度,按照[tc]在主板BIOS中的设定,风扇停转,十分安静([tc]的电源风扇也是静音的)!
之所以能发现这款软件,完全是因为Gigabyte附送的调整软件不好用,[tc]差一点自己写这样的软件的说。
2007年2月7日星期三
2007年2月6日星期二
忘却的旋律
The Melody Of Oblivion
GAINAX J.C.STAFF 2004
www.tbs.co.jp/boukyaku/
TV 23话
20世纪人类和Monster(怪物)之间发生了一场很大的战争,以Monster一方的胜利告终。新世纪,人们忘记了旋律。直到 博卡 遇见了 黑船 先生,成为 旋律战士,开始了一场“寻找传说中的女神”的旅途。全篇除了一头一尾以外,以地点为分界线,分为 白夜岬、鼠讲谷、猿人湾、迷宫岛、幸运河、东京站、圈外圈 等数篇。博卡 和 小夜子……算是在旅行的吧,每到一处,博卡 就放不下那里的居民,在一句“燃烧吧,我的小宇宙”式的“奏响吧,我的旋律”之后,在居民的唾骂声中离开。与《翼·年代记》的回娘家型不同,《忘》是打怪练级型。
GAINAX负责的这部TV动画的制作,制作人员包括了贞本义行。声优阵容也是一如既往的豪华。Bocca·Selenady:桑岛法子、月之森小夜子:浅野真澄、忘却的旋律:能登麻美子、远音:小林沙苗 、スカイブルー:保志总一朗、ホル:森久保祥太郎。非常吸引[tc]的眼球。
制作上看,除了个别明显偷工减料的镜头以外,着色艳丽,叙事完整。适当的时候,对人类趋向软弱的本能做出了深刻的反省。而故事的设定决定了不少英雄的无奈的悲剧的循环。恶魔与人类的矛盾、人类不同国家意识的不同步、人类短浅的目光,在动画中一一展现,十分有趣。
奇怪的是,这一部内涵严肃的作品,到了尾声《圈外圈》篇时,出现了大量OTL画面设计,令人哭笑不得的舞台剧、时不时插进来的奶牛牧场、怪物联盟成员矫揉造作的表演,着实令《忘》增添了几分恶搞的色彩!
2007年2月5日星期一
《[tc]魔兽3 1.21内存修改器》V3
好在基本的代码不用动,因此花了两个小时来改程序。
还是老样子,改英雄的经验、三围、攻速、移动这几项。突然发现钱、木等也是可以改的(怎么才发现……),不过操作起来比较麻烦,我就不写了。
要修改器的同志发邮件。




