tag:blogger.com,1999:blog-50486915054816294982024-03-27T08:36:49.048+02:00Записки дилетантаТак вийшло що я цікавлюся безліччю речей, але так ні в чому не став професіоналом. Однак впорядкувати думки та поділитися ними з друзями та знайомими іноді хочеться.Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.comBlogger224125tag:blogger.com,1999:blog-5048691505481629498.post-25898049615355958922023-08-15T11:03:00.001+03:002023-08-15T11:03:30.089+03:00Rosetta -- весна 2015 <div style="text-align: justify;">[Це старий пост, який я знайшов у чернетках та публікую після мінімального редагування. Фото, все ж, гарні!]<br></div>
<div style="text-align: justify;"> <br></div>
<div style="text-align: justify;">
Над-близький проліт 14 лютого 2015 року <a href="http://blogs.esa.int/rosetta/2015/02/27/cometwatch-the-challenges-of-a-close-flyby/">виявив проблему</a> -- мало того, що станція мусила летіти так, що сонячні батареї, як великі вітрила, ловили кометні викиди, (в нормі проліт організовують так, щоб площина батарей була паралельною до потоку), порушуючи стабільність, так ще й система навігації почала погано себе поводити -- ще дві години до найближчої віддалі, кількість "пилинок" стала такою, що система орієнтації по зорях не могла зафіксувати достатньої їх кількості. Автоматика переключилася на запасну (вона ж не знала причини проблем :-), але і запасну чекала та ж доля. Заледве не дійшло до "безпечного режиму", при якому виміри б припинилися -- позбавляючи нас неоціненних даних. Зокрема -- фото:</div>
<div style="text-align: justify;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL9XXuaivelHZpGCAvM1jDoHq2fVUn3Tch-RCrBolXy2tziWAcJEAkrikYAyK-_Z2_vyavpFCCPnp0ADJlId1B8CfRI6ioh0LmXqkZbOIYVFOU0_R54n9QBjy4DFH4VQkkHmOSq4aQmFM/s1600/14_February_close_flyby.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL9XXuaivelHZpGCAvM1jDoHq2fVUn3Tch-RCrBolXy2tziWAcJEAkrikYAyK-_Z2_vyavpFCCPnp0ADJlId1B8CfRI6ioh0LmXqkZbOIYVFOU0_R54n9QBjy4DFH4VQkkHmOSq4aQmFM/s1600/14_February_close_flyby.jpg" width="640"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Шість кілометрів до поверхні комети Чурюмова-Герасименко. Роздільна здатність -- 11 см на піксель! Видима область -- 228 x 228 м. Темна пляма внизу-по центру -- тінь від "Розетти" (завдяки пів-тіням, пляма має розмір 20 х 50 метрів, значно більший, ніж сама станція, але повної тіні -- точки, де станція закрила б собою все Сонце, немає, хоч його видимий диск там і в 2.3 рази менший, ніж на Землі).<br>
14 лютого 2015 (оце любов ;-), 12:39 UT. Клікабельно! .<br>
(c) <a href="http://blogs.esa.int/rosetta/2015/03/03/comet-flyby-osiris-catches-glimpse-of-rosettas-shadow/"><i>ESA/Rosetta/MPS for OSIRIS Team MPS/UPD/LAM/IAA/SSO/INTA/UPM/DASP/IDA</i></a></td></tr>
</tbody></table> </div><div style="text-align: justify;"><span></span></div><a href="http://indrekis2.blogspot.com/2017/10/rosetta-2015.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-56275435384865332062023-08-05T14:03:00.002+03:002023-08-05T14:03:45.687+03:00Оновлення для ретрокомп'ютерів<p>Виклав три статті про плати оновлення:</p><ul style="text-align: justify;"><li>"<a href="https://indrekis.github.io/retrocomputing/ibm_pc_compat/2023/07/31/update_boards_1.html" target="_blank">Дивні плати оновлення із 1980-х</a>" -- був шокованим, взнавши, які апдейти можна було робити в 80-х, захотів розповісти про них. <br /></li><li>"<a href="https://indrekis.github.io/retrocomputing/ibm_pc_compat/2023/08/02/update_boards_AST_1.html" target="_blank">AST Rampage</a>" -- мейнстрімні, як на той час, плати, але -- мій улюблений костиль для IBM PC.<br /></li><li>"<a href="https://indrekis.github.io/retrocomputing/ibm_pc_compat/2023/08/03/modern_update_boards_1.html" target="_blank">Сучасні плати для IBM PC/XT</a>" -- історія продовжується.<br /></li></ul><p style="text-align: justify;">Більше року воно лежало як одна велика, недописана, стаття -- нарешті зібрався довести до ладу.<br /></p>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-38552278946977091382023-07-31T00:52:00.001+03:002023-07-31T00:52:13.274+03:00COBOL на Osborne та список літератури<div style="text-align: justify;"></div><p style="text-align: justify;">Виклав пост про <a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/30/cobol_1.html" target="_blank">COBOL на Osborne Executive під CP/M</a>. Наявність цієї мови мене таки здивувала. </p><p style="text-align: justify;">Також, доповнив зміст розділу про ретрокомп'ютинг <a href="https://indrekis.github.io/retrocomputing/2023/07/10/index.html#%D1%80%D0%B5%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%BF%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%96-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8" target="_blank">списком книг</a>, про які планую написати нотатки. У цьому блозі вже є декілька таких, а заплановано багато більше, хай і не особливо детальних. <br /></p>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-17214049769343865502023-07-25T20:59:00.000+03:002023-07-25T20:59:46.086+03:00Підказки користувачам CP/M та огляд асемблерів для цієї ОС<div style="text-align: justify;"></div><p style="text-align: left;">Чергова партія постів про CP/M, Osborne Executive тощо. <br /></p><ul style="text-align: left;"><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/16/cpm_manual1.html" rel="bookmark">Коротка інструкція до CP/M</a>" -- сформувалася з нотаток, які робив для себе, поки експериментував із компіляторами.<br /></li><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/17/te_1.html" rel="bookmark">Текстовий редактор te</a>" -- сучасний редактор для CP/M, який я адаптував для Osborne.<br /></li><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/18/asm_1.html" rel="bookmark">Інструменти програмування на асемблері для CP/M та Osborne Executive</a>" -- власне, воно. :=) Вісім різних асемблерів від шести виробників. <br /></li><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/19/debug_1.html" rel="bookmark">Дебагери для CP/M та Osborne Executive</a>" -- дуже коротко про SID та DDT, теж із власних нотаток.<time class="entry-date dt-published" datetime="2023-07-17T22:23:45+00:00">"</time></li><li><time class="entry-date dt-published" datetime="2023-07-17T22:23:45+00:00"> </time><a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/17/links.html" rel="bookmark">Посилання стосовно CP/M</a>" -- помийка посилань, щоб не загубити -- кілька раз доводилося довго щось таке шукати. <br /></li></ul>Також, зроблено дрібні виправлення інших постів (див. <a href="https://github.com/indrekis/indrekis.github.io" target="_blank">репозиторій</a>). <br />Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-48122750515574679612023-07-16T07:20:00.001+03:002023-07-16T07:20:21.103+03:00Емулятори CP/M<div style="text-align: justify;"></div><p style="text-align: justify;">Опублікував ще два з половиною історичних постів, про емулятори CP/M-сумісних систем:</p><ul style="text-align: justify;"><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/14/cpm_emu_runcpm.html" target="_blank">RunCPM – емулятор узагальненої CP/M-системи</a>",</li><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/15/cpm_emu_mame.html" target="_blank">MAME – емулятор взагалі всього, включаючи Осборни</a>" -- про те, як емулювати Osborne Executive та інші комп'ютери сімейства.</li><li>"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/16/cpm_emu_other.html" target="_blank">Інші емулятори CP/M систем</a>" -- коротко про емулятор CP/M MyZ80 та Altair32 -- емулятор Altair 8800 та IMSAI 8080.</li></ul><p style="text-align: left;"> </p>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-89250225999719180572023-07-14T03:00:00.000+03:002023-07-14T03:00:43.885+03:00Новий хостинг для блогу<div style="text-align: justify;">Веду цей блог з 2011-го, але blogger здається все менш зручним, тому, враховуючи
недостачу сил, до написання та публікації доходить все рідше – зараз вже
є кілька десятків напівготових статей. Крім того, хотілося б більше контролю над своїми текстами. Але й возитися з налаштуванням
власної CMS бракувало і сил та часу і натхнення. Вирішив створити
репозиторій на GitHub і писати там – це теж має купу недоліків, в тому
числі для читачів, але якраз тоді колега показав, що Jekyll, який
дружить з GitHub pages, зовсім просто налаштовується. Так і з’явився цей
хостинг для блогу: <a href="https://indrekis.github.io/">https://indrekis.github.io/</a>. Оскільки він базується на Github -- коментарі, зауваження, виправлення можна присилати тут: <a href="https://github.com/indrekis/indrekis.github.io">https://github.com/indrekis/indrekis.github.io</a>.</div>
<p style="text-align: left;">Не маючи жодного досвіду з Jekyll чи Ruby, певне, багато що роблю не
правильно. Виправлятиму з часом, тому сайт поки експериментальний. Тому ж розпочав з ретрокомп'ютингу -- коли процес налагодиться, додаватиму нотатки до курсів, які читаю в <a href="https://indrekis.github.io/other/2023/07/03/apps.ucu.edu.ua/">УКУ</a> та переноситиму старіші тексти. </p>
<p style="text-align: left;">Принаймні якийсь час буду анонсувати нові пости тут. </p><p style="text-align: left;">Зараз на новому хостингу опубліковано: </p><ul style="text-align: left;"><li style="text-align: left;">"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/2023/07/13/osbornes.html" target="_blank">Портативні комп’ютери Osborne</a>"-- короткий огляд апаратури<br /></li><li style="text-align: left;">"<a href="https://indrekis.github.io/retrocomputing/cpm/cp/m/disk%20images/2023/07/13/disk_images.html" target="_blank">Робота із образами дисків CP/M</a>" -- На відміну від світу IBM PC, з дисками для комп'ютерів CP/M -- великий хаос, ну, чи -- різноманіття. Як з ним можна справлятися -- де шукати образи, як їх модифікувати та як записувати фізичні диски відповідних форматів на IBM PC-сумісних машинах. <br /></li></ul><p>Лінки, на жаль, поки можуть змінюватися, через часті редизайни блогу. Пізніше потурбуюся про перманентні. </p><p><br /></p>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-62393764973641549762022-09-25T02:29:00.000+03:002022-09-25T02:29:48.598+03:00Аналіз SYS.COM з PC-DOS 3.10<div class="separator" style="clear: both; text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzpO-FQDN3KLskf7mUPIZj2E6KFCGDNUfgUlpLJFZKEu4rMO_8WZo6rhgV_iRr9l5vV6RTOlLHykhcNOn__RfucGdDsWA2ywS96MlrDkF7OJnDi-dGxR1TJIJ7wG4M7ARaPy0mdGNI3-c/s1600/ava_sys_com_pc_dos_310.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzpO-FQDN3KLskf7mUPIZj2E6KFCGDNUfgUlpLJFZKEu4rMO_8WZo6rhgV_iRr9l5vV6RTOlLHykhcNOn__RfucGdDsWA2ywS96MlrDkF7OJnDi-dGxR1TJIJ7wG4M7ARaPy0mdGNI3-c/s1600/ava_sys_com_pc_dos_310.png"></a></div>
<div style="text-align: justify;">Наступна версія DOS, 3.10, вийшла 2 квітня 1985. Однак, згідно інформації <a href="http://www.os2museum.com/wp/?page_id=639">музею OS/2</a>, анонсована вона була разом із 3.00, і, фактично, являла собою обіцянку доробити те, що до випуску 3.0, який мав співпасти із виходом <a href="http://en.wikipedia.org/wiki/IBM_PC/AT">IBM PC/AT</a>, не встигли. Зокрема, нарешті довели до ладу мережевий редіркетор. По великому рахунку, DOS API з часів 3.1 змінювалося мало. Із важливих для SYS.COM аспектів --- з'явилася підтримка 720Кб 3.5'' дисків. </div><div style="text-align: justify;"> </div><div style="margin-left: 40px; text-align: justify;">Ех, я починав теж із 720Кб, правда нестандартних -- 5-дюймових, дисковід <a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80)">Пошука-1</a> принципово не вмів 1.2Мб читати-писати, а на 800 Кб заїкався, хоча по сектору за раз, руками з DEBUG.COM --- читав. Штатним форматом був 360Кб, але в 1995 то було зовсім мало, а 720Кб, при всій нестандартності для 5-дюймовок, особливих проблем не створював. На крайній випадок, <a href="http://old-dos.ru/index.php?page=files&mode=files&do=show&id=243">800.COM</a> вже був популярним.</div><div style="text-align: justify;"> </div><div style="margin-left: 40px; text-align: justify;"><b>Ремарка</b>: цей текст був написаний майже 10 років тому, довести до кінця тоді не вистачило натхнення, а зараз вже шкода часу. Тому публікую як є, із мінімальними правками, менш завершеним, ніж інші пости цієї серії.<br></div>
<div style="text-align: justify;">
<br></div><div style="text-align: justify;"><span></span></div><a href="http://indrekis2.blogspot.com/2017/10/syscom-pc-dos-310.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com1tag:blogger.com,1999:blog-5048691505481629498.post-70723045064069079202022-09-24T23:02:00.002+03:002022-09-25T02:31:08.226+03:00Порівняння дизасемльованого SYS.COM з PC-DOS 2.10 та опублікованих Microsoft текстів для цієї утиліти<div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi93qAp-2-nqlN7C17mU7iPtCk_11Ot0OaiGvtYRTzYYagDr8R6VdknqNlRsfdO0Y0EiumdZEbsBCPejYA6NE8n9k4o5xsfdROWSQQNgj0SiLZFQklu4cwM5jDAbbCZbDfLEnAPoyfej_02O-BNg2IilpySHZUfut4popf16Gg6ZzND60NMHtVD4Ht4/s150/ava_sys_com_pc_dos_211_official.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="129" data-original-width="150" height="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi93qAp-2-nqlN7C17mU7iPtCk_11Ot0OaiGvtYRTzYYagDr8R6VdknqNlRsfdO0Y0EiumdZEbsBCPejYA6NE8n9k4o5xsfdROWSQQNgj0SiLZFQklu4cwM5jDAbbCZbDfLEnAPoyfej_02O-BNg2IilpySHZUfut4popf16Gg6ZzND60NMHtVD4Ht4/s1600/ava_sys_com_pc_dos_211_official.png" width="150"><br></a></div><div style="text-align: justify;">Колись, для відпочинку та розваги, дизасемблював <a href="https://en.wikipedia.org/wiki/SYS_(command)">SYS.COM</a> різних версій DOS (посилання в кінці). Суттєво пізніше Microsoft опублікувала джерельні тексти MS-DOS, офіційно, версій <a href="https://github.com/microsoft/MS-DOS" target="_blank">MS-DOS 1.25 (еквівалентна PC-DOS 1.10) і 2.00</a>. Від того часу мені захотілося порівняти справжній код із своїм дизасемблом. Цього літа з'явилася нагода. </div><p></p><p style="text-align: justify;"><span></span></p><a href="http://indrekis2.blogspot.com/2022/09/syscom-pc-dos-210-microsoft.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-68314819898933159752022-08-12T00:12:00.002+03:002022-08-12T00:12:38.142+03:00Анонс -- 64-бітний плагін Total Commander для роботи із образами FAT<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOXaA7H8BmD-sRX8h8ZEtNxDVbaeDT5O9QQrpNM-bsq080LB5bCpyz8uwJG6_d9lQVHEbgSEkECmf0mGL0c4x9pCEQ3n4Pu0bEhLxFNliCs4AyFWm619udiNdwz58_R2hsjUunsCtkE_0RN2huh_gxhoGvDb-YKpS4Wc0uvWFkUqw653vIzHP93esn/s401/title.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="280" data-original-width="401" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOXaA7H8BmD-sRX8h8ZEtNxDVbaeDT5O9QQrpNM-bsq080LB5bCpyz8uwJG6_d9lQVHEbgSEkECmf0mGL0c4x9pCEQ3n4Pu0bEhLxFNliCs4AyFWm619udiNdwz58_R2hsjUunsCtkE_0RN2huh_gxhoGvDb-YKpS4Wc0uvWFkUqw653vIzHP93esn/w200-h139/title.png" width="200"></a></div><div style="text-align: justify;">Займаючись "<a href="https://uk.wikipedia.org/wiki/%D0%A0%D0%B5%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%BF%27%D1%8E%D1%82%D0%B8%D0%BD%D0%B3" target="_blank">ретрокомп'ютингом</a>", постійно доводиться мати справу з <a href="https://en.wikipedia.org/wiki/Disk_image" target="_blank">образами дисків</a> різних епох. Для мене найзручнішим способом є відповідні плагіни для <a href="https://www.ghisler.com/" target="_blank">Total Commander</a> (TCmd). Однак, їх так і не було перенесено на 64-бітний TCmd. </div><p style="text-align: justify;"></p><p style="text-align: justify;">Коли, посередині літа, втома стала закритичною, для відпочинку вирішив створити такий плагін -- з одного боку, задача проста, з іншого -- мозок таки зайнятий, і не відволікається на дурні думки. Здається, це перше програмне забезпечення, написане мною, призначене для (відносно) широкого кола користувачів. </p><p style="text-align: justify;">Код знаходиться на <a href="https://github.com/indrekis/FATImage_TCMD_plugin" target="_blank">Github: FATImage_TCMD_plugin</a>. Бінарники -- <a href="https://github.com/indrekis/FATImage_TCMD_plugin/releases" target="_blank">в релізах репозиторію</a>.</p><p style="text-align: justify;">Багато подробиць є в <a href="https://github.com/indrekis/FATImage_TCMD_plugin/blob/master/ReadMe.md">ReadMe.md</a> репозиторію. Дуже коротко:</p><ul style="text-align: justify;"><li>Поки read-only. <br></li><ul><li>Працюю над версією, що вмітиме писати в образи та створювати їх.</li></ul><li>Підтримує FAT12, FAT16, FAT32.</li><li>Підтримує VFAT -- довгі імена файлів, не залежно від розрядності FAT.</li><li>Вміє працювати із образами, розбитими на диски, якщо вони користуються <a href="https://en.wikipedia.org/wiki/Master_boot_record">MBR</a>.</li><li>exFAT i <a href="https://en.wikipedia.org/wiki/GUID_Partition_Table">GPT</a> поки не підтримуються.<br></li></ul><p style="text-align: justify;">Буду вдячний за відгуки, <a href="https://github.com/indrekis/FATImage_TCMD_plugin/issues" target="_blank">знайдені баги</a>, <a href="https://github.com/indrekis/FATImage_TCMD_plugin/pulls" target="_blank">pull-request</a>-и. </p><p> </p><h2 style="text-align: left;">Подробиці, не висвітлені на GitHub<br></h2><p style="text-align: justify;"><span></span></p><a href="http://indrekis2.blogspot.com/2022/08/64-total-commander-fat.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-8092611599471782592020-08-15T18:10:00.001+03:002020-08-15T18:10:18.257+03:00Онлайн інструменти для С++<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhISQDRSW6nLScOdomZ0mZXaSZ3VMGzdcdrinql6mZhorLm82PnJDxDVWW54EhxC0UfqzL-s5l41zebYjsDM_ACi-c1UHWjEjQjmpj-WEYZAmsmJgMYQSCTuT9kli70SYUxGOQUADNnnOo/s1600/ce_logo.png" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="222" data-original-width="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhISQDRSW6nLScOdomZ0mZXaSZ3VMGzdcdrinql6mZhorLm82PnJDxDVWW54EhxC0UfqzL-s5l41zebYjsDM_ACi-c1UHWjEjQjmpj-WEYZAmsmJgMYQSCTuT9kli70SYUxGOQUADNnnOo/s1600/ce_logo.png"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Compiler explorer logo</td></tr>
</tbody></table>
<div style="text-align: justify;">
<a href="http://indrekis2.blogspot.com/2020/08/blog-post.html" target="_blank">Попередній пост</a> задумувався як приклад використання онлайн-засобів для роботи із С++, однак, осмислено показати більшість із них не вдавалося. Тому пишу ще один.</div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Ремарка: пам'ятайте, що більшість із цих проектів -- приватні, на особистих (чи арендованих своїм коштом) серверах авторів, хай і з залученням пожертв. Будьте акуратні -- не зловживайте, не заваліть DDoS-ом. </div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
Щоб нормально роздивитися зображення -- клікніть по них. На жаль, не вдається мені за розумний час дійти толку із ресайзером Blogpost, вони виходили або заширокі, або нечитабельні. </div>
</blockquote>
<h3 style="text-align: justify;">
Compiler explorer -- <a href="https://godbolt.org/">https://godbolt.org</a></h3>
<div style="text-align: justify;">
Напевне, перший і найпопулярніший із них. </div>
<div style="text-align: justify;">
</div>
<a href="http://indrekis2.blogspot.com/2020/08/blog-post_15.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com1tag:blogger.com,1999:blog-5048691505481629498.post-87450993037694424642020-08-12T17:21:00.000+03:002020-08-12T21:03:08.553+03:00Навіщо розуміти комп'ютер, якщо сучасні мови та їх бібліотеки такі потужні? <div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLMqFZGl7KCmC8CX_4grWzdQEXp_N7SVS1DBtEvY_n2Ka5DmgginlZX68gmCy-UJn1RjJa0uf7jTsX6KTo-ZmZFndoBikO_9q6pecTh4D5bRsfkogzBVm7uxe2oRdvjn73eKeU3fJOhzc/s1600/title.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="495" data-original-width="857" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLMqFZGl7KCmC8CX_4grWzdQEXp_N7SVS1DBtEvY_n2Ka5DmgginlZX68gmCy-UJn1RjJa0uf7jTsX6KTo-ZmZFndoBikO_9q6pecTh4D5bRsfkogzBVm7uxe2oRdvjn73eKeU3fJOhzc/w320-h185/title.jpg" width="320"></a></div>
<div style="text-align: justify;">
Працюю із дуже розумними та працьовитими студентами. Тому основне обмеження -- рівень їх мотивації. Важливо показати їм -- навіщо все це. Звісно, власний похід по граблях дає глибший і стабільніший результат, але це довга дорога, хотілося б її спростити. Тому -- очевидні для них приклади плюс практика. </div>
<div style="text-align: justify;">
<br></div>
<h3 style="text-align: justify;">
Байка - 1</h3>
<br>
<div style="text-align: justify;">
Типовий "мотиваційний" приклад -- історії про вирішення задачі підрахунку слів у текстових файлах. Фабула наступна, пропонуєш цю задачу новій аудиторії, наступного разу: </div>
<div style="text-align: justify;">
<br>
</div><a href="http://indrekis2.blogspot.com/2020/08/blog-post.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com1tag:blogger.com,1999:blog-5048691505481629498.post-72112628285318153982019-04-30T03:48:00.001+03:002019-06-11T20:57:53.303+03:000xB800<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWefpvYlT9zt8L_xFpXS177-MCxe0X4GcXvvDaSdP81_hjfgjGRkluF18FZ5KR0Kx5xjPTM6fMs3Wxw5_my426QvR7-VcNAoiSw-JokEmt47BOEimtg5Gt69v3t_E0TOuhWVX58m0-OyM/s1600/bd.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="451" data-original-width="643" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWefpvYlT9zt8L_xFpXS177-MCxe0X4GcXvvDaSdP81_hjfgjGRkluF18FZ5KR0Kx5xjPTM6fMs3Wxw5_my426QvR7-VcNAoiSw-JokEmt47BOEimtg5Gt69v3t_E0TOuhWVX58m0-OyM/s200/bd.jpg" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">BD.COM із запущеним вірусом die385. </td></tr>
</tbody></table>
<div style="text-align: justify;">
</div>
<div class="MsoNormal" style="text-align: justify;">
Випадково <a href="https://www.facebook.com/permalink.php?story_fbid=634132383720415&id=100013709766999">зіткнувся із авторами симпатичного дебаггера</a> епохи 90-х, <a href="https://sites.google.com/site/indrekis1/BD_OTHER.ZIP?attredirects=0&d=1">BD.COM</a>. Є навіть надія, що його джерельні тексти на github потраплять. Та й згадав в процесі тих розмов про магічне число, B800/B8000. Виявляється, про нього зараз пам'ятає менше людей, ніж я очікував. :-)<br>
<br></div>
<div class="MsoNormal" style="text-align: justify;">
Колись давно (1976) вирішила Intel на колінці зробити мікропроцесор,
<span style="mso-spacerun: yes;"> </span>щоб «закрити» ринок, поки розроблять
щось більш достойне. Вийшов він в 1978 і називався <a href="https://en.wikipedia.org/wiki/Intel_8086">8086</a>. Процесор був 16-бітний, однак міг адресувати цілий мегабайт
пам’яті (на що, як ми знаємо, потрібно 20 біт), за допомогою хитрого трюка –
адресу ділили на дві частини, по 16 біт. Для отримання «справжньої», фізичної
адреси, яку процесор може використати для звертатиметься до пам’яті, першу частину зсували на 4
біти вліво (це те саме, що множити на 16) та додавали другу.<br>
<br></div>
<div class="MsoNormal" style="text-align: justify;">
Першу частину, наслідуючи «дорослі» машини, які підтримували <a href="https://en.wikipedia.org/wiki/Memory_segmentation">сегментацію</a> – можливість ділити пам’ять на ізольовані блоки, сегменти, назвали
сегментом. Ніякого розділення, звичайно, не було – воно «приросло» в <a href="https://en.wikipedia.org/wiki/Intel_80286">80286</a>
(1982), але слово гарне, все таке. Другу – зміщення (відносно початку сегменту). Тобто, адреса складалася із пари <b>segment:offset</b>. Для адреси
сегменту було виділено спеціальні сегментні регістри, не змінюючи яких, можна
було звертатися до 64Кб, маніпулюючи 16-бітним зміщенням.<br>
<br>
</div><a href="http://indrekis2.blogspot.com/2019/04/0xb800.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com1tag:blogger.com,1999:blog-5048691505481629498.post-87945394278767550542018-07-26T05:20:00.000+03:002018-07-26T05:20:01.285+03:00"Undocumented DOS", 1st edition<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh574HIyUPEZipXDh4HNQdd-g-6XO_2eWbte7RcAD9yG0ZBRA3rtVSGSBI7SOMozajjGj28YIdIKwHDtpnI9ERzd-bCdKi-WalMlI_5wGF1v5Siee8rx2nGmKZKbRRLo4J21GKrkJxvvJc/s1600/front1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1600" data-original-width="1226" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh574HIyUPEZipXDh4HNQdd-g-6XO_2eWbte7RcAD9yG0ZBRA3rtVSGSBI7SOMozajjGj28YIdIKwHDtpnI9ERzd-bCdKi-WalMlI_5wGF1v5Siee8rx2nGmKZKbRRLo4J21GKrkJxvvJc/s200/front1.jpg" width="153"></a></div>
Ще одна "ретрорецензія". Про "романтичні" комп'ютерні 90-ті я вже <a href="http://indrekis2.blogspot.com/search/label/%D0%86%D1%81%D1%82%D0%BE%D1%80%D1%96%D1%8F">не раз писав</a>. Поміж популярних тогочасних хобі було написання вірусів. DOS -- ідеальне середовище для них, ніякого захисту, вся система як на долоні -- розважайся, скільки зможеш. Але сяка-така протидія, все ж, була -- ранні антивіруси, пошук підозрілих процесів і дивних блоків пам'яті тощо. За відсутності розмежування доступу, змагання вірус-антивірус було цікавою грою. А вміння працювати із внутрішніми, недокументованими, структурами DOS було корисним для ефективної участі в ній. Приклад: багато антивірусів не відслідковували роботу із файлами через і <a href="http://indrekis2.blogspot.com/2013/02/dos-fcb.html">FCB</a>. Та й цікаво -- раптом недокументоване включає якісь містичні можливості. Ходить справедливий жарт: "Чогось недокументованими можливостями найбільше цікавляться ті, що документовані поки толком не освоїли". З іншого боку -- нам було від сили півтора десятиліття. :-) </div>
<div style="text-align: justify;">
<blockquote class="tr_bq">
Важлива ремарка -- DOS і суміжні сфери в той час на Заході вже стрімко втрачали актуальність. Навіть OS/2 своє доживала, як виявилося пізніше. Але ми працювали із старою технікою (наприклад, <a href="https://uk.wikipedia.org/wiki/%D0%9F%D0%BE%D1%88%D1%83%D0%BA_(%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BF%27%D1%8E%D1%82%D0%B5%D1%80)">Пошук-1/Пошук-2</a> -- слабенький клон <a href="https://en.wikipedia.org/wiki/IBM_Personal_Computer_XT">PC XT</a> середини 80-х) та із старою літературою. Зараз дивлюся на книжки -- добуті чудом, по яких тоді вчився, і жахаюся їх рівневі. І дуже різко реагую на заяви студентів "<i>Ми не змогли розібратися - літератури немає</i>", за наявності доступу до яких хочеш книг, пошукових систем взагалі і StackOverflow зокрема та ще й можливості запитатися у місцях, де буває тисячі людей, які вміють та хочуть пояснити новачкам.</blockquote>
</div>
<div style="text-align: justify;">
<br>
</div><a href="http://indrekis2.blogspot.com/2018/07/undocumented-dos-1st-edition.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com4tag:blogger.com,1999:blog-5048691505481629498.post-36218503072399766442018-03-23T15:59:00.003+02:002020-09-19T01:28:31.389+03:00Книги по C++ -- список літератури<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvDfXJk4iipldZOdyBNAQYa66ftkQ8cuKcBdFp5oAGljsa8ADJNde_q45RZSwRIUAdX_r3YTRHMCVaPo0cr7GP1caaxj3eheFY2dWn16xb3qH94edUXkSYRMOgzvrZIeg9WySUeinfbCA/s1600/inverted_full.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1132" data-original-width="1600" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvDfXJk4iipldZOdyBNAQYa66ftkQ8cuKcBdFp5oAGljsa8ADJNde_q45RZSwRIUAdX_r3YTRHMCVaPo0cr7GP1caaxj3eheFY2dWn16xb3qH94edUXkSYRMOgzvrZIeg9WySUeinfbCA/s200/inverted_full.png" width="200"></a></div>
Завдяки <a href="http://cs.ucu.edu.ua/">Українському Католицькому Університету</a> маю можливість <a href="https://www.facebook.com/events/144891426207123/">розповідати про сучасний С++</a> дуже хорошим слухачам -- нашим студентам, представникам компаній тощо. Написаний раніше, в 2013-му, якраз для таких розповідей, список літератури: "<a href="http://indrekis2.blogspot.com/2013/09/c_19.html">Книги по C++ -- деякі конкретні рекомендації</a>", встиг помітно застаріти. З того часу відбулося багато змін в С++ та відповідній екосистемі: вийшло ще два стандарти С++14 і С++17, а С++11/С++14 нарешті ввійшов у (широку) практику. Та й мої погляди на вибір літератури з того часу теж трохи змінилися. Тому вирішив написати новий. </div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
Суміжний текст, "<a href="http://indrekis2.blogspot.com/2013/09/c.html">Загальні міркування</a>", (крім природного врахування нових стандартів), залишається актуальним. </div>
</blockquote>
<blockquote class="tr_bq">
В принципі, всі згадані книжки можна знайти в Інтернеті. Але посилань не наводитиму. Якщо дуже критично -- пишіть. <br>
<br>
Українських перекладів жодної із них не існує, або я не зміг знайти... На російськомовні варіанти книг часто даю посилання із магазину "Гіада" у Львові. Я з ними ніяк не афілійований (ну, крім того, що іноді книжки там купляю), але цей магазин мені подобається, крім того, єдиний у своєму класі у Львові -- не хотілося б, щоб його спіткала доля аналогічного у 5-му корпусі Політехнічного. <br>
<br>
Англомовні -- або на авторську сторінку, або на Амазон чи іншого видавця. </blockquote>
<div style="text-align: justify;">
Мушу зізнатися, не всі із цих джерел -- книг, посилань, я прочитав акуратно, від початку до кінці. Тому могли затесатися неоднозначні, які мені цю неоднозначність не встигли показати. Про можливість такого наголошуватиму в описі джерела. Також, є ряд джерел, про які мені точно відомо -- у них є виражені негативні елементи, однак є і щось варте уваги -- про це теж писатиме.<br>
<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYYbS5i51F32lHoUD9NNBVQ_aMOO5wY3qjXP2H70xK92gsEvweoA6_fkYwL2tMq4yrBoOVyvjJZMWXH_NRf9DIg9EFppOfNZuY0B4zEqwtmEFgvQvYMnUbKz6iFKuHQEWuBK28TZW6yCY/s1600/cppmap3.0+%2528screen+8bit+96dpi%2529.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1065" data-original-width="1600" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYYbS5i51F32lHoUD9NNBVQ_aMOO5wY3qjXP2H70xK92gsEvweoA6_fkYwL2tMq4yrBoOVyvjJZMWXH_NRf9DIg9EFppOfNZuY0B4zEqwtmEFgvQvYMnUbKz6iFKuHQEWuBK28TZW6yCY/s320/cppmap3.0+%2528screen+8bit+96dpi%2529.png" width="320"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Карта С++17 від <a href="http://alenacpp.blogspot.com/2017/02/17.html">Алена С++</a>. Клікабельно!</td></tr>
</tbody></table>
<br>
</div><a href="http://indrekis2.blogspot.com/2018/03/c.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-55150829584385730812017-12-17T05:27:00.000+02:002017-12-17T05:27:25.969+02:00STM Studio -- монітор змінних STM32<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj49CE9p0HlBZCvrKNtHbb1dkxRQvOJQ0IcvTfK9uaCoDn5ELqaJ2tSBXnyRwP24H29EFw5lvN4stTqgCESACxGKKWR4vyYjexF0fe6XJoS6agwNxnbzOtrnWGCJv6v__3t7O_EI2GRJ7o/s1600/stm-studio.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="418" data-original-width="500" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj49CE9p0HlBZCvrKNtHbb1dkxRQvOJQ0IcvTfK9uaCoDn5ELqaJ2tSBXnyRwP24H29EFw5lvN4stTqgCESACxGKKWR4vyYjexF0fe6XJoS6agwNxnbzOtrnWGCJv6v__3t7O_EI2GRJ7o/s200/stm-studio.jpg" width="200"></a></div>
Намагаючись дійти толку із <a href="http://indrekis2.blogspot.com/2017/12/semihosting.html">SemiHosting без зневаджувача</a>, натрапив на цікавий інструмент: <a href="http://www.st.com/en/development-tools/stm-studio-stm32.html">STM Studio</a>. Не слід плутати із купою інших "студій", це не IDE, це: "run-time variables monitoring and visualization tool for STM32 microcontrollers" -- програма, яка дозволяє інтерактивно спостерігати за змінними програми, залитої в мікроконтролер.</div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
Вона використовує згадуваний <a href="http://indrekis2.blogspot.com/2017/12/semihosting.html">тут</a> режим моніторингу, тому теж змінює налаштування відладки MCU, але, принаймні (іноді) очищає їх, на відміну від OpenOCD. </div>
</blockquote>
<div style="text-align: justify;">
Така можливість корисна тоді, коли зупинка в дебагері -- не варіант. Наприклад, при зневадженні коду SemiHosting ;-). Або коли відбуваються якісь процеси, де паузи -- неприйнятні. </div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Чудес від цього, доволі простого, інструменту, очікувати не доводиться, але він корисний -- шкодую, що не знав про нього раніше. Не претендуючи на повноту, коротко глянемо, як його можна використовувати.</div>
<div style="text-align: justify;">
</div>
<a href="http://indrekis2.blogspot.com/2017/12/stm-studio-stm32.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com2tag:blogger.com,1999:blog-5048691505481629498.post-24763774165103816482017-12-14T01:24:00.000+02:002017-12-14T01:24:46.691+02:00USB VCP інших плат сімейства STM32 Discovery<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAVo-yYn4j7ZORa-RIrOCyR5LUxAtGG70YJky8Eihot6r311l1BpMDay7q_xG9qPVJKVA_CgyZ1WmGwqFQTlk7sANVHXz2tmCu83P0LffF8xKF-om8_b4fj5wymi9nDxoasFo0o-9uUu4/s1600/Animals+1_thumb%255B2%255D.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="251" data-original-width="400" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAVo-yYn4j7ZORa-RIrOCyR5LUxAtGG70YJky8Eihot6r311l1BpMDay7q_xG9qPVJKVA_CgyZ1WmGwqFQTlk7sANVHXz2tmCu83P0LffF8xKF-om8_b4fj5wymi9nDxoasFo0o-9uUu4/s200/Animals+1_thumb%255B2%255D.jpg" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">"<a href="http://diskonkey.blogspot.com/2009/10/zoo-usb.html">USB Zoo</a>"</td></tr>
</tbody></table>
Мікроконтролери навіть в межах одного сімейства трішки відрізняються один від одного. Якщо користуватися HAL, портабельність буде високою, але, все ж, не абсолютною. Вирішив повторити описане в попередньому пості, <a href="http://indrekis2.blogspot.com/2017/12/virtual-com-port-usb-stm32f3discovery.html">про USB на STM32F3Discovery,</a> для інших плат, обладнаних роз'ємом USB, поміж описаних <a href="http://indrekis2.blogspot.com/2017/12/stm32-discovery.html">тут</a>. Їх три (Blue pill поки не розглядав):</div>
<ul>
<li>STM32F4Discovery, із MCU STM32F407VG -- ARM Cortex M4F,</li>
<li>STM32F072BDiscovery, із MCU STM32F072RBT6 -- ARM Cortex M0,</li>
<li>32L0538Discovery, із STM32L053C8T6 -- ARM Cortex M0+.</li>
</ul>
<div style="text-align: justify;">
Кожна із цих плат <a href="http://indrekis2.blogspot.com/2017/12/stm32-discovery.html">чимось цікава</a>, наприклад, акселерометр та мікрофон в F4, e-Ink-дисплей в L0 тощо -- думаю, ще не раз до них повернемося. Але тут говоритимемо лише про USB CDC VCP. </div>
<br>
<br>
<a href="http://indrekis2.blogspot.com/2017/12/usb-vcp-stm32-discovery.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-22779372653948449982017-12-12T10:24:00.002+02:002017-12-12T10:26:22.786+02:00Досьє на плати сімейства STM32 Discovery<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
Останнім часом, у нас, в <a href="http://cs.ucu.edu.ua/">CS@UCU</a>, завелося багато демоплат, поміж них, за кількістю, домінують плати Discovery від STM32. В них почав плутатися вже й і я, що говорити про студентів. Тому вирішив написати такий собі довідничок: короткий опис плати, ключові компоненти, зокрема -- присутня на платі периферія, особливості її мікроконтролера (MCU), супроводжуючи інформацію посиланнями на офіційні сторінки, даташіти і т.д. </div>
<div style="text-align: justify;">
</div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
Варто зауважити, що на офіційних сторінках мікроконтролерів, крім даташітів є також посилання на величезну кількість так-званих AppNote -- прикладів використання якихось можливостей мікроконтролерів. Дуже рекомендую ознайомитися хоча б із списками. :-)</div>
</blockquote>
<div style="text-align: justify;">
Порядок плат менш-більш довільний, грубо -- по спаданню потужності мікроконтролера на платі та різноманітності периферії.<br>
<br>
Описано:<br>
<ul>
<li>STM32F4Discovery</li>
<li>STM32F3Discovery</li>
<li>32F072BDISCOVERY </li>
<li>32L0538DISCOVERY </li>
<li>32L152CDISCOVERY</li>
<li>STM32VLDISCOVERY</li>
<li>китайська "Blue pill"</li>
<li>екзотична M24LR-DISCOVERY</li>
</ul>
Вони обладнані мікроконтролерами на базі ядер ARM Cortex M0, M0+, M3, M4F, а M24LR обладнана 8-бітним MCU із сімейства STM8.<br>
<br>
<h2>
<span style="font-size: x-large;">STM32F4Discovery</span></h2>
<div style="text-align: justify;">
Цікава плата із одним із найпотужніших мікроконтролерів
сімейства (на М7 не заглядатимемося поки). Новіший варіант, (із кодом
замовлення STM32F407G-DISC1).<span style="font-size: x-large;"><br></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVrVigXtgaoQ2XjV-s0HOJ2-u-9Tjtm4Ncgm5Dbo78nyjQbIOkzizY53WqXfbEm7HesLTgyZmtGOBWD_NrzABhqv99xJMSBWCaO_NXWNMTf03CxC7LWEdpsdxE3ocdUQJ94ik0-UhQ7jY/s1600/en.stm32f4_discovery.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="577" data-original-width="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVrVigXtgaoQ2XjV-s0HOJ2-u-9Tjtm4Ncgm5Dbo78nyjQbIOkzizY53WqXfbEm7HesLTgyZmtGOBWD_NrzABhqv99xJMSBWCaO_NXWNMTf03CxC7LWEdpsdxE3ocdUQJ94ik0-UhQ7jY/s1600/en.stm32f4_discovery.jpg"></a></div>
<br>
</div><a href="http://indrekis2.blogspot.com/2017/12/stm32-discovery.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-33428268823126651212017-12-07T03:09:00.004+02:002023-11-11T15:57:42.019+02:00Зовсім просто про Virtual COM Port поверх USB плати STM32F3Discovery<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPsoK3ifS3rOKx202bhzk7iYh_b1s7Zl2A61yHb_H8uGN16tSwIUB-XbsRQf7N3qoROfrCsSQJB4_u-e6I2jsr2q_QULcbntYoBWZE4CdDqUT0Mz3MqX5CK-PMHuiuJ2RgGBD5nJn7xBI/s1600/usb-stick-1280px-922px0.jpg" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="922" data-original-width="1280" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPsoK3ifS3rOKx202bhzk7iYh_b1s7Zl2A61yHb_H8uGN16tSwIUB-XbsRQf7N3qoROfrCsSQJB4_u-e6I2jsr2q_QULcbntYoBWZE4CdDqUT0Mz3MqX5CK-PMHuiuJ2RgGBD5nJn7xBI/s200/usb-stick-1280px-922px0.jpg" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Взято <a href="https://mochieng.wordpress.com/2013/09/24/usb-technology/">тут</a>.</td></tr>
</tbody></table>
Шина USB, <a href="https://en.wikipedia.org/wiki/USB">Universal Serial Bus</a>, складна. Звична плата за універсальність і простоту використання. На жаль, я поки із нею знайомий лише побіжно. Однак, не тільки в мене такі проблеми :-). Тому багато популярних мікроконтролерів містять периферію, котра бере турботу про низькорівневі подробиці функціювання USB на себе. Зокрема, є підтримка і у багатьох MCU STM32. На платах <a href="http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/stm32f3discovery.html">STM32F3Discovery</a>, <a href="http://www.st.com/en/evaluation-tools/stm32f4discovery.html">STM32F4Discovery</a> та інших навіть виведено окремий роз'єм (Mini-B та Micro-B, відповідно). </div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
Є він і у ряду плат серії STM32F0, на клонах <a href="http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/">Maple Mini</a> із STM32F103, тощо. Про них напишу трішки пізніше. Але не ARM-ами єдиними. Поміж плат на AVR теж такі трапляються, зокрема, в сімействі плат Arduino. Я б виділив <a href="http://digistump.com/products/1">Digispark</a> -- найменший із Arduino. Детальніше про AVR + USB див. серію статей "<a href="http://codeandlife.com/2012/01/22/avr-attiny-usb-tutorial-part-1/">AVR ATtiny USB Tutorial Part</a>", але, в принципі, такі фокуси можливі <a href="https://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/">і з іншими Arduino</a>.</div>
</blockquote>
Крім того, STMicroelectronics надає Middleware, програмні бібліотеки,
які спрощують роботу із USB до майже тривіальної -- якщо не хотіти
чогось хитрого.<br>
<br>
І ось поверх цього USB демоплат можна влаштувати зручний та дуже швидкий (особливо в порівнянні із <a href="http://indrekis2.blogspot.com/2017/10/semihosting.html">semihosting</a>) канал обміну інформацією із комп'ютером -- віртуальний COM-порт (чи UART) , VCP. Подивимося, як це можна зробити.<br>
<br>
Зміст:<br>
<ol>
<li>Огляд USB</li>
<li> USB VCP на STM32F3Discovery -- початок</li>
<li> USB VCP -- доводимо до юзабельності</li>
</ol>
<br>
<br>
<a href="http://indrekis2.blogspot.com/2017/12/virtual-com-port-usb-stm32f3discovery.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com2tag:blogger.com,1999:blog-5048691505481629498.post-31343474073038709902017-12-06T04:53:00.000+02:002017-12-12T22:00:57.176+02:00SemiHosting без дебаггера<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9L-G1CQkW-R1drHDD1_cvGhCxW3kchc6ZxPbvc0wnLga9lh7xzZ5oa8o1DUmdwfoAQrQpjYE1QVFiW6HcJBiuGloKHiKrk4E8hq_BPlVnEux3vHS1lbhqTIr7Tm4UHZGUMMXDhODGzb8/s1600/DebugOutput.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="284" data-original-width="832" height="109" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9L-G1CQkW-R1drHDD1_cvGhCxW3kchc6ZxPbvc0wnLga9lh7xzZ5oa8o1DUmdwfoAQrQpjYE1QVFiW6HcJBiuGloKHiKrk4E8hq_BPlVnEux3vHS1lbhqTIr7Tm4UHZGUMMXDhODGzb8/s320/DebugOutput.png" width="320"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Взято із: "<a href="https://blog.segger.com/getting-printf-output-from-target-to-debugger/">Getting printf Output from Target to Debugger</a>".</td></tr>
</tbody></table>
Якщо ви користувалися <a href="http://indrekis2.blogspot.com/2017/10/semihosting.html">SemiHosting</a>, то могли зауважити -- коли програма виконується без під'єднаного відладчика (зневаджувача), нічого корисного вона не робить. Звичайно, без згаданого відладчика, чим вона зайнята, не видно, але жодної зовнішньої активності (мигання світлодіодами, комунікація шинами) після спроби скористатися семихостингом не буде. В чому справа і як із тим боротися? </div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Найпростіший варіант -- мати "Debug" i "Release" версію програми, і в останній SemiHosting повністю викидати. В принципі, враховуючи, що даний інтерфейс -- чисто відладочний, це, певне, найкращий варіант -- не варто залишати відладочний код в приладі. Але він має й свої мінуси -- зростає громіздкість коду, більше способів його зламати (див. весь список заперечень проти використання умовної компіляції), все таке. </div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Щоб знати, що ще можна зробити, слід розібратися, а чого, власне, програма зупиняється на використанні SemiHosting. Потім -- придумати, як із тим боротися. Наперед скажу -- на жаль, повністю вирішити проблему не вдасться. Все рівно буде потрібно вимкнути-ввімкнути живлення мікроконтролера (демоплати), перш ніж код зможе працювати автономно. <br><br><b>Update 12.12.2017</b>: Описано особливості ARM Cortex M0 та M0+.<br>
<br>
</div><a href="http://indrekis2.blogspot.com/2017/12/semihosting.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-86075755766875986562017-10-11T00:07:00.001+03:002020-04-22T22:20:29.025+03:00Література до принципів організації комп'ютера -- Інтернет<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgzzZgXKxTO_bbqKg0746oYXwOUynLn7JH6mu9a6xJGSplt7evZ2ZHaheiEXoLUGgJVgXE4LTe_3mPllFqP4tci7eimDfdi9fPTlVnVj-rPu1AnujVJn3V3gAdmV4y0bwa8aU4DBooeA0/s1600/internet-marketing-link.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="275" data-original-width="275" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgzzZgXKxTO_bbqKg0746oYXwOUynLn7JH6mu9a6xJGSplt7evZ2ZHaheiEXoLUGgJVgXE4LTe_3mPllFqP4tci7eimDfdi9fPTlVnVj-rPu1AnujVJn3V3gAdmV4y0bwa8aU4DBooeA0/s200/internet-marketing-link.jpg" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Взято <a href="https://sites.google.com/a/moundsviewschools.org/mr-olofson-8th-grade-science/">тут</a>.</td></tr>
</tbody></table>
Продовжуючи <a href="http://indrekis2.blogspot.com/2017/10/blog-post_39.html">список літератури</a>, тепер -- значно більш ефемерні джерела, посилання в Інтернеті. Зате їх більше. :-)</div>
<div style="text-align: justify;">
<br>
Цей список складається із двох частин -- літератури для безпосереднього вивчення теми та окремий історичний підрозділ. Прочитайте хоча б вступ до нього! :-)<br>
<br>
<b>Почнемо із вікіпедії</b>. Звичайно, тут легко втонути, список може стати величезним, тому, в основному, посилання "першого рівня" -- вглиб треба рухатися самостійно.</div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Загальні посилання:</div>
<ul>
<li><a href="https://uk.wikipedia.org/wiki/%D0%9C%D1%96%D0%BA%D1%80%D0%BE%D1%81%D1%85%D0%B5%D0%BC%D0%B0">Мікросхема</a> та <a href="https://en.wikipedia.org/wiki/Integrated_circuit">Integrated circuit</a>.</li>
<li><a href="https://uk.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D1%96%D1%87%D0%BD%D0%B8%D0%B9_%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8C">Логічний вентиль</a> та <a href="https://en.wikipedia.org/wiki/Logic_gate">Logic gate</a> -- зокрема, див. різні схеми позначень.</li>
<li><a href="https://en.wikipedia.org/wiki/Logic_family">Logic family</a>, всілякі <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Transistor-transistor_logic" title="Transistor-transistor logic">TTL</a>, <a href="https://en.wikipedia.org/wiki/CMOS" title="CMOS">CMOS</a> і т.д.</li>
<li><a href="https://uk.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D1%96%D1%87%D0%BD%D1%96_%D0%B5%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B8">Логічні елементи</a>.</li>
<li><a href="https://uk.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B5%D1%80" title="">Тригер</a>,<a href="https://uk.wikipedia.org/wiki/%D0%94%D0%B5%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D0%BE%D1%80" title="Демультиплексор"> Демультиплексор,</a><a href="https://uk.wikipedia.org/wiki/%D0%94%D0%B5%D1%88%D0%B8%D1%84%D1%80%D0%B0%D1%82%D0%BE%D1%80" title="Дешифратор"> Дешифратор,</a><a href="https://uk.wikipedia.org/wiki/%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B8%D0%B9_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BE%D1%80" title="Цифровий компаратор"> Компаратор,</a><a href="https://uk.wikipedia.org/wiki/%D0%9D%D0%B0%D0%BF%D1%96%D0%B2%D1%81%D1%83%D0%BC%D0%B0%D1%82%D0%BE%D1%80" title="Напівсуматор"> Напівсуматор,</a><a href="https://uk.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BF%D0%BB%D0%B5%D0%BA%D1%81%D0%BE%D1%80" title="Мультиплексор"> Мультиплексор,</a><a href="https://uk.wikipedia.org/wiki/%D0%A1%D1%83%D0%BC%D0%B0%D1%82%D0%BE%D1%80" title="Суматор"> Суматор, </a><a href="https://uk.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80%D0%B0%D1%82%D0%BE%D1%80" title="Шифратор"> Шифратор,</a> та англійські варіанти: <a href="https://en.wikipedia.org/wiki/Flip-flop_(electronics)">Flip-flop.</a></li>
<li><a href="https://uk.wikipedia.org/wiki/%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%BA%D0%BE-%D0%BB%D0%BE%D0%B3%D1%96%D1%87%D0%BD%D0%B8%D0%B9_%D0%BF%D1%80%D0%B8%D1%81%D1%82%D1%80%D1%96%D0%B9">Арифметико-логічний пристрій</a>, <a href="https://en.wikipedia.org/wiki/Arithmetic_logic_unit">Arithmetic logic unit</a>.</li>
</ul>
Елементна база:<br>
<ul>
<li><a href="https://en.wikipedia.org/wiki/7400_series">7400 series</a> -- найбільш популярна серія мікросхем, включає реалізації всіх тих компонент, про які пише Токхейм та інші. </li>
<li><a href="https://en.wikipedia.org/wiki/List_of_7400_series_integrated_circuits">List of 7400 series integrated circuits</a> -- список членів цього сімейства мікросхем.</li>
<li><a href="https://en.wikipedia.org/wiki/4000_series">4000 series</a> -- ще одна така серія. Зараз, на загал, менш популярна, ніж 74хх, але трапляється. </li>
<li><a href="https://en.wikipedia.org/wiki/List_of_4000_series_integrated_circuits">List of 4000 series integrated circuits.</a></li>
<li><a href="https://uk.wikipedia.org/wiki/NE555">NE555</a> -- таймер, генератор імпульсів і взагалі дуже корисна штука.</li>
<li>Не на вікі, ще один <a href="http://www.electronique-et-informatique.fr/anglais/Digit/Data_book.html">список мікросхем серії 74xx</a>, привабливий тим, що містить схеми розташування виводів більшості мікросхем серії -- сильно спрощує практичну роботу із ними. </li>
</ul>
<br>
Мікропроцесорний "напрямок":<br>
<a href="http://indrekis2.blogspot.com/2017/10/blog-post_11.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-4834464990551634932017-10-10T22:06:00.000+03:002017-10-10T22:06:12.683+03:00Література до принципів організації комп'ютера -- книги<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCgVniGXIg1pr1xfx60JVhrid2Bt4BJgHLOwyd9iWsnO0UuanNoULkHkaoeQ_721aTe-_nqBlV724GywgV9PU4dlyKadt9pN1VUhKPoUn8R9sTSQvyXSMfcJepgjzm5zwSEVXXVwEnd48/s1600/a-book-a-week-image.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1000" data-original-width="1600" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCgVniGXIg1pr1xfx60JVhrid2Bt4BJgHLOwyd9iWsnO0UuanNoULkHkaoeQ_721aTe-_nqBlV724GywgV9PU4dlyKadt9pN1VUhKPoUn8R9sTSQvyXSMfcJepgjzm5zwSEVXXVwEnd48/s200/a-book-a-week-image.jpg" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Взято <a href="http://www.listchallenges.com/top-100-most-popular-books-on-goodread-members">тут</a>.</td></tr>
</tbody></table>
Один із курсів, що викладаю в <a href="http://cs.ucu.edu.ua/">УКУ</a> -- "Принципи організації комп'ютера". Він складається із двох частин. Перша присвячена елементарним блокам комп'ютера, від способів представлення даних -- чисел та тексту, до простих логічних елементів, мультиплексорів, тригерів та защібок, з яких будуються блоки пам'яті, арифметичні та арифметично-логічні (ALU) модулі тощо. Друга -- програмуванню простих обчислювальних систем без допомоги операційної системи -- так-би мовити, bare metal. </div>
<div style="text-align: justify;">
<blockquote class="tr_bq">
<div style="text-align: justify;">
На жаль, через обмеження часу, в цьому курсі доводиться користуватися такою собі логарифмічною шкалою -- стрибати між рівнями абстракцій, не заповнюючи проміжки щільно. Після арифметичних модулів, мінімалістичних блоків пам'яті та оглядом функціонування ALU зразу слідує bare-metal програмуванням сучасних систем. <br>
<br>
В ролі bare metal системи обрано демоплату на базі мікроконтролера <a href="http://indrekis2.blogspot.com/search/label/STM32">STM32</a> -- з одного боку, це цілком серйозний 32-бітний процесор, із 4Гб адресним простором, перериваннями із підтримкою пріоритету, DMA, MPU (але, на жаль, без MMU) і все таке (на противагу крихітним і простеньким <a href="http://indrekis2.blogspot.com/search/label/AVR">AVR8</a>), мікропроцесори. З іншого боку, у них немає великої і плутаної стандартної периферії машин на базі <a href="https://en.wikipedia.org/wiki/X86">x86</a> та складнощів із кешем, суперскалярністю, перевпорядкуванням команд і т.д. "великих процесорів". (Про них говоримо в наступному курсі, але це -- окрема історія. :-). Взагалі, про <a href="http://indrekis2.blogspot.com/search/label/STM32">STM32</a> в цьому блозі написано багато. </div>
</blockquote>
</div>
<div style="text-align: justify;">
</div>
<a href="http://indrekis2.blogspot.com/2017/10/blog-post_39.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-40964312451371206042017-10-05T08:21:00.000+03:002017-12-06T05:00:08.088+02:00Зовсім просто про semihosting<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4tKGkU8nJAsggQi5tKhhtkWEjAJoNPCkibSz8fSqaF8oHG6aoH8cgLXVfWh2O3DISb-o0l0UfllmzS2WOcG9K6-GSGgTri_hDWP08-nnvlsLN57zhDkPZWYgRLySzwor4uitZvNN8wpQ/s1600/ARM_Semihosting.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="588" data-original-width="770" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4tKGkU8nJAsggQi5tKhhtkWEjAJoNPCkibSz8fSqaF8oHG6aoH8cgLXVfWh2O3DISb-o0l0UfllmzS2WOcG9K6-GSGgTri_hDWP08-nnvlsLN57zhDkPZWYgRLySzwor4uitZvNN8wpQ/s320/ARM_Semihosting.png" width="320"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Структура SemiHosting. Взято <a href="http://www.keil.com/support/man/docs/armcc/armcc_pge1358787046598.htm">тут</a>.</td></tr>
</tbody></table>
Що таке Semihosting, як його підключити і використовувати із "старим та добрим" printf(), детально описано тут: "<a href="http://indrekis2.blogspot.com/2015/11/c-semihosting-stm32-coide.html">Стандартна бібліотека C та SemiHosting (на прикладі STM32 і CoIDE)</a>", хоча, як видно з назви, для іншого середовища розробки. Більше технічної інформації є тут: "<a href="http://indrekis2.blogspot.com/2017/12/semihosting.html">SemiHosting без дебаггера</a>".</div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
А зараз опишу як ним можна скористатися із мінімальними зусиллями, так би мовити, для лінивих. :-)</div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Ідея наступна: існує апаратний інтерфейс для передачі даних із мікроконтролера дебаггеру. Є бажання зробити так, щоб по ньому можна було передавати текст, за допомогою звичних функцій вводу-виводу С: printf(), puts(), тощо. Як описується у <a href="http://indrekis2.blogspot.com/2015/11/c-semihosting-stm32-coide.html">згаданому вище пості</a>, для цього слід мати реалізацію стандартної бібліотеки та надати для неї відповідні <b>системні виклики</b>, котрі вмітимуть передавати дані семіхостингом. <br>
<blockquote class="tr_bq">
Часто із компілятором для мікроконтролера йдуть <a href="https://en.wikipedia.org/wiki/Newlib">newlib</a> чи newlib-nano, мінімалістичні реалізації стандартної бібліотеки С. Зокрема, є вона і в <a href="https://launchpad.net/gcc-arm-embedded">збірках компіляторів для MCU ARM Cortex M</a>, тому про неї окремо можна не турбуватися. Хоча знати слід -- коли стандартні налаштування перестануть влаштовувати або просто не працюватимуть як належить. </blockquote>
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
І тут є два варіанти:</div>
<ul>
<li>Із більшим контролем але і більшою морокою -- надати системні виклики самостійно, як описано за посиланням вище.</li>
<li>Скористатися готовою реалізацією, що йде разом із компілятором для наших мікроконтролерів -- ARM Cortex M.</li>
</ul>
<div style="text-align: justify;">
<b>Важливе зауваження</b>: за використання семіхостингу, ваш код перестане працювати без під'єднаного дебаггера! Як вирішити цю проблему, див. "<a href="http://indrekis2.blogspot.com/2017/12/semihosting.html">SemiHosting без дебаггера</a>".<br>
<br>
Отож, потрібно виконати наступні кроки:<br>
<ol>
<li>Дозволити SemiHosting в дебаггері.</li>
<li>За потреби -- додати підтримку вводу/виводу floating-point чисел.</li>
<li>Надати свою реалізацію системних викликів.</li>
<li><u><b>Або </b></u>використати готову їх реалізацію із підтримкою SemiHosting із GCC.</li>
</ol>
Розглянемо ці кроки детальніше. </div>
<div style="text-align: justify;">
</div>
<a href="http://indrekis2.blogspot.com/2017/10/semihosting.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-76641247687982016762017-10-04T08:41:00.001+03:002017-10-04T08:41:41.172+03:00Марсіанські справи -- 1<div style="text-align: justify;">
<b><i>Увага, це старий текст, написаний на початку <u>2015-го</u>! З того часу
не мав можливості до нього повертатися, але викидати шкода, тому трішки
відредагував і викладаю. </i></b> <br>
<br>
Не маючи можливості охопити неосяжне, пишу (<i>upd кінця 2016: на жаль, ймовірно -- писав</i>) лише про нові місії, зокрема із марсіанських -- <a href="http://indrekis2.blogspot.com/search/label/MSL%20Curiosity">MSL Curiosity</a>, <a href="http://indrekis2.blogspot.com/search/label/MAVEN">MAVEN</a> та <a href="http://indrekis2.blogspot.com/search/label/MOM">MOM</a>. Однак, над тим же Марсом працює багато інших (на загал -- потужніших, якщо говорити про орбітальні) станцій та, що важливіше, наукових колективів. Раніше всілякі цікавинки про них я поміщав під заголовком "Додаток до огляду Curiosity", але на додаток воно мало схоже :-) То завів окрему серію, "Марсіанські справи".<br>
<br>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCYu6OqpY0XnbH1p-EXzeRbmMj3dKhwKG8Cboen5r3dAcJ4Qy8PGBidiH-LoAGEzJ5iceqrnUxzkHDcdCsO7Qb0acpPpnPpAV6QGSVUGDlzJEO2r1shcacQa7c-BmjpyxUym3osBRIAJw/s1600/arrow-right-double.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCYu6OqpY0XnbH1p-EXzeRbmMj3dKhwKG8Cboen5r3dAcJ4Qy8PGBidiH-LoAGEzJ5iceqrnUxzkHDcdCsO7Qb0acpPpnPpAV6QGSVUGDlzJEO2r1shcacQa7c-BmjpyxUym3osBRIAJw/s1600/arrow-right-double.jpg"></a>Користуючись наземними телескопами, <a href="http://www.eso.org/public/russia/news/eso1509/">група дослідників</a> розрахувала ймовірну кількість води на Марсі в <a href="http://en.wikipedia.org/wiki/Noachian">епоху Ноя</a>, яка закінчилася 3.7 млрд років тому, коли Марс ще був вологим. За їх оцінками, об'єм води складав мінімум 20 мільйонів кубічних кілометрів --- достатній, щоб вкрити всю його поверхню шаром товщиною 140 м. Ймовірно, вона, в основному, містилася в океані, що займав помітну частину теперішньої північної півкулі (орієнтація Марсу в просторі помітно змінюється з часом!), де зараз низини. Його площа могла складати 19% поверхні планети, а глибина досягати 1.6 км.<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_bPFE4LxFg5lQkrKxXA6ld_nL2mSAPHHjuHQLDBpCyOD4S6GbhoX0AYTt2OwHWpQ-3hoJlte8fWWJIomNk3OV9NduxETVI89xiINcRSkZGWPSkc2ftlaQmQd1UkuxI5zRe0mUEo3j5dM/s1600/eso1509b.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_bPFE4LxFg5lQkrKxXA6ld_nL2mSAPHHjuHQLDBpCyOD4S6GbhoX0AYTt2OwHWpQ-3hoJlte8fWWJIomNk3OV9NduxETVI89xiINcRSkZGWPSkc2ftlaQmQd1UkuxI5zRe0mUEo3j5dM/s1600/eso1509b.jpg" width="400"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Так міг виглядати Марс 4 млрд років тому.<br>
(c) <a href="http://www.eso.org/public/unitedkingdom/news/eso1509/">ESO/M. Kornmesser/N. Risinger</a></td></tr>
</tbody></table>
<br>
</div><a href="http://indrekis2.blogspot.com/2017/10/1.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-18611161501407429672017-08-12T03:15:00.000+03:002017-08-12T03:15:50.540+03:00Огляд (CPU) performance counters API<div style="text-align: justify;">
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbUsGXM6fCPMsR2heRC8vnuwe8HWDMw17iE5sKjnHe2SXzw0kTFed358_50-Qzoa2i4H-lcgI0FBP8oSWf0YXLNDn3mPZnMlpcZ3-2zo8M_hxNvgJVpNALIuLIoGnZ2oFjU_DQnViu-7U/s1600/buses.gif" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="447" data-original-width="622" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbUsGXM6fCPMsR2heRC8vnuwe8HWDMw17iE5sKjnHe2SXzw0kTFed358_50-Qzoa2i4H-lcgI0FBP8oSWf0YXLNDn3mPZnMlpcZ3-2zo8M_hxNvgJVpNALIuLIoGnZ2oFjU_DQnViu-7U/s200/buses.gif" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Схема процесора M68000. Взято <a href="http://fourier.eng.hmc.edu/e85_old/lectures/processor/node2.html">тут</a>.</td></tr>
</tbody></table>
Сучасні процесори надають доступ до різноманітної інформації, пов'язаної із їх роботою -- кількість кеш-промахів та кеш-попадань, кількість виконаних переходів та кількість не вгаданих branch-предиктором переходів, кількість виконаних команд різних видів і т.д. і т.п.</div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Звичайно, до цієї інформації можна доступатися безпосередньо -- якщо ОС надає відповідні права працювати із моделе-специфічними регістрами процесора (MSR) або є можливість завантажити відповідний драйвер. Однак, це складно -- набір регістрів прив'язаний не тільки до архітектури процесора (x86 чи ARM), але й виробника (Intel vs AMD) і конкретної моделі процесора. Код виходить дуже непортабельним, або дуже громіздким. Зате все під контролем. Детальніше про такий підхід -- див., наприклад, сайт славнозвісного Агнера Фога: "<a href="https://github.com/opcm/pcm">Test programs for measuring clock cycles and performance monitoring</a>". </div>
<div style="text-align: justify;">
<br></div>
<div style="text-align: justify;">
Однак, розвинені ОС надають і звичайним програмам доступ до цих інструментів. Про відповідні API MS Windows трішки говорилося в <a href="http://indrekis2.blogspot.com/2017/07/blog-post.html">попередньому пості</a>. Для повноти коротко (дуже коротко!) розглянемо спеціалізоване API для POSIX систем -- PAPI та кросплатформову бібліотеку від Intel Processor Counter Monitor (PCM).</div>
<blockquote class="tr_bq">
<div style="text-align: justify;">
Як бачимо, повної кросплатформовості немає -- або тільки POSIX (з обмовками), або тільки процесори Intel, при тому -- достатньо сучасні (конкретніше -- див. далі).</div>
</blockquote>
<br>
<a href="http://indrekis2.blogspot.com/2017/08/cpu-performance-counters-api.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0tag:blogger.com,1999:blog-5048691505481629498.post-61326270895258892522017-07-30T11:31:00.000+03:002017-08-02T01:33:22.593+03:00Огляд інструментів трасування та профілювання багатопоточних програм<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3encgSXJDNKQhkCRhr_wKH8DNbfbI9d-DYNGPo6o-70ekhe-fFWQUZRVNVBNP5NchPTuF-ILetf79AGh85jOMkIkqp1z__BebJxDEiVBdP9HOyNRcftKs9Kx4xdfBmUmwYVJpLhpdr1s/s1600/kcachegrind-callgrind.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="744" data-original-width="940" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3encgSXJDNKQhkCRhr_wKH8DNbfbI9d-DYNGPo6o-70ekhe-fFWQUZRVNVBNP5NchPTuF-ILetf79AGh85jOMkIkqp1z__BebJxDEiVBdP9HOyNRcftKs9Kx4xdfBmUmwYVJpLhpdr1s/s200/kcachegrind-callgrind.png" width="200"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Взято <a href="http://alexott.net/en/writings/prog-checking/Valgrind.html">тут</a>.</td></tr>
</tbody></table>
<div style="text-align: justify;">
Для вирішення <a href="http://indrekis2.blogspot.com/2017/07/blog-post.html">описаних раніше</a> задач (та багато яких інших!) існує ряд
хороших готових інструментів. З тих чи інших причин вони для задачі, згаданої в попередньому пості, не підходять, зокрема -- через складність автоматизації і не
завжди присутню можливість фіксувати фрагменти коду, що досліджуються. Але знати про них слід -- вони дозволяють детально, іноді -- майже інтерактивно, подивитися, як паралельна програма функціонує. Та й автоматизація, в принципі, можлива.</div>
<br>
<h3>
<span style="font-size: large;">MS Windows - Concurrency Visualizer</span></h3>
<h3>
</h3>
<br>
Інструмент, власне, візуалізації роботи багатопоточної
програми. Може використовуватися як додаток до Visual Studio або
самостійно.<br>
<br>
<ul>
<li>Інсталяція: "<a href="https://msdn.microsoft.com/en-us/library/dd537632.aspx">Concurrency Visualizer для Visual Studio 2015</a>".</li>
<li>Використання консольних утиліт: "<a href="https://msdn.microsoft.com/en-us/library/hh543788.aspx">Concurrency Visualizer Command-Line Utility (CVCollectionCmd)</a>".</li>
<li>Використання GUI Visual Studio 2015: "<a href="https://dzone.com/articles/profiling-application-visual-2">Profiling an application with Visual Studio – Concurrency</a>" </li>
</ul>
<br>
<a href="http://indrekis2.blogspot.com/2017/07/blog-post_30.html#more">Детальніше »</a>Indrekishttp://www.blogger.com/profile/08168420864442644193noreply@blogger.com0