- •Тема 1. 7
- •Тема 2. 22
- •Тема 3. 41
- •Тема 4. 83
- •Основные временные параметры микропроцессора кр580ик80а
- •Программное обеспечение микропроцессора
- •Команды перемещения данных
- •Представлением операнда
- •Команды переходов ( альтернативные команды )
- •Специальные команды
- •Кодирование программы
- •Архитектура последовательного интерфейса кр580ик51
- •Управления от мп
- •Архитектура программируемого таймера кр580ви53
- •И микропроцессором
- •Архитектура бис параллельного интерфейса кр580вв55
- •Сигналами ппи
- •Архитектура контроллера прямого доступа к памяти кр580вт57
- •Архитектура бис программируемого контроллера прерываний кр580вн59
- •Генератор тактовыхимпульсов кр580гф24
- •Системный контроллер и шинный формирователь кр580вк28
- •Буферные регистры кр580ир82 и кр580ир83
- •Шинные формирователи кр580ва86 и кр580ва87
- •Пример подключения микросхемы кр580ви53 к микропроцессорной системе через контроллер прерываний кр580вн59
- •Пример подключения аналого-цифрового преобразователя.
- •Пример совместного использования микросхем комплекта для управления технологическим процессом.
- •Декларирование объектов
- •Структура программы
- •Константы
- •Арифметические операции
- •Преобразование типов операндов арифметических операций
- •Побитовые логические операции, операции над битами
- •Функции вывода информации
- •Стандартные математические функции
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Пример использования оператора if
- •Циклические операторы while и do–while
- •Пример использования оператора for
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операция sizeof
- •Указатели на указатели
- •Пример динамического размещения одномерного массива в с
Пример динамического размещения одномерного массива в с
Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).
Пример динамического размещения при работе со строковыми данными в С
Динамическое размещение данных
Если в задаче заранее неизвестно количество объектов и объект описан указателем удобно использовать динамическое размещение данных.
Прототипы функций работы с памятью находятся в библиотеке alloc.h, рассмотрим основные из них:
void *calloc(unsigned n, unsigned m); - возвращает указатель на начало области памяти для размещения n элементов по m байт каждый, при неудачном завершении возвращает значение NULL;
void *malloc(unsigned n); - возвращает указатель на блок памяти длиной n байт, при неудачном завершении возвращает значение NULL;
void *realloc(void *bf, unsigned n); - изменяет размер ранее выделенной памяти с адресом начала bf на n байт;
void free(void *bf); - освобождает ранее выделенный блок памяти с адресом bf;
coreleft(void); - возвращает значение объема неиспользованной памяти (тип возвращаемого результата unsigned – для моделей памяти tiny, small, medium; unsigned long – для других моделей памяти).
Пример выделения памяти для массива действительных чисел размером n:
float *x; // Указатель объекта типа float – x[0]
int n; // Количество элементов массива
. . .
x=(float*)calloc(n,sizeof(float)); // Захват памяти для n элементов
. . .
free(x); // Освобождение памяти
В С++ введены две операции: захват памяти - new и освобождение захваченной ранее памяти - delete.
Общий формат записи:
указатель = new тип (значение);
. . .
delete указатель;
Например:
int *a;
a = new int (8);
данном случае создана целочисленная динамическая переменная, на которую установлен указатель a и которой присвоено начальное значение 8. После работы с ней освобождаем память:
delete a;
Операции new для массивов:
указатель = new тип [количество] ;
Результат операции – адрес начала области памяти для размещения данных, указанного количества и типа; при нехватке памяти – NULL.
Операция delete для массивов:
delete [ ] указатель;
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <calloc.h>
void main(void)
{
char *s;
int i, k;
clrscr();
puts(" Vvedi stroky");
gets(s);
k=strlen(s);
s=(char*)calloc(k,sizeof(char)); // Захват памяти для строки длиной k
for (i=0; i<(int)(k/2); i++)
if(s[i]!=s[k-i-1]) { puts("\n NO!!"); getch();
free(s); exit(0); }
puts("\n YES - Polindrom!");
getch();
free(s); // Освобождение памяти
}
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<alloc.h>
void main(void)
{ int i,n; float *a;
puts(“\n Input n:”);
scanf(“%d”,&n);
printf(“\n Свободная память -%d”,coreleft());
a=(float*)calloc(n,sizeof(float)); // Захват памяти
printf(“\n Array a \n”);
for(i=0; i<n; i++) {
*(a+i)=(float)random(10); // Диапазон от 0 до 10
printf(“ %d“, a[i]);
}
printf(“\n Память после захвата -%d”,coreleft());
free(a); // Освобождение памяти
getch();
Контрольная работа(является допуском к итоговому контролю):
Написать и защищать программу для подъемного механизма.
Вопросы на экзамен
1. Структура микропроцессора КР580ИК80А.
2. Система команд микропроцессора Кр580ИК80А.
3. Основные временные параметры микропроцессора КР580ИК80А 14
4. Программное обеспечение микропроцессора.
5.Система команд.
6.Команды перемещения данных.
7.Команды обработки данных.
8. Команды переходов ( альтернативные команды )
9. Команды ввода вывода.
10 . Специальные команды.
11. Кодирование программы.
12.Вспомогательные устройства микропроцессорных систем.
13. Архитектура последовательного интерфейса КР580ИК51.
14. Архитектура программируемого таймера КР580ВИ53.
15. Архитектура БИС параллельного интерфейса КР580ВВ55.
16. Архитектура контроллера прямого доступа к памяти КР580ВТ57
17. Архитектура БИС программируемого контроллера прерываний КР580ВН59
18. Генератор тактовыхимпульсов КР580ГФ24.
19. Системный контроллер и шинный формирователь КР580ВК28.
20. Буферные регистры КР580ИР82 и КР580ИР83.
21. Шинные формирователи КР580ВА86 и КР580ВА87.
Составил: к.п.н.,доцент кафедры ИТ Салихов И.Ш.
