在Microchip TCP / IP堆栈中,我们遇到以下代码:
while(1)
{
AppConfig.MyIPAddr.Val = MY_DEFAULT_IP_ADDR_BYTE1 | MY_DEFAULT_IP_ADDR_BYTE2<<8ul | MY_DEFAULT_IP_ADDR_BYTE3<<16ul | MY_DEFAULT_IP_ADDR_BYTE4<<24ul;
AppConfig.DefaultIPAddr.Val = AppConfig.MyIPAddr.Val;
AppConfig.MyMask.Val = MY_DEFAULT_MASK_BYTE1 | MY_DEFAULT_MASK_BYTE2<<8ul | MY_DEFAULT_MASK_BYTE3<<16ul | MY_DEFAULT_MASK_BYTE4<<24ul;
AppConfig.DefaultMask.Val = AppConfig.MyMask.Val;
AppConfig.MyGateway.Val = MY_DEFAULT_GATE_BYTE1 | MY_DEFAULT_GATE_BYTE2<<8ul | MY_DEFAULT_GATE_BYTE3<<16ul | MY_DEFAULT_GATE_BYTE4<<24ul;
AppConfig.PrimaryDNSServer.Val = MY_DEFAULT_PRIMARY_DNS_BYTE1 | MY_DEFAULT_PRIMARY_DNS_BYTE2<<8ul | MY_DEFAULT_PRIMARY_DNS_BYTE3<<16ul | MY_DEFAULT_PRIMARY_DNS_BYTE4<<24ul;
AppConfig.SecondaryDNSServer.Val = MY_DEFAULT_SECONDARY_DNS_BYTE1 | MY_DEFAULT_SECONDARY_DNS_BYTE2<<8ul | MY_DEFAULT_SECONDARY_DNS_BYTE3<<16ul | MY_DEFAULT_SECONDARY_DNS_BYTE4<<24ul;
// Load the default NetBIOS Host Name
memcpypgm2ram(AppConfig.NetBIOSName, (ROM void*)MY_DEFAULT_HOST_NAME, 16);
FormatNetBIOSName(AppConfig.NetBIOSName);
break;
}
while(1)...的功能是什么?因为它只执行一次?
答案 0 :(得分:4)
对我来说看起来像遗留代码。通常有一个 while(1)循环来初始化PLL等,但通常情况下,断开条件取决于那些情况下的寄存器状态位。
如果是我,我会注释 while(1)行,重新编译,看看是否有烟雾出现; - )
答案 1 :(得分:1)
由于循环体中似乎没有continue
语句或无条件goto
,我想说它只是围绕该部分代码封闭范围的一种方式。有趣的是,在范围内没有声明自动变量,这使得范围变得毫无用处。
答案 2 :(得分:0)
必须是范围。我没有看到任何其他原因。
编辑
此外,可能有人从其他地方复制/粘贴代码,在块中有一个continue / break / etc然后只是将自己的代码放在那里而不考虑它。
答案 3 :(得分:0)
它通常可以写成do { ... } while (0);
循环,不需要中断(除非你需要提前退出循环)。在这种情况下,正如其他人所说,它似乎没有提供任何好处,除非这两个函数中的一个实际上是宏,但宏应该是自包含的。
答案 4 :(得分:0)
只有一种方法可以获得真正明确的答案:向供应商询问该文件的历史记录(最好使用签到日志消息)。其他一切似乎都在猜测。