• 10
  • 11月

抽空,又给Typecho换上了这套皮肤。

话说,这套皮肤,我已经用了三个Blog了。

这套皮肤的原作者是Hoofei。

第一次,用的还是风色的O-Blog,当时看到这套皮肤就很喜欢,于是就弄了过来。

后来,O-Blog一直没更新,而又一直没有标签功能,就在这时,发现了Magike!理所当然,自己弄了个程序,再加上半人工处理,把Blog数据给搬了过去,同时,已带上了这套皮肤。

再后来,“寒泥的无聊日志”停止了一段时间。Typecho就出世了,于是就到了现在,又把这套皮肤给弄过来了。

至于数据呢?在第一篇已经说过了,只能当成一份回忆了。

  • 5
  • 11月

用51移植一个小型OS时,遇到了中断方面的一个问题。

因为,51的中断有一个特性:如果多个中断同时产生中断(或者在关闭EA时发生了多个中断),在EA打开的时后,每执行一个中断,必须执行主程序的一条指令,才能进入下一个中断。据说这个主要是为了实现51的单步调试功能而设计的。我不知道是不是所有的51的特性都是这样,或者其它体系的芯片会不会这样。

这样会有什么问题呢?

在OS任务切换过程,我们会遇到以下形势的代码:

EA = 0;  //进入临界区1<br />
任务1由就绪转入等待;<br />
任务1加入等待队列;<br />
产生任务切换软中断;<br />
EA = 1;  //退出临界区1<br />
(这里将进入软中断,发生任务切换事件)<br />
EA = 0;  //进入临界区2<br />
等待队列中删除任务1;<br />
EA = 1;  //退出临界区2


我们的原意是要在退出临界区1的时候进行任务切换。然而,在临界区1的时候,有可能已经产生了其它中断,而任务切换软中断的自然优先级最低,这时候,由于中断的特性,执行完其它中断任务后,会关闭EA!!

于是,没有在我们预想的地方进行任务切换。真正的切换是等到退出临界区2后!!

接下来问题就大了:由于等待队列中已经删除了任务1,那么任务1将永远无法被唤醒了。任务1就成了一个死任务。

那么,有什么解决办法呢?

1、如果可以更改芯片设计,则改为中断后不执行任何主程序的执令。
2、提高切换任务的优先级至最高。
3、不使用软中断,而是采用直接调用函数的方法进行任务切换。
4、在临界区1与临界区2之间的区域加入足够多的NOP指令。


以上几种方法均能解决。至于详细方法,这里就不多说了。

  • 4
  • 11月

今天,做了一个大胆的举动。挑战一下跑4公里。

事情的起因是这样的:昨晚呢,木舟同学问我最近除了上班还有做什么。我就说,跑步啦。然后他又问我跑多远。我就说大概1.5公里吧。

接下来,他就说了,1500米也叫跑步?

这个时候,我突然意识到,自己平时的锻炼强度真的不够了?

于是乎,今天给自己加了一个新的强度:4公里。这是有始以来,我跑得最远的一次了。

感觉跑到3公里左右的时候,真的像是到了自己的极限一样,4公里跑下来,真是好累,有那种突破极限的感觉。

嗯,也许多练几天就会好了吧。继续加油!

  • 30
  • 10月

经常看到SD/MMC这样的写法。Hanny在这里稍微总结一下SD卡和MMC卡的异同点吧。

首先,两者在外型的规格上是几乎一致的。而且两都的接口是兼容的。也就是说,两者可以用同一个卡座来进行读取。而且,两者在时序上也是一致的,读写命令控制也完全一样,这就是为什么经常把两者混在一起写的原因。

不过,虽说外型几乎一致,但还是有点差异的。MMC比SD卡要薄一些,并且,长度只有SD卡的一半。

下面,Hanny从主机驱动方面谈谈两者的差异。

在数据位宽方面,MMC卡最大支持8BIT,而SD卡只能支持4BIT传输。

在卡的激活过程,MMC使用CMD1来进行激活,而SD卡使用ACMD41来进行激活的。于是,这两条命令也成了主机区分两种卡的类型的关键。

在获取卡的RCA地址时,MMC卡是由主机分配RCA给设备,而SD卡则是由设备返回RCA给主机。

在CMD6的使用方法上也有很大不同。MMC有EXT_CSD的概念,主要用CMD8进行读取,CMD6进行设置。而SD卡则只用CMD6进行UserFunction的设置。SD卡的CMD8主要用于区别SD1.0和SD2.0。

MMC还支持CMD14和CMD19进行主线测试,从而选择合适总线进行通信。SD则不支持。

另外,MMC卡还支持CMD11、CMD20这类数据流操作,因此较多用于媒体设备上。MMC还支持Boot等高级的用法。

  • 24
  • 10月

SD/MMC卡的读写模式分两种。一种是利用SD总线来进行数据传输,这里称为SD模式;另外一种是利用SPI总线来进行数据传输,这里称之为SPI模式。

最初接触SD/MMC卡时,Hanny一直觉得很奇怪,为什么SD/MMC卡要提供两种模式进行访问呢?比较完这两种模式的区别,分析其运用场合,就会明白答案了。

SD卡主要工作于4BIT SD模式下(MMC可能工作在8BIT SD模式下)。其读写最高时钟可达50MHz,因此,市面上的卡的读取速度能到达20MB/s以上,已经算极限了。SD模式也是SD卡的主要工作模式。

而SPI模式只有1BIT的带宽,而且时钟最高只能到25MHz,因此读取速度通常低于3MB/s。但是SPI模式对硬件要求较低,一般广泛用于MP3等对读卡速度要求不高的低端场合。

Hanny当时还有一个疑问:SD模式不是也同样支持1BIT模式吗?为什么不直接用SD的1BIT模式呢?

后来才明白:1、SPI总线是一个通用总线,大部份芯片都用硬件模块;2、SPI模式支持不带CRC校验的传输方式,可以降低硬件要求;3、SD的CMD线与DATA线之间有可能同时产生数据,对没有SD硬件模块的主机支持起来难度较高。