PIC C - Какова цель этого? - PullRequest
       2

PIC C - Какова цель этого?

4 голосов
/ 20 сентября 2011

В стеке 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) ... break, поскольку он выполняется только один раз?

Ответы [ 5 ]

4 голосов
/ 20 сентября 2011

Похоже, старый код для меня. Обычно для инициализации ФАПЧ и т. П. Используется цикл while (1) , но обычно условие прерывания зависит от бита состояния регистра в этих обстоятельствах.

Если бы это был я, я бы закомментировал строку while (1) , перекомпилировал и увидел, появился ли дым; -)

1 голос
/ 20 сентября 2011

Поскольку в теле цикла нет операторов continue или безусловных goto, я бы сказал, что это всего лишь способ заключить область видимости в этот раздел кода. Интересно, что в области действия не объявляются автоматические переменные, что делает область довольно бесполезной.

0 голосов
/ 21 сентября 2011

Есть только один путь к действительно определенному ответу: спросите у продавца историю этого файла (желательно с сообщениями журнала регистрации).Все остальное похоже на спекуляцию.

0 голосов
/ 21 сентября 2011

Возможно, это чаще всего записывается как цикл do { ... } while (0);, который не нуждается в разрыве (если вам не нужен ранний выход из цикла). В этом контексте, как говорили другие, это не дает никакой выгоды, если одна из двух функций не является макросом, но макрос в любом случае должен быть автономным.

0 голосов
/ 20 сентября 2011

Должно быть для сферы.Я не вижу никакой другой причины.

РЕДАКТИРОВАТЬ

Кроме того, это может быть кто-то, кто-то копировал / вставлял код откуда-то еще, у которого было продолжение / разрыв / и т.д.в блоке просто поместите свой собственный код, не думая об этом.

...