参考:https://blog.csdn.net/yuanhk88/article/details/7846726
在设计串口驱动的过程中,要遵循的两条准则是:
2:尽量的减少程序所占用的内存。
譬如,下面的一段程序(充电桩发送函数)
void Uart_data_send(ENUM_USART port,uint8_t *data,u16 len)
{
USART_TypeDef *sendport = get_uart_port(port);
if(NULL== sendport) return;
USART_GetFlagStatus(sendport, USART_FLAG_TC);
while(len--)
{
USART_SendData(sendport, *data++);
while(USART_GetFlagStatus(sendport, USART_FLAG_TC)==RESET);
}
}
很明显,这段程序在实际应用中将会产生灾难性的后果,
首先,当发送数据送到发送寄存器,启动发送以后,CPU 就一直在等待这个数据发送完成,
然后进入下一个数据的发送,这样,直到所有要发送的数据完成,CPU 才能做其他的事情。
相对于 CPU 内核运行的速度而言,串口外设的运行速度是非常快的,
让一个速度非常快的设备去等待相对很慢的设备,程序的效率是非常低下的。
所以必须采用中断的方式发送数据。