Многие таблицы и справочные руководства по микроконтроллерам содержат инструкции, подобные следующим [цитируемым из справочного руководства по ST]:
- Программируйте новое число состояний ожидания для битов LATENCY в регистре FLASH_ACR
- Проверьте, учитывается ли новое число состояний ожидания для доступа к флэш-памяти, читая регистр FLASH_ACR
- Измените источник тактового сигнала процессора, записав биты SW в регистр RCC_CFGR ...
Если в справочном руководстве указаны некоторые обстоятельства, при которых значение может не вступить в силу немедленно или может вообще не вступить в силу, если запись не будет повторяться, тогда код может учесть такие возможности.В отсутствие какой-либо такой спецификации, как следует ожидать от усердного программиста шага 2?Возможные варианты:
Установите FLASH_ACR, проверьте его и сообщите о фатальной ошибке, если значение не соответствует ожидаемому.
Установите FLASH_ACRодин раз, затем проверьте его в цикле do-while, зацикливая навсегда, если правильное значение никогда не появляется.
Установите FLASH_ACR один раз, затем проверьте его в цикле do-while, но подайте сигнал aфатальная ошибка после некоторого числа итераций, если правильное значение не появляется.
Установите и проверьте FLASH_ACR в цикле do-while, повторяющемся навсегда, если значение никогда не будет установлено правильно.
Установить и проверить FLASH_ACR в цикле do-while, но сообщить о фатальной ошибке после некоторого числа итераций.
Принудительное чтение аппаратного обеспечениязарегистрируйтесь в случае, если это приведет к необходимой задержке, и сделайте значение видимым, если установлена точка останова отладчика, но в противном случае проигнорируйте результат.
Игнорируйте шаг 2, кроме как во время разработки.
IОбычно определенные операции имеют задержанный эффект, а системы требуют, чтобы код ожидал завершения некоторых операций, прежде чем инициировать другие.Неясно, однако, при каких обстоятельствах FLASH_ACR может не быть установлен должным образом при отсутствии повреждения чипа, достаточно серьезного, чтобы сделать любую попытку выполнения программы бессмысленной.Я предполагаю, что проверки в первую очередь предназначены для устранения неполадок в случае, если все работает не так, как задумано, но в остальном не является необходимой частью производственного кода.Как другие люди обрабатывают такие проверки?