- •Содержание
- •Понятие вычислительной системы
- •Организация микроконтроллерных систем управления
- •Микроконтроллеры. Основные сведения
- •Интерфейсы связи с датчиками Сигнальные интерфейсы и цифровые интерфейсы
- •Прием импульсно-дискретных сигналов
- •Демодуляция квадратурно-модулированного сигнала
- •Прием аналоговых сигналов
- •Схемотехника ацп
- •Ацп последовательного счета
- •Ацп последовательного приближения
- •Расширение разрядности. Метод передискретизации
- •Стандартные интерфейсы связи Интерфейсы связи
- •Топологии сетей
- •Последовательный интерфейс i2с
- •Состояние старт и стоп
- •Подтверждение
- •Адресация в шине i2c
- •Преимущества
- •Последовательный интерфейс spi Введение
- •Электрическое подключение
- •Протокол передачи
- •Cравнение с шиной i2c
- •Последовательный интерфейс rs-232
- •Can интерфейс
- •Описание стандарта
- •Контроль ошибок
- •Скорость передачи и длина сети
- •Методы выявления и устранения ошибок данных при передаче
- •Блоковые коды
- •Свёрточные коды
- •Коды обнаружения Циклический избыточный код (crc)
- •Бит чётности
- •Формализованный алгоритм расчёта crc16
- •Корректирующие коды
- •Каскадное кодирование. Итеративное декодирование
- •Выбор кода
- •Некоторые методы (алгоритмы) обработки сигналов
- •Калибровка сигнала
- •Компенсация сигнала
- •Табличные вычисления и тарировочные таблицы Табличные вычисления
- •Тарировочные таблицы
- •Коррекция нуля, обнуление
- •Фильтрация
- •Разностное уравнение дискретного фильтра
- •Рекурсивные (бих) и нерекурсивные (ких) фильтры
- •Устойчивость
- •Зависимости частотных свойств звеньев системы регулирования
- •Регуляторы
- •Регулятор типа п – пропорциональный
- •Регулятор типа пи – пропорционально-интегральный
- •Регулятор типа пид – пропорционально-интегрально-дифференциальный
- •Реализация регуляторов
- •Примерная реализация ядра регулятора на языке Си
- •Выбор длительности такта
- •Вычисления с плавающей и фиксированной точкой
- •Основы технологии разработки программного обеспечения Структура программы на языке Си
- •Компиляция программы
- •Директивы препроцессора
- •Присоединение файла
- •Макросы
- •Условная компиляция
- •Типы переменных
- •Математические операторы
- •Операторы цикла
- •Условный оператор
- •Оператор выбора
Условная компиляция
Препроцессор языка Си предоставляет возможность компиляции с условиями. Это допускает возможность существования различных версий одного кода. Обычно, такой подход используется для настройки программы под платформу компилятора, состояние (отлаживаемый код может быть выделен в результирующем коде), или возможность проверки подключения файла строго один раз.
В общем случае, программисту необходимо использовать конструкцию наподобие этой:
#ifndef FOO_H
#define FOO_H
...(код заголовочного файла)...
#endif
Такая «защита макросов» предотвращает двойное подключение заголовочного файла путем проверки существования этого макроса, который имеет то же самое имя, что и заголовочный файл. Определение макроса FOO_H происходит, когда заголовочный файл впервые обрабатывается препроцессором. Затем, если этот заголовочный файл вновь подключается, FOO_H уже определен, в результате чего препроцессор пропускает полностью текст этого заголовочного файла.
#pragma once - для цели исключения двойного подключения файлов также существует эта нестандартная директива. Стандартом не оговорено как конкретно препроцессор должен обрабатывать эту директиву.
Курьёз с ANSI-директивой «#pragma». Согласно спецификации языка компиляторам предоставлена полная свобода при обработке этой конструкции. До версии 1.17 компилятор GCC при нахождении в исходном коде этой директивы пытался запустить Emacs с игрой «Ханойские башни»
Типы переменных
int - Знаковое целое
float – числа с плавающей точкой.
Тип int означает, что значения перечисленных переменных есть целые,
в отличие от него тип float указывает на значения с плавающей точкой,
т. е. на числа, которые могут иметь дробную часть.
Тип int имеет размер наиболее подходящий для обработки в среде исполнения, но не менее 16 бит.
Числа типа float обычно представляются 32-разрядными словами, имеющими по крайней мере 6 десятичных значащих цифр (лежат приблизительно в диапазоне от10^-8до 10^38).
Помимо int и float в Си имеется еще несколько базовых типов для
данных, это:
char - символ - единичный байт;
short - короткое целое;
long - длинное целое;
double - с плавающей точкой с двойной точностью.
Для того, чтобы не задумываться над фактической длинной типов рекомендуется пользоваться библиотекой inttype.h, определяющей целочисленные типы фиксированной длины: intN_t, uintN_t
Статические массивы объявляются следующим образом:
int i_array[10];
Ссылки и указатели:
int *p; - указатель на инт
int x;
p = &x;
*p=3;
x = 3;
Помимо использования типов с заданной длинной имеет смысл использовать выравненные типы: в названии типа принимает участие размер значения, который может принимать переменная, однако при компиляции тип выравнивается до величины машинного слова, что ускоряет выполнение программы.
Математические операторы
Агебраические
I++ I = I + 1;
I-- I = I – 1;
I @= B I = I @ B; @ - любая операция – (+ - * / % << >> & ~)
Логические (применяются в логических выражениях, например в if)
!! – или
&& - и
== - равенство
!= - неравенство
Битовые
! – или
& - и
^ - исключающее или
<< - сдвиг влево
>> - сдвиг вправо
~ - инверсия
0x01 & 0x01 = 0x01
0x00 & 0x01 = 0x00
0x01 ! 0x01 = 0x01
0x00 ! 0x01 = 0x01