О пользе паники

25.06.2006 15:13:39

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

На SDK у меня рулит ОС CustOS, собственного сочиненья, она успешно прикидывается ОСРВ и всячески управляется с его железом, а заодно ведает многопоточностью. Есть там, естественно, замечательный драйвер UART, который в данной работе чуть ли не всему голова (ибо сетевые протоколы реализуем поверх того самого UART). Драйвер имеет обработчик прерывания. Очень простой. ADuC812, который сидит в SDK, работает тривиально — устанавливает бит RI или TI, в зависимости от того, чего он хочет — поделиться свежим байтом или послать новый и дергает хорошо известное прерывание.

Здесь надо еще сказать, что в CustOS есть самая главная функция — panic(). Это чистое произведение искусства, которое вырубает все прерывания, после чего бесконечно и яростно моргает диодами. Вызовы паники аккуратными капканами расставлены по всему коду CustOS, дабы ловить заблудшую в дебрях кода ОС. В основном, капканы эти стоят там, где никогда ничего не должно происходить, поэтому, если уж мы каким-то образом попадаем в обозначенный код — значит происходит что-то очень страшное.

Ну и, стало быть, мощный обработчик прерывания UART в моем исполнении выглядит где-то так:

if (RI) {
        ...blah-blah-blah...
} else if (TI) {
        ...blah-blah-blah...
} else {
        panic();
}

Ежу понятно, что паники никогда быть не может, потому что без установленных RI или TI у нас прерывания быть не может, так? Нет! В процессе продвижения к цели я дошел до ситуации, когда паника происходит очень даже стабильно и замечательно. Надо сказать, что драйвер очень давно существует и работал до сего момента очень даже стабильно.

Панику пришлось обрубить, однако проблемы передачи какие-то остались. Интересно живем.

Закомментировать

Вам бы, по-хорошему, зарегистрироваться сначала надобно, прежде чем комментарии оставлять. Но, в порядке исключения, можете попробовать с OpenID проскочить, вдруг.