[an error occurred while processing this directive] [an error occurred while processing this directive]
Ну если уж о советах...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено John 14 января 2002 г. 12:09
В ответ на: че это нельзя??? p.s. a что такое внешние п/п? отправлено Faith Healer 14 января 2002 г. 11:30

Программирую МК более 10 лет, за это время пользовался примерно 10 компиляторами разных фирм и для разных МК. Не буду утверждать, что все сказанное ниже верно для всех компиляторов, для всех МК, для всех уровней оптимизации. Но все же... Слищком уж часто неработающая программа лечилась только выполнением нижеследующих правил. Основная причина - большинство функций (собственных или библиотечных) нереентерабельны. К тому же, при большой вложенности вызываемых в прерывании функций может и стек переполниться. Да и при больших уровнях оптимизации умные компиляторы сохраняют при входе только использованные регистры, но как определить их при нескольких вложениях вызываемых функций - я не понимаю.
Короче, советы из серии "Береженого бог бережет".
1. Стараюсь не вызывать из процедер обработки прерываний другие функции. Ну уж по крайней мере, если это и делаю, то вызываю их ТОЛЬКО из единственного места и без дальнейшей вложенности.
2. Никакой арифметики с чилами long и float в прерывании. Это тоже будет вызов библиотечной функции.
3. По возможности не использовать в прерывании switch. Сам видел, как в каком-то компиляторе он обрабатывался как вызов функции.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru