完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
4个回答
|
|
STM32串口+freeRTOS+DMA+先进先出队列+动态内存申请
1:尽量的减少程序运行的时间。 2:尽量的减少程序所占用的内存。 譬如,下面的一段程序: 程序段1-1 /*指针是指向ptr,需要发送count个数据*/ void USART1WriteDataToBuffer(*ptr,u8 count) { /*判断数据是否发送完毕*/ while(count--) { /*发送数据*/ USART1SendByte(*ptr++); /*等待这个数据发送完毕,然后进入下一个数据的发送过程*/ while(USART_GetFlagStatus(USART1,USART_FLAG_TC); } /*数据发送完毕,返回*/ } 很明显,这段程序在实际应用中将会产生灾难性的后果,首先,当发送数据送到发送寄存器启动发送以后,CPU就一直在等待这个数据发送完成,然后进入下一个数据的发送,这样,直到所有要发送的数据完成,CPU才能做其他的事情。相对于CPU内核运行的速度而言,串口外设的运行速度是非常快的,让一个速度非常快的设备去等待相对很慢的设备,程序的效率是非常低下的。 所以必须采用中断的方式发送数据。 程序段1-2 /*将数据写入发送缓冲区*/ void USART1WriteDataToBuffer(*ptr,u8 count) { while(count!=' |