|
发表于 2012-10-8 20:26:10
|
显示全部楼层
taocongrong 发表于 2012-10-7 18:09
这个问题傻孩子老师已经给我解答了,很详细,你说的也对,要真正的明白,我提出的问题那个mcu love没有直 ...
之前手机回帖不方便,现在在电脑上面回你。
好像你有个问题没有搞清楚。不管是中断+缓冲方式 还是直接等待发送这种方式,这个效率不是你用示波器测波特率能够测出来的。
对于指定的波特率,难道你能够测出来两种波形???
好了,下面重点讲讲效率的问题。
假设系统中有一个主机, N个从机,通信方式为主机主动发起,从机应答。每个命令包长度为10个字节。
假定波特率9600 bps
则一个命令包长度发送完毕耗时约为 11 ms
采用查询方式发送:
//伪代码,下面函数发送指定 字节, 采用等待方式发送
SendCmdPacket(uint8 * pBuffer, uint8 u8Length)
//伪代码,下面函数发送指定 字节, 采用中断+缓冲方式
SendCmdPacketToBuffer(uint8 * pBuffer, uint8 u8Length)
则调用SendCmdPacket()发送时候,该函数会阻塞 11ms 直到发送完毕
相反,调用SendCmdPacketToBuffer()发送时候,该函数将数据包复制到缓冲区后,立即返回,耗时可能只有不到 0.1 ms 时间
加上中断处理时间 整个数据包发送完毕消耗CPU时间约为 1ms
相比查询方式,中断方式可以多出10ms 时间用来处理其它任务,这10 ms 就是效率!!!
而且通信数据包长度越长,优势越明显。
你的主机系统不可能只有通信任务,如果还有按键,显示等等其它任务,则用中断+缓冲能够提高整个系统的实时性!
明白否? |
|