新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2018-3-9
- 在线时间
- 28 小时
|
本帖最后由 盖爷 于 2018-8-9 00:47 编辑
在论坛上看到许多大佬写的程序:
u8 DMA1_Star_SPI_TX(u8 *buffer)
{
DMA1_Channel5->CNDTR=512;
DMA1_Channel5->CMAR=(uint32_t)buffer;
DMA_Cmd(DMA1_Channel5,ENABLE);
while(!DMA_GetFlagStatus(DMA1_FLAG_TC5));
DMA_ClearFlag(DMA1_FLAG_TC5);
DMA_Cmd(DMA1_Channel5,DISABLE);
}
以这个为例子,程序中有 while(!DMA_GetFlagStatus(DMA1_FLAG_TC5)); 这句话,这说明我调用这个函数时,程序会在 while(!DMA_GetFlagStatus(DMA1_FLAG_TC5)); 这个地方停止一段时间,直到标志位置位。
但是我看原子哥的程序里,并没有whlie()判断。
DMA的意思是直接内存传输,所以不占用CPU的资源,但是许多大佬加上了 while(!DMA_GetFlagStatus(DMA1_FLAG_TC5)); 这句话,这不是间接地占用了CPU资源了吗,因为当没有传输完成时,程序就一直卡在while循环里面不出来,没法执行其他的函数,所以我想知道为啥许多人写程序时要加这句话,加这句话有啥好处啊?
|
|