|
Все примеры, изложенные в данной статье, компилировались в версии компилятора AVR GCC WinAVR-2007-05-25 применительно к микроконтроллеру Atmel AVR ATmega128 на языке C. Но так как для реализации использовалась версия документации gcc-4.1.2 то практически все примеры должны работать на других микроконтроллерах и микропроцессорах, с использованием компилятора GCC. Статическая память в точке вызова В программах для АСУ ТП часто встречаются задачи с использованием передаточных функций. Рассмотрим пример реализации апериодического звена первого порядка. W(p) = 1/(Tp+1) После перехода к конечным приращениям получаем Yn = Yn_1 + (Xn - Yn_1) *dT/T Такие функции требуют внутренней статической памяти для хранения Yn-x и Xn-х значений, в данном случае Yn_1. Классически для реализации этой задачи требуется выполнить следующие действий: 1. Создать класс (C++, C#) или алгоблок (язык ST), содержащие необходимые данные и вычислительную функцию (тело алгоблока). 2. Создать именованные объекты класса (алгоблока) 3. Вызвать вычислительные функции для всех именованных объектов Такой способ весьма неудобен. Возникает вопрос, можно ли создать конструкцию, статические данные которой выделяются в точке вызова?. Оказывается можно!!!. Компилятор GCC предоставляет расширение, которое называется compound statement (наиболее удачный перевод составной оператор).
|