你这该死的串口(1)

      想不明白为什么客户要4个串口呢,要是要3个立马就给你。客户是上帝,我也只能遵从。
     迫于没有st16c554的源代码,只能自己从wince5自带的ser16550来改写,我几乎确认所有改过的地方是没有问题的,但是偏偏问题就是出现了,根本就不能发送,更别说接收了。可以确定的是寄存器地址没有映射对,也没有中断产生。
     在走投无路之余,用将原来的wince4.2下那个554的dll加载上去试一试了。这个东西竟然不是用com作为prefix,我靠!不过还好这个老的驱动可以发送了,但是很明显在发送完了(在pc端可以看到接收的字符)串口工具就一直挂在那里了。在发送之后(将数据写到寄存器之后)要等一个发送完中断,只有这样才能确定所有的数据都被发送出去了。但是就是这个中断一直没有。
      外部中断号和要映射到的内存地址都是在linux下可以正常的,到了我这里就拜拜了。奇怪之余,只能分析下原来的554的dll了。在网上找了个反汇编的工具--IDA。嘿,这东西还真不错,谁用谁知道,没想到第一次用反汇编工具就这么顺利。对照.map和反汇编的代码找了一通,确实是把内存地址映射的不对以及sysintr也不对,这个家伙太可恶了,不留原代码也就算了,竟然象这些iobase和irq值都不是从reg中读取而是自己在代码中写死的。太过分了!
      怪不得我怎么映射irq和sysintr都没有中断产生呢,正常情况下这些驱动只是和irq有关,象sysintr只是从reg读取的,没有想到那个变态把那给写死了。真是人走了,也带走了所有的残云!

你可能感兴趣的:(职场,串口,休闲)