середу, 11 жовтня 2017 р.

Література до принципів організації комп'ютера -- Інтернет

Взято тут.
Продовжуючи список літератури, тепер -- значно більш ефемерні джерела, посилання в Інтернеті. Зате їх більше. :-)

Цей список складається із двох частин -- літератури для безпосереднього вивчення теми та окремий історичний підрозділ. Прочитайте хоча б вступ до нього! :-)

Почнемо із вікіпедії. Звичайно, тут легко втонути, список може стати величезним, тому, в основному, посилання "першого рівня" -- вглиб треба рухатися самостійно.

Загальні посилання:
Елементна база:
  • 7400 series -- найбільш популярна серія мікросхем, включає реалізації всіх тих компонент, про які пише Токхейм та інші. 
  • List of 7400 series integrated circuits -- список членів цього сімейства мікросхем.
  • 4000 series -- ще одна така серія. Зараз, на загал, менш популярна, ніж 74хх, але трапляється. 
  • List of 4000 series integrated circuits.
  • NE555 -- таймер, генератор імпульсів і взагалі дуже корисна штука.
  • Не на вікі, ще один список мікросхем серії 74xx, привабливий тим, що містить схеми розташування виводів більшості мікросхем серії -- сильно спрощує практичну роботу із ними. 

Мікропроцесорний "напрямок":

вівторок, 10 жовтня 2017 р.

Література до принципів організації комп'ютера -- книги

Взято тут.
Один із курсів, що викладаю в УКУ -- "Принципи організації комп'ютера". Він складається із двох частин. Перша присвячена елементарним блокам комп'ютера, від способів представлення даних -- чисел та тексту, до простих логічних елементів, мультиплексорів, тригерів та защібок, з яких будуються блоки пам'яті, арифметичні та арифметично-логічні (ALU) модулі тощо. Друга -- програмуванню простих обчислювальних систем без допомоги операційної системи -- так-би мовити, bare metal. 
На жаль, через обмеження часу, в цьому курсі доводиться користуватися такою собі логарифмічною шкалою -- стрибати між рівнями абстракцій, не заповнюючи проміжки щільно. Після арифметичних модулів, мінімалістичних блоків пам'яті та оглядом функціонування ALU зразу слідує bare-metal програмуванням сучасних систем.

В ролі bare metal системи обрано демоплату на базі мікроконтролера STM32 -- з одного боку, це цілком серйозний 32-бітний процесор, із 4Гб адресним простором, перериваннями із підтримкою пріоритету, DMA, MPU (але, на жаль, без MMU) і все таке (на противагу крихітним і простеньким AVR8), мікропроцесори. З іншого боку, у них немає великої і плутаної стандартної периферії машин на базі x86 та складнощів із кешем, суперскалярністю, перевпорядкуванням команд і т.д. "великих процесорів". (Про них говоримо в наступному курсі, але це -- окрема історія. :-). Взагалі, про STM32 в цьому блозі написано багато.

четвер, 5 жовтня 2017 р.

Зовсім просто про semihosting

Структура SemiHosting. Взято тут.
Що таке Semihosting, як його підключити і використовувати із "старим та добрим" printf(), детально описано тут: "Стандартна бібліотека C та SemiHosting (на прикладі STM32 і CoIDE)", хоча, як видно з назви, для іншого середовища розробки. Більше технічної інформації є тут: "SemiHosting без дебаггера".

А зараз опишу як ним можна скористатися із мінімальними зусиллями, так би мовити, для лінивих. :-)

Ідея наступна: існує апаратний інтерфейс для передачі даних із мікроконтролера дебаггеру. Є бажання зробити так, щоб по ньому можна було передавати текст, за допомогою звичних функцій вводу-виводу С: printf(), puts(), тощо. Як описується у згаданому вище пості, для цього слід мати реалізацію стандартної бібліотеки та надати для неї відповідні системні виклики, котрі вмітимуть передавати дані семіхостингом.
Часто із компілятором для мікроконтролера йдуть newlib чи newlib-nano, мінімалістичні реалізації стандартної бібліотеки С. Зокрема, є вона і в збірках компіляторів для MCU ARM Cortex M, тому про неї окремо можна не турбуватися. Хоча знати слід -- коли стандартні налаштування перестануть влаштовувати або просто не працюватимуть як належить.
І тут є два варіанти:
  • Із більшим контролем але і більшою морокою -- надати системні виклики самостійно, як описано за посиланням вище.
  • Скористатися готовою реалізацією, що йде разом із компілятором для наших мікроконтролерів -- ARM Cortex M.
Важливе зауваження: за використання семіхостингу, ваш код перестане працювати без під'єднаного дебаггера! Як вирішити цю проблему, див.  "SemiHosting без дебаггера".

Отож, потрібно виконати наступні кроки:
  1. Дозволити SemiHosting в дебаггері.
  2. За потреби -- додати підтримку вводу/виводу  floating-point чисел.
  3. Надати свою реалізацію системних викликів.
  4. Або використати готову їх реалізацію із підтримкою SemiHosting із GCC.
Розглянемо ці кроки детальніше. 

середу, 4 жовтня 2017 р.

Марсіанські справи -- 1

Увага, це старий текст, написаний на початку 2015-го! З того часу не мав можливості до нього повертатися, але викидати шкода, тому трішки відредагував і викладаю. 

Не маючи можливості охопити неосяжне, пишу (upd кінця 2016: на жаль, ймовірно -- писав) лише про нові місії, зокрема із марсіанських -- MSL Curiosity, MAVEN та MOM. Однак, над тим же Марсом працює багато інших (на загал -- потужніших, якщо говорити про орбітальні) станцій та, що важливіше, наукових колективів. Раніше всілякі цікавинки про них я поміщав під заголовком "Додаток до огляду Curiosity", але на додаток воно мало схоже :-) То завів окрему серію, "Марсіанські справи".

Користуючись наземними телескопами, група дослідників розрахувала ймовірну кількість води на Марсі в епоху Ноя, яка закінчилася 3.7 млрд років тому, коли Марс ще був вологим.  За їх оцінками, об'єм води складав мінімум 20 мільйонів кубічних кілометрів --- достатній, щоб  вкрити всю його поверхню шаром товщиною 140 м. Ймовірно, вона, в основному, містилася в океані, що займав помітну частину теперішньої північної півкулі (орієнтація Марсу в просторі помітно змінюється з часом!), де зараз низини. Його площа могла складати 19% поверхні планети, а глибина досягати 1.6 км.
Так міг виглядати Марс 4 млрд років тому.
(c) ESO/M. Kornmesser/N. Risinger