最近一直在读《软件工艺》,熊节翻译的文字非常自然,读来丝毫不觉这是翻译过来的。
正如译者所言,这不是一本具有“煽动性”的书,而是一本具有“颠覆性”的书。
工艺,craftsmanship,与我心有戚戚~~
以前我也曾有这般奇思妙想:苦心孤诣创作出的软件,犹如纯手工打造的超级跑车,看着它流畅高速的奔跑是一大快事!此书表达的正是这样的观点:软件大多都是需要精雕细磨的手工艺品,而不是像航天飞机控制系统一样需要耗费数万人年的大工程;创作软件的是活生生的人,而不是抽象的软件工程;因此,应该致力于提高软件手工艺者的技能以促进软件制品质量的提高,而不是像软件工程般思考如何利用平庸的大批初级coder来建造软件。
今日上21ic,看到有人提问:USB传输都是由主机发起的,那么USB设备将数据准备好后放在端点后,主机是怎么知道数据已经准备好了呢?我看到的几个回答都是说驱动程序或者应用程序会不停的查询端点,但总觉得ISP1160不是这样的,于是翻开数据手册查看,终于搞明白了。
在ISP1160内部有一个FIFO RAM,分为ITL和ATL两个区,中断传输、控制传输、批量传输都是用ATL,而同步传输用ITL。
ISP1160的工作原理是:只要将主机要发送的数据按照固定的格式写入ATL区,那么ISP1160就会自动的将数据包发送给设备,并且自动读取设备的返回数据,将返回数据写入ATL区。那么在驱动程序的编写者看来,我们需要做的只是将标准请求之类的数据包按要求的格式写入ATL区,就可以一直等待,直到有ATL中断产生,然后我们查看ATL中断类型,如果是数据已经被读取,说明此时ATL区的数据是返回的设备数据,我们只要去读ATL区的数据就可以了。
使用ISP1160,你完全不用担心和从端USB的交互问题,只管发命令,收数据即可,ISP1160会自动搞定一切!
文章评论(0条评论)
登录后参与讨论