Что это значит? Я увидел ниже часть кода во встроенной программе c. Я знаю, что это бесконечный цикл, но с какой целью эта часть кода используется во встроенном c.бесконечный цикл while без оператора
while(1)
{
}
Спасибо ..
Что это значит? Я увидел ниже часть кода во встроенной программе c. Я знаю, что это бесконечный цикл, но с какой целью эта часть кода используется во встроенном c.бесконечный цикл while без оператора
while(1)
{
}
Спасибо ..
Эта конструкция используется для двух разных целей.
while(1) { }
останавливает дальнейшее выполнение до перезапуска (сторожевого таймера) микроконтроллера. Я использовал пустые выражения while (1) {} в отладочных сборках, чтобы удерживать CPU в точке, где была обнаружена ошибка. Это точно так же, как и первая цель, которую вы описали, вместо того, чтобы ждать сброса сторожевого таймера, он ждет присоединения отладчика. Затем с помощью отладчика я могу остановить процессор и проверить переменные, стек и т. Д. И получить некоторые подсказки относительно того, как произошло условие ошибки. – kkrambo
Дополнительно: 3. Это незанятый цикл планировщика RTOS, и работа выполняется в отдельных контекстах потоков. – Clifford
@kkrambo Процессор может дождаться сброса, сторожевого таймера, сбоя питания, выхода из строя или любого источника сброса, который он может поддерживать. Но это бесконечное ожидание в контексте вашей программы. В вашем вопросе не упоминается, что у вас есть отладчик JTAG, что позволяет делать то, что вам нужно, пока процессор все еще ждет. – harper
Все встроенные системы нуждаются в бесконечном цикле, потому что они должны продолжать выполнять до тех пор, пока питание включено. Это не имеет никакого смысла для встроенной программы просто выполнить, а затем вернуться, так как это оставит процессор мертвым и незанятым. Вероятно, это единственная цель этого цикла.
Я бы предположил, что ваш код исходит из приложения с простым металлическим микроконтроллером, поэтому вы можете смело игнорировать все комментарии программиста ПК о спящем и многопоточном режиме; для приложения микроконтроллера не имеет смысла не потреблять 100% процессора, поскольку никто его не использует, кроме вас.
Если вы спите на встроенной системе, вы помещаете аппаратное обеспечение микроконтроллера в режим сна, если оно его поддерживает. Это делается для экономии энергии, а не для экономии циклов процессора.
Вы говорите, что «определенная часть кода предназначена для цели сна»? – user6161
@ user25770 Мы можем сказать вам, что код, который в настоящее время находится в вашем вопросе, предназначен для бесконечного цикла. Цель не может быть выведена без дополнительных кодовых строк вокруг этого цикла. – harper
@ user25770 Нет, я говорю, что люди, которые болтают об эффективных ожиданиях, спящих, многопоточных и контекстных коммутаторах, говорят глупости со встроенной точки зрения системы. – Lundin
Некоторые операционные системы, такие как uC/OS, требуют выполнения незанятой задачи, когда другая задача не выполняется. Это будет иметь наименьший приоритет и будет вытеснено таймером (планировщиком) тиком, если у него когда-нибудь будет шанс на запуск. Случай, который вы описываете, может быть такой задачей.
Чтобы сохранить код, пока не будет выполнено какое-либо другое условие. –
Чтобы поддерживать процесс как занятый и ждать чего-то. –
Вы имеете в виду, что поток должен ждать, пока условие '1' превратится в' 0'? Это не имеет никакого смысла ... –