PIC C - 这是为了什么目的?

时间:2011-09-20 19:46:26

标签: c pic

在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)...的功能是什么?因为它只执行一次?

5 个答案:

答案 0 :(得分:4)

对我来说看起来像遗留代码。通常有一个 while(1)循环来初始化PLL等,但通常情况下,断开条件取决于那些情况下的寄存器状态位。

如果是我,我会注释 while(1)行,重新编译,看看是否有烟雾出现; - )

答案 1 :(得分:1)

由于循环体中似乎没有continue语句或无条件goto,我想说它只是围绕该部分代码封闭范围的一种方式。有趣的是,在范围内没有声明自动变量,这使得范围变得毫无用处。

答案 2 :(得分:0)

必须是范围。我没有看到任何其他原因。

编辑

此外,可能有人从其他地方复制/粘贴代码,在块中有一个continue / break / etc然后只是将自己的代码放在那里而不考虑它。

答案 3 :(得分:0)

它通常可以写成do { ... } while (0);循环,不需要中断(除非你需要提前退出循环)。在这种情况下,正如其他人所说,它似乎没有提供任何好处,除非这两个函数中的一个实际上是宏,但宏应该是自包含的。

答案 4 :(得分:0)

只有一种方法可以获得真正明确的答案:向供应商询问该文件的历史记录(最好使用签到日志消息)。其他一切似乎都在猜测。