🗊Презентация Типизация в языках программирования

Нажмите для полного просмотра!
Типизация в языках программирования, слайд №1Типизация в языках программирования, слайд №2Типизация в языках программирования, слайд №3Типизация в языках программирования, слайд №4Типизация в языках программирования, слайд №5Типизация в языках программирования, слайд №6Типизация в языках программирования, слайд №7Типизация в языках программирования, слайд №8Типизация в языках программирования, слайд №9Типизация в языках программирования, слайд №10Типизация в языках программирования, слайд №11Типизация в языках программирования, слайд №12Типизация в языках программирования, слайд №13Типизация в языках программирования, слайд №14Типизация в языках программирования, слайд №15Типизация в языках программирования, слайд №16Типизация в языках программирования, слайд №17Типизация в языках программирования, слайд №18Типизация в языках программирования, слайд №19Типизация в языках программирования, слайд №20Типизация в языках программирования, слайд №21Типизация в языках программирования, слайд №22Типизация в языках программирования, слайд №23Типизация в языках программирования, слайд №24Типизация в языках программирования, слайд №25Типизация в языках программирования, слайд №26Типизация в языках программирования, слайд №27Типизация в языках программирования, слайд №28Типизация в языках программирования, слайд №29Типизация в языках программирования, слайд №30Типизация в языках программирования, слайд №31Типизация в языках программирования, слайд №32Типизация в языках программирования, слайд №33Типизация в языках программирования, слайд №34Типизация в языках программирования, слайд №35Типизация в языках программирования, слайд №36Типизация в языках программирования, слайд №37Типизация в языках программирования, слайд №38Типизация в языках программирования, слайд №39

Содержание

Вы можете ознакомиться и скачать презентацию на тему Типизация в языках программирования. Доклад-сообщение содержит 39 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Есть ли у вас вопросы?
Описание слайда:
Есть ли у вас вопросы?

Слайд 2





Краткое содержание предыдущей серии
Что такое CISC и RISC?
В чем их основные отличия?
Что это такое и что здесь что?
0x08000330 6011   STR r1,[r2,#0x00]
Что такое адресация?
Какие способы адресации вы помните?
Описание слайда:
Краткое содержание предыдущей серии Что такое CISC и RISC? В чем их основные отличия? Что это такое и что здесь что? 0x08000330 6011 STR r1,[r2,#0x00] Что такое адресация? Какие способы адресации вы помните?

Слайд 3





Краткое содержание этой серии
Типизация в языках программирования
Команды загрузки и сохранения
Подробнее о длинных и коротких командах Thumb-2
Чудеса языка С
О стиле написания кода
Описание слайда:
Краткое содержание этой серии Типизация в языках программирования Команды загрузки и сохранения Подробнее о длинных и коротких командах Thumb-2 Чудеса языка С О стиле написания кода

Слайд 4





Типизация в языках программирования
О чем речь? 
Типизация – способ задания типа объекта.
А что такое тип?
Простым языком тип – это смысл, который несет объект.
Тип ограничивает область допустимых значений и допустимых действий над объектом.
Более формально см. «теория типов»
Описание слайда:
Типизация в языках программирования О чем речь? Типизация – способ задания типа объекта. А что такое тип? Простым языком тип – это смысл, который несет объект. Тип ограничивает область допустимых значений и допустимых действий над объектом. Более формально см. «теория типов»

Слайд 5





Виды типизации
Описание слайда:
Виды типизации

Слайд 6





По времени определения типа
Описание слайда:
По времени определения типа

Слайд 7





По силе (строгости)
Описание слайда:
По силе (строгости)

Слайд 8





По «явности»
Описание слайда:
По «явности»

Слайд 9





Бестиповой ассемблер – это как?
Никаких переменных нет, есть только память
Но на память можно «смотреть» по-разному (как на int или как на char)
В RISC «смотреть» в память можно только командами загрузки и сохранения
Описание слайда:
Бестиповой ассемблер – это как? Никаких переменных нет, есть только память Но на память можно «смотреть» по-разному (как на int или как на char) В RISC «смотреть» в память можно только командами загрузки и сохранения

Слайд 10





Memory Map в STM32
Процессор 32-битный, адресное пространство тоже 32-битное. 
Значит, адреса в памяти меняются от 0 до 232-1
И максимальный адресуемый диапазон памяти – 4 Гб.
Но в контроллере всего лишь 128 Кб Flash-памяти и 20 Кб ОЗУ.
Описание слайда:
Memory Map в STM32 Процессор 32-битный, адресное пространство тоже 32-битное. Значит, адреса в памяти меняются от 0 до 232-1 И максимальный адресуемый диапазон памяти – 4 Гб. Но в контроллере всего лишь 128 Кб Flash-памяти и 20 Кб ОЗУ.

Слайд 11





Memory Map в STM32 (упрощенная)
Описание слайда:
Memory Map в STM32 (упрощенная)

Слайд 12





Команды загрузки и сохранения
Команда загрузки – load – LDR – загружает значение из памяти в регистр
LDR r0,[pc,#28]
Команда сохранения – store – STR – сохраняет значение из регистра в память
STR r1,[r0,#0x0C]
Описание слайда:
Команды загрузки и сохранения Команда загрузки – load – LDR – загружает значение из памяти в регистр LDR r0,[pc,#28] Команда сохранения – store – STR – сохраняет значение из регистра в память STR r1,[r0,#0x0C]

Слайд 13





И команды работы со стеком
PUSH – поместить значение регистров в стек
PUSH  {r4-r6,lr}
POP – вынуть значения из стека и положить в регистры
POP   {r4,pc}
Стек находится в той же оперативной памяти.
Эти команды эквивалентны STM и LDM от Stack Pointer’a
Описание слайда:
И команды работы со стеком PUSH – поместить значение регистров в стек PUSH {r4-r6,lr} POP – вынуть значения из стека и положить в регистры POP {r4,pc} Стек находится в той же оперативной памяти. Эти команды эквивалентны STM и LDM от Stack Pointer’a

Слайд 14





Где «тип» же в командах?
«Как мы смотрим» на память задается с помощью постфиксов:
LDR – загрузить слово (word, 4 байта)
LDRH – загрузить полуслово (halfword, 2 байта)
LDRB – загрузить байт (byte)
LDRSB – загрузить знаковый байт (signed byte)
LDRSH – загрузить знаковое полуслово (signed halfword)
LDRD – загрузить двойное слово (double word, 8 байт)
LDRM – загрузить много байт (multiple)
Для STR аналогично.
Есть еще постфиксы, которые к типу не относятся.
У POP и PUSH «типовых» постфиксов нет.
Описание слайда:
Где «тип» же в командах? «Как мы смотрим» на память задается с помощью постфиксов: LDR – загрузить слово (word, 4 байта) LDRH – загрузить полуслово (halfword, 2 байта) LDRB – загрузить байт (byte) LDRSB – загрузить знаковый байт (signed byte) LDRSH – загрузить знаковое полуслово (signed halfword) LDRD – загрузить двойное слово (double word, 8 байт) LDRM – загрузить много байт (multiple) Для STR аналогично. Есть еще постфиксы, которые к типу не относятся. У POP и PUSH «типовых» постфиксов нет.

Слайд 15





Типы С и ассемблер
Между целочисленными типами и командами соотношение очевидное
А как же float и double?
float – 4 байта, специализированных регистров для него нет – поэтому просто LDR
double – 8 байт – просто LDRD
Описание слайда:
Типы С и ассемблер Между целочисленными типами и командами соотношение очевидное А как же float и double? float – 4 байта, специализированных регистров для него нет – поэтому просто LDR double – 8 байт – просто LDRD

Слайд 16





Длинные и короткие команды
Как процессор узнает, длинную команду нужно выполнить или короткую?
Раньше (в ARMv5) было просто два режима 
В ARMv7 хитрее – в коде команды написано, длинная она или нет
Описание слайда:
Длинные и короткие команды Как процессор узнает, длинную команду нужно выполнить или короткую? Раньше (в ARMv5) было просто два режима В ARMv7 хитрее – в коде команды написано, длинная она или нет

Слайд 17





Длинные и короткие команды
Процессор считывает 16 бит по адресу, указанному в РС. 
Если биты с 15 по 11 это:
11101 или
11110 или
11111 – то команда длинная. И нужно считать еще 16 бит.
Иначе: команда короткая
Поэтому коды длинных команд часто начинаются на F
Описание слайда:
Длинные и короткие команды Процессор считывает 16 бит по адресу, указанному в РС. Если биты с 15 по 11 это: 11101 или 11110 или 11111 – то команда длинная. И нужно считать еще 16 бит. Иначе: команда короткая Поэтому коды длинных команд часто начинаются на F

Слайд 18





Структура короткой команды на примере MOVS r0,#0x05
0x2005 = 0010 0000 0000 0101
Пять старших бит (opcode) показывают что это, собственно, команда mov
Биты 10, 9 и 8 задают номер регистра
Биты с 7 по 0 задают непосредственный операнд
Это кодирование Т2
Описание слайда:
Структура короткой команды на примере MOVS r0,#0x05 0x2005 = 0010 0000 0000 0101 Пять старших бит (opcode) показывают что это, собственно, команда mov Биты 10, 9 и 8 задают номер регистра Биты с 7 по 0 задают непосредственный операнд Это кодирование Т2

Слайд 19





Структура длинной команды (ADDW)
ADDW Rn, Rd, Imm -> Rd = Rn + Imm12
Зеленое – opcode (в частности показывает, что команда длинная)
Rn – регистр-слагаемое
Rd – регистр-приемник результата
Imm12 – число, собираемое из i:imm3:imm8 – 12 бит
Это кодирование T4
Описание слайда:
Структура длинной команды (ADDW) ADDW Rn, Rd, Imm -> Rd = Rn + Imm12 Зеленое – opcode (в частности показывает, что команда длинная) Rn – регистр-слагаемое Rd – регистр-приемник результата Imm12 – число, собираемое из i:imm3:imm8 – 12 бит Это кодирование T4

Слайд 20





Пример ADDW
F600401A  ADDW     r0,r0,#0xC1A
C1A = 1100 0001 1010
           
F600401A =
Описание слайда:
Пример ADDW F600401A ADDW r0,r0,#0xC1A C1A = 1100 0001 1010 F600401A =

Слайд 21





Структура длинной команды (ADD)
ADD Rn, Rd, Imm -> Rd = Rn + Imm32
Зеленое – opcode (в частности показывает, что команда длинная)
Rn – регистр-слагаемое
Rd – регистр-приемник результата
S – опциональный бит (обновлять ли флаги состояния)
Imm32 – число, задаваемое i:imm3:imm8 – хитрым образом!
Это кодирование T3
Описание слайда:
Структура длинной команды (ADD) ADD Rn, Rd, Imm -> Rd = Rn + Imm32 Зеленое – opcode (в частности показывает, что команда длинная) Rn – регистр-слагаемое Rd – регистр-приемник результата S – опциональный бит (обновлять ли флаги состояния) Imm32 – число, задаваемое i:imm3:imm8 – хитрым образом! Это кодирование T3

Слайд 22





Непосредственный операнд при кодировании Т3
Описание слайда:
Непосредственный операнд при кодировании Т3

Слайд 23





Непосредственный операнд при кодировании Т3
Описание слайда:
Непосредственный операнд при кодировании Т3

Слайд 24





Непосредственный операнд при кодировании Т3
Описание слайда:
Непосредственный операнд при кодировании Т3

Слайд 25





Пример команды ADD c кодированием Т3
F5001090  ADD      r0,r0,#0x120000
0x12           = 10010
0x12 0000 = 1001 (и 17 нулей) 
Т.е. позиция значащего бита – 17? Не факт. Закодировать это число можно по-разному
Описание слайда:
Пример команды ADD c кодированием Т3 F5001090 ADD r0,r0,#0x120000 0x12 = 10010 0x12 0000 = 1001 (и 17 нулей) Т.е. позиция значащего бита – 17? Не факт. Закодировать это число можно по-разному

Слайд 26





«Святые писания»
Cortex-M3 Devices Generic User Guide:
Программная модель ядра процессора
Описание синтаксиса и семантики инструкций процессора
Периферия уровня ядра
ARMv7-M Architecture Reference Manual:
Подробное описание ядра процессора
Кодирование инструкций
STM32F10x Reference Manual:
Подробное описание всех периферийных устройств семейства микроконтроллеров
STM32F103x8 Datasheet:
Электрические характеристики конкретной модели МК
Распиновка, габариты и т.д.
Описание слайда:
«Святые писания» Cortex-M3 Devices Generic User Guide: Программная модель ядра процессора Описание синтаксиса и семантики инструкций процессора Периферия уровня ядра ARMv7-M Architecture Reference Manual: Подробное описание ядра процессора Кодирование инструкций STM32F10x Reference Manual: Подробное описание всех периферийных устройств семейства микроконтроллеров STM32F103x8 Datasheet: Электрические характеристики конкретной модели МК Распиновка, габариты и т.д.

Слайд 27





«Святые писания»
Errata sheet:
Описание всех известных производителю ошибок в конкретном МК или серии МК
Спецификация микроконтроллеров Миландр серии 1986ВЕ9х:
Единственный документ о МК Миландр
Страницы 51-141 являются плохим переводом трех глав Cortex-M3 User Guide!
Описание слайда:
«Святые писания» Errata sheet: Описание всех известных производителю ошибок в конкретном МК или серии МК Спецификация микроконтроллеров Миландр серии 1986ВЕ9х: Единственный документ о МК Миландр Страницы 51-141 являются плохим переводом трех глав Cortex-M3 User Guide!

Слайд 28





Переходим к чудесам!
Описание слайда:
Переходим к чудесам!

Слайд 29





Краткий экскурс в историю
Язык С появился в ~1973 году.
Компьютеры были очень разные. 
С – «кроссплатформенный ассемблер».
Поэтому очень много вещей в С зависят от платформы, для которой программа написана.
Очень много вещей – это наследство от старых времен
Описание слайда:
Краткий экскурс в историю Язык С появился в ~1973 году. Компьютеры были очень разные. С – «кроссплатформенный ассемблер». Поэтому очень много вещей в С зависят от платформы, для которой программа написана. Очень много вещей – это наследство от старых времен

Слайд 30





Типы в языке С
Типизация: статическая слабая и неявная.
«Простые» типы: 
_Bool (bool) – начиная с С99 - #include <stdbool.h>
char, signed char, unsigned char
short
int
long
long long
float, double, long double
void
указатели
Композитные: массивы, структуры, объединения
Функции
Выражения
Описание слайда:
Типы в языке С Типизация: статическая слабая и неявная. «Простые» типы: _Bool (bool) – начиная с С99 - #include <stdbool.h> char, signed char, unsigned char short int long long long float, double, long double void указатели Композитные: массивы, структуры, объединения Функции Выражения

Слайд 31





Как искать чудеса?
Читать Стандарт языка (С89, С99, С03)
Искать на stackoverflow.com
Просто писать программы! Чудо рано или поздно найдет вас.
Описание слайда:
Как искать чудеса? Читать Стандарт языка (С89, С99, С03) Искать на stackoverflow.com Просто писать программы! Чудо рано или поздно найдет вас.

Слайд 32





Чудо первое: размеры типов
Оператор sizeof возвращает размеры в размерах типа char
Количество бит в одном char задается в макросе CHAR_BITS
Для всех остальных типов задаются минимальные диапазоны
Описание слайда:
Чудо первое: размеры типов Оператор sizeof возвращает размеры в размерах типа char Количество бит в одном char задается в макросе CHAR_BITS Для всех остальных типов задаются минимальные диапазоны

Слайд 33





Чудо первое: размеры типов
Описание слайда:
Чудо первое: размеры типов

Слайд 34





Чудо второе: поведение
Описание слайда:
Чудо второе: поведение

Слайд 35





Чудо второе: поведение
Компиляторы не всегда предупреждают
Компиляторы не всегда следуют стандарту
Как жить с этим чудом? 
Не выключать предупреждения (warning)
ЧИТАТЬ предупреждения! Ценить, что они вообще есть.
Помнить, что отсутствие предупреждений не означает, что все хорошо.
Описание слайда:
Чудо второе: поведение Компиляторы не всегда предупреждают Компиляторы не всегда следуют стандарту Как жить с этим чудом? Не выключать предупреждения (warning) ЧИТАТЬ предупреждения! Ценить, что они вообще есть. Помнить, что отсутствие предупреждений не означает, что все хорошо.

Слайд 36





Чудо третье, неожиданное
Если поведение определенное, это еще не значит, что оно очевидное.
Примеры:
Правила неявного преобразования типов
Приоритеты операторов
Арифметика с плавающей точкой (не только в С!)
Макросы
Указатели, указатели, указатели..
Компиляция с оптимизацией усиливают чудеса!
Описание слайда:
Чудо третье, неожиданное Если поведение определенное, это еще не значит, что оно очевидное. Примеры: Правила неявного преобразования типов Приоритеты операторов Арифметика с плавающей точкой (не только в С!) Макросы Указатели, указатели, указатели.. Компиляция с оптимизацией усиливают чудеса!

Слайд 37





Чудо третье, неожиданное
Как жить с чудесами?
Учиться, учиться и еще раз учиться.
Или искать другой язык.
Но в каждом языке есть свои чудеса!
Описание слайда:
Чудо третье, неожиданное Как жить с чудесами? Учиться, учиться и еще раз учиться. Или искать другой язык. Но в каждом языке есть свои чудеса!

Слайд 38





Немножко о стиле кода
Пишите комментарии о смысле происходящего
Если у вас больше трех переменных – называйте их осмысленно.
Ставьте отступы!
Описание слайда:
Немножко о стиле кода Пишите комментарии о смысле происходящего Если у вас больше трех переменных – называйте их осмысленно. Ставьте отступы!

Слайд 39





Что такое отступы
Отступ – символ табуляции или 2 пробела или 4 пробела после { и до соответствующей }
Keil -> Edit -> Configuration -> Auto Indent = Block
Код без отступов читать очень неприятно
Описание слайда:
Что такое отступы Отступ – символ табуляции или 2 пробела или 4 пробела после { и до соответствующей } Keil -> Edit -> Configuration -> Auto Indent = Block Код без отступов читать очень неприятно



Похожие презентации
Mypresentation.ru
Загрузить презентацию