|
串口模拟在单片机上就能做,wince至少是ARM9等级,那想做是能做的,功能肯定是能实现的。当然,首先你得真正的理解串口通讯原理。
发送,就按照串口协议,定时的将IO口拉高拉低就行了。
接收,定时的读取IO的状态,逐次移位到一个8bit(1 char)数据类型中就行。从采样率定理讲,采样频率至少是通讯频率的2倍才能获得有效数据。
只是,在wince操作系统中,强行模拟串口有如下的性能问题:
1. 高端CPU之所以加入N多的外设接口,本来就是想释放CPU以加强CPU的运算、处理能力的,尤其是编解码及刷屏。
而GPIO的反复操作(配置、读取),是需要CPU直接参与的,将耗费大量的CPU时间。因此肯定会影响CPU的性能。
2. 串口是异步通讯,必须有一个严格精确(不是绝对精确)的时钟来进行采样定时。偏偏在操作系统里面,“定时”这个工作是很难完全实现的,因为系统有线程的存在,你必然需要将串口的线程设为最高优先级,不然很容易被别的线程给挤掉,除非你确定用户只运行你指定的有限程序。
一个最低端的IO口操作,却不得不设为最高优先级,这样同样会影响系统原本的性能。
3. 系统的中断一大堆,比IO口中断等级高的太多了,只要中断2次,就能让串口丢掉一次正确的数据,这肯定是不希望看到的,但这又是很难解决的,除非禁止掉别的中断。这个和系统的线程优先级不是一个概念。
4. 因为以上原因,模拟串口,一般不建议高速率,常用都在9600及以下。即使如此,仍然需要考虑串口的FIFO。
做事先没有最好,只有最不坏。先考虑可能碰到的问题,再去做,免得浪费自己的时间精力。 |
|