Цитата(Smoky @ Jan 1 2018, 21:40)

Прошу посмотреть фрагмент программы и сказать что я делаю не так.
Студии у меня нет, посмотрел глазами.
С функциями уже хорошо.
Но переменные объявляете не правильно.
1) Все объявления переменных, по которым компилятор выделяет память, должны находится в начале .c файлов.
В .h файлах помещаются только разные макросы и определения.
То есть, всякие:
volatile word sign_clcdur=0;
двигаем в .c файл.
Если эта переменная используется только в нем, больше ничего не нужно.
Если она применяется еще в других файлах, тогда в соответствующий .h добавляется:
extern volatile word sign_clcdur;
И этот .h файл включается через #include туда, где применяется.
2) Структуры объявляются через typedef в .h файлах
typedef volatile struct //Структура индексов
{
bit level:1; //Индекс текущего уровня звукового порта
bit waiting:1; //Индекс ожидания готовности к формированию звукового сигнала
} insg_t;
extern insg_t insg;
Само определение структуры, по которому выделяется память и проводится инициализация, в .c файле:
insg_t insg = {0,0};
3) Порядок нескольких #include имеет значение, т.к. компилятор работает последовательно,
он не знает определений, которые будут "ниже", "позже".