mokongking

while(1),for(;;)死循环

在使用while(1)或者for(;;)等死循环中,需要注意的赋值语句,在死循环中赋值然后进行++,或者--,这个值一定不会执行完成,因为一轮循环之后再一次循环的话一定会被重新赋上初值。要想赋上初值再循环内改变,要把赋值语句写在死循环外面,然后值的改变在死循环内++或者--,如果定义指针变量也是同理

例如

如果PWRTIME或者osctime定义在while(1)里将一直会是20,30,经过一次循环后会变成19,29但再一次进入循环中会一直是20,30

typedef struct _TONE_Def
{
uint8_t Freq; //频率
uint8_t OSCTime; //振荡持续时间,最小单位为10ms
uint8_t PWRTime; //供电持续时间,最小单位为10ms

}

 struct _TONE_Def Tone3[] = {{FREQ_2K9, 30, 20},{FREQ_2K6, 30, 20},{FREQ_2K3, 210, 10},{FREQ_NO, 0, 0}}

void Player2(struct _TONE_Def Tone3[])
{
int i = 0;
uint8_t PWRTime = Tone3[i].PWRTime;
uint8_t OSCTime = Tone3[i].OSCTime;

while(1){

//先判断供电持续时间
if (PWRTime != 0){
PWRTime --;
BEEP_ON;
}
else
BEEP_OFF;

//再判断振荡持续时间
if (OSCTime != 0){
OSCTime --;
BEEP_SetFreq(Tone3[i].Freq);
}
else{
HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);//停止
i++; //取下一个音调
PWRTime = Tone3[i].PWRTime;
OSCTime = Tone3[i].OSCTime;
}
if (Tone3[i].Freq == FREQ_NO)
break;
osDelay(10);
}
}

 

posted on   虎啸岳林  阅读(214)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用

导航

统计信息

点击右上角即可分享
微信分享提示