logo
HCS12 с применением языка С - royallib

6.4. Защитное программирование

В предыдущем разделе мы обсуждали метод «проб и ошибок» при проектировании, позволяющий снизить влияние помех. В этом разделе мы исследуем эффективные программные методы, чтобы снизить чувствительность к помехам. Эта информация адаптирована из статей по применению (Application Notes) фирмы Motorola/Freescale Semiconductor. Точная ссылка приведена в разделе «Что еще прочитать» в конце этой главы. 

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

• Опрос: В этой методике входной вывод опрашивается в течение некоторого периода времени, чтобы гарантировать, что зафиксирован входной сигнал, а не сигнал помехи. Ранее мы обсуждали противодребезговые методы переключения. Как было упомянуто, при одном из таких методов должен контролироваться входной сигнал, чтобы убедиться, что он не изменяется в заданном временном интервале.

• Эстафетная передача: Эта методика гарантирует, что ключевые части алгоритма выполняются в правильном порядке. Это осуществляется, путем расположения в памяти сайта эстафетной коллекции. Когда выполняется алгоритм, в сайт в порядке следования помещаются маркеры. После ввода каждого нового раздела программного обеспечения, исследуется эстафетный сайт коллекции, чтобы гарантировать, что предшествующие части программного обеспечения уже были выполнены в правильном порядке. Если какой-то маркер отсутствует, значит программное обеспечение достигло новой области неправильно. Допустим, например, что вы имеете восемь функций, вызываемых в определенной последовательности. Когда первая функция вызвана, маркер помещается на первое место в эстафетном сайте. Когда вызывается вторая функция, первый маркер проверяется, чтобы удостоверится, что он находится правильном на месте. Если это условие выполнено, помещается второй маркер, показывающий, что была инициализирована вторая функция. Эта процедура проводится для каждой последующей функции.

• Неиспользуемая память: микросхема B32 содержит 32 Кб флэш-памяти, для хранения программы. Было бы идеально записывать в эту память программы объемом точно в 32 Кб. Как эффективно использовать свободное пространство памяти? Хороший программный прием состоит в том, чтобы поместить несколько команд программного прерывания (SWI) на свободное пространство. Следовательно, если процессор неправильно закончит программу в этом пространстве, будет выдана команда программного прерывания. Это обеспечивает устранение сбоев в программе.

• Cторожевой таймер (COP — Computer operating properly): При работе встроенной микропроцессорной системы, необходимо, чтобы она продолжала функционировать правильно. В случае сбоя, процессор должен иметь возможность восстановиться. Одним из методов, который позволяет процессору выйти из режима «зависания» является введение в его состав сторожевого таймера COP. Этот таймер должен непрерывно сбрасываться при нормальном выполнении программы. Если счетчик сторожевого таймера COP переполняется, генерируется сброс COP. Чтобы сбросить таймер до переполнения на регистр сброса таймера COP (COPRST) должна быть послана последовательность команд $55 и $AA. Команды сброса могут быть посланы между командами для 68HC12 контроллера; однако, они должны посылаться через достаточно короткий интервал, чтобы предотвратить ожидание при нормальном выполнении программы. Несколько последовательностей команд $55 и $AA могут быть помещены в ключевые части программы. Если программа «зависает», COPRST не будет получать требуемую последовательность сбросов $55 и $AA. Тогда, контроллер получает команду сброса от таймера COP. Сброс может затем устранять дефект, который первоначально вызвал «зависание».