Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
- Telegram Web
Telegram Web
Рекрутер в ИТ это то препятствие, которое стоит между компанией, отчаянно нуждающейся в персонале, и высококлассными инженерами на рынке
Тут пятничный разговор зашёл, так что..

А похвастайтесь в комментариях самыми сложными и чудовищными тестовыми заданиями, которые вас просили сделать?
Щас будет странный вопрос, не переключайтесь.

А нет ли среди моих читателей теплых выходов на проверенные и крупные (20+ человек) аутсорсные ИТ-команды строго из Румынии и Молдавии? Есть долгоиграющий и перспективный заказ на разработку - с территориальными, к сожалению, ограничениями.

Если срастётся через рекомендацию — с меня хорошее вознаграждение: например, макбук.

Шутки про цыган и лошадей слать не надо
Никогда не знаешь, где найдешь, где потеряешь

На сайте издания "Военное обозрение" авторы учинили серию статей про рождение советской ПРО. Которая сразу, со второй статьи, превратилась в серию о советской микроэлектронной и компьюерной программе, с фактами от 20 годов и до начала 90-х. Крайне любопытный, обширный материал, с отсылками к фамилиям, названиям и другим историческим артефактам.

Я собрал статьи, которые нашел, в подборку ниже по дате выхода. Надеюсь, вам будет так же интересно, как и мне.

Лебедев и МЭСМ
https://topwar.ru/182766-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-chast-ii-lebedev-i-bruk.html

Брук и М-1
https://topwar.ru/182774-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-chast-iii-bruk-i-m-1.html

"БЭСМ против Стрелы"
https://topwar.ru/182787-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-chast-iv-bjesm-protiv-strely.html

Варшавский договор
https://topwar.ru/183309-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-chehija-vstupaet-v-igru.html

Проект ЭПОС
https://topwar.ru/183401-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-chast-vi-proekt-jepos.html

Назад в СССР
https://topwar.ru/183599-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-vozvraschaemsja-v-sssr.html

"Юдицкий строит суперкомпьютер"
https://topwar.ru/183763-unikalnaja-i-zabytaja-rozhdenie-sovetskoj-pro-judickij-stroit-superkompjuter.html

Кристадины, диоды и транзисторы
https://topwar.ru/184029-rozhdenie-sovetskoj-pro-kristadiny-triody-i-tranzistory.html

Транзисторные машины СССР
https://topwar.ru/184319-rozhdenie-sovetskoj-pro-tranzistornye-mashiny-sssr.html

"Долгий путь к ИС"
https://topwar.ru/184420-rozhdenie-sovetskoj-pro-dolgij-put-k-integralnym-shemam.html

"Осокин против Килби"
https://topwar.ru/184823-rozhdenie-sovetskoj-pro-osokin-protiv-kilbi-kto-na-samom-dele-izobrel-mikroshemu.html

"Зеленоград и Ленинград"
https://topwar.ru/184867-rozhdenie-sovetskoj-pro-zelenograd-i-leningrad.html

"Атака клонов"
https://topwar.ru/184877-rozhdenie-sovetskoj-pro-ataka-klonov.html

Модулярный компьютер
https://topwar.ru/185254-rozhdenie-sovetskoj-pro-velichajshij-moduljarnyj-kompjuter.html

Убийство 5Э53
https://topwar.ru/185282-rozhdenie-sovetskoj-pro-istorija-ubijstva-5je53.html

"Конец модулярных машин"
https://topwar.ru/186510-rozhdenie-sovetskoj-pro-konec-moduljarnyh-mashin.html

"Звездные войны"
https://topwar.ru/186782-rozhdenie-sovetskoj-pro-karcev-i-chelomej-strojat-zvezdnye-vojny.html

"Конец Юдицкого"
https://topwar.ru/186572-rozhdenie-sovetskoj-pro-konec-judickogo.html

"Кибернетика"
https://topwar.ru/187039-rozhdenie-sovetskoj-pro-ot-bitvy-za-britaniju-do-kibernetiki.html

"Механические мозги"
https://topwar.ru/187407-rozhdenie-sovetskoj-pro-mehanicheskie-mozgi.html

"Винер. Человек и миф"
https://topwar.ru/187844-rozhdenie-sovetskoj-pro-viner-chelovek-i-mif.html

"На пути к Киберкоммунизму"
https://topwar.ru/188128-rozhdenie-sovetskoj-pro-na-puti-k-kiberkommunizmu.html

"Конец Карцева"
https://topwar.ru/188689-rozhdenie-sovetskoj-pro-konec-karceva.html

Бэсм. Сага
https://topwar.ru/189578-rozhdenie-sovetskoj-pro-bjesm-saga-chast-i.html

"Величайший советский компьютер"
https://topwar.ru/189956-rozhdenie-sovetskoj-pro-bjesm-saga-chast-ii.html

За и против БЭСМ-6
https://topwar.ru/189960-rozhdenie-sovetskoj-pro-bjesm-saga-chast-iii.html

"БЭСМ-6. Итоги"
https://topwar.ru/189962-rozhdenie-sovetskoj-pro-bjesm-saga-chast-iv.html

"На пути к Единой Системе"
https://topwar.ru/190327-rozhdenie-sovetskoj-pro-na-puti-k-edinoj-sisteme.html

Конец советской компьютерной программы
https://topwar.ru/190377-rozhdenie-sovetskoj-pro-konec-sovetskoj-kompjuternoj-programmy.html

"Приключения С-300"
https://topwar.ru/190481-rozhdenie-sovetskoj-pro-prikljuchenija-s-300.html

Долгое восхождение на "Эльбрус"
https://topwar.ru/190990-rozhdenie-sovetskoj-pro-dolgoe-voshozhdenie-na-jelbrus.html

"При Сталине такого не было"
https://topwar.ru/190999-rozhdenie-sovetskoj-pro-pri-staline-takogo-ne-bylo.html

"Эль-Берроуз"
https://topwar.ru/191202-rozhdenie-sovetskoj-pro-jel-berrouz.html
Ладно, погнали дальше.

В последний раз тут была подборка про советские ЭВМ. Вот недостающие статьи из того цикла:

Битва советских министерств за микросхемы
https://topwar.ru/191867-rozhdenie-sovetskoj-pro-bitva-sovetskih-ministerstv-za-mikroshemy.html

Рождение советской ПРО. Как был создан и почему провалился компьютер «Эльбрус»
https://topwar.ru/192438-rozhdenie-sovetskoj-pro-kak-byl-sozdan-i-pochemu-provalilsja-kompjuter-jelbrus.html

Последний советский суперкомпьютер
https://topwar.ru/192565-rozhdenie-sovetskoj-pro-poslednij-sovetskij-superkompjuter.html

— * — * —

После чего, для контраста предлагаю нырнуть в увлекательную подборку "Made at Intel" от непосредственного участника:

"Architecture and religion"
https://habr.com/ru/articles/663070/

"Architecture and religion — 2"
https://habr.com/ru/articles/664116/

"Architecture and religion — 3"
https://habr.com/ru/articles/664682/

"Кризис среднего возраста"
https://habr.com/ru/articles/666098/

"Байки россыпью"
https://habr.com/ru/articles/666786/

"Acquisitions"
https://habr.com/ru/articles/683632/

"Acquisitions – 2"
https://habr.com/ru/articles/716956/

"Acquisitions – 3"
https://habr.com/ru/articles/723368/

"«Советские газеты»"
https://habr.com/ru/articles/696980/

"Пировали, веселились…"
https://habr.com/ru/articles/716208/

"Свой среди чужих, чужой среди своих"
https://habr.com/ru/articles/718734/

"Специалист по этике"
https://habr.com/ru/articles/719004/

"Дела продажные"
https://habr.com/ru/articles/724752/

"Молитвы, энтузиасты и разбитые лбы"
https://habr.com/ru/articles/724856/

"В поисках мессии"
https://habr.com/ru/articles/732544/

Приятного чтения.
Те, кто работают в крупных компаниях (энтерпрайзах всяких), наверняка сталкивались с ситуацией, когда разработчики заняты на каких-то "внутренних" задачах — пилят корпоративный портал или очередную систему бронирования всего на свете.
Редко это получается хорошо, но почти всегда — капец как долго.
 
С дизайнерами аналогичная история — не раз видел, как штатный дизайнер занят над проектами оформления некоторых внутренних артефактов компании. Почти всегда это плохая идея: тратят гору внутреннего ресурса, а получется шляпа какая-то. Но при этом обычно считают, что сделали невероятное одолжение компании (кроме самых скромных).
 
Но почему-то у Эппла не так. Вот пример внутренней почетной награды Sign of Excellence, которая вручается сотруднику за 5 лет работы в компании. Приятно смотреть и получить.
 
Как они это делают? Загадка.
Продолжая тему Apple.

Я нашёл в интернетах удивительный сайт https://vintageapple.org/
Там много разной архивной информации, так или иначе тематически относящейся к Macintosh. Лично мне больше всего были интересны старые выпуски журнала BYTE, ну и Inside Macintosh. Осторожнее, не повалите сайт :)

Пару картинок дальше.
С тех пор, как я всех подрывал попробовать писать на Ada, прошло некоторое время, и я решил уточнить, как дела у потенциальных новобранцев.

Выясняется, что на пути конверсии в счастливых программистов Ada первое препятствие это настроить окружение, IDE и так далее. Сегодня я покажу, как это быстро сделать, чтобы играть в тестовые примеры прямо на своей машине.

За последние пару лет, кстати, ситуация упростилась сильно, развился пакетный менеджер, плагинчики, AdaCore смержили коммьюнити и про-версии GNAT и сделали их доступными как FSF, так что одной головной болью меньше. А из грустных новостей наблюдается то, что GNAT Studio, самая продвинутая IDE, больше не выпускается официально под MacOS, так что кодить будем в VS Code. Но ничего, пакетный менеджер поставит нам всё, что нужно для работы.

1. Итак, первым шагом необходимо отправиться на сайт https://ada-lang.io/ и качнуть оттуда Alire - пакетный менеджер Ada. Я качал для MacOS, разумеется. То, что скачали, разархивируем, снимает атрибут командой [$xattr -d com.apple.quarantine bin/alr]. Я рекомендую прописать путь к bin/alr в PATH

2. Устанавливаем редактор VS Code, проверяем, что запускается. В разделе Extensions находим Ada Language Server (тот, что без поддержки отладки), ставим. Даже не понадобится перезагружаться.

3. Генерируем тестовый проект. Для этого открываем Terminal, там отправляем команду [$alr get hello]. Данная команда должна скачать и инициализировать на диске тестовый проект hello в отдельной папке.

Если это первый запуск (а у вас так и будет), то запустится асистент выбора тулчейна. Вам предстоит выбрать два продукта:
- GNAT - компилятор, рантайм и т.п. - выбирайте под вашу платформу (native), с кросс-компиляцией потом разберетесь;
- GPRBuild - инструмент для сборки проектов - выбирайте посвежее.
Далее делаем [$cd hello] после успешного окончания команды.

4. В VS Code делаем Add Folder, и добавляем hello. Теперь можно походить, поизучать, что у вас там в проекте сгенерировалось. Обратите внимание на файлы .gpr, это файлы задания самого проекта и его настроек. Примечательно, что это не xml и не .ini, а само по себе обычный код на Ada.

5. Теперь делаем [$alr run]. Вы должны увидеть что-то:
ⓘ Building hello/hello.gpr...
Compile
[Ada] hello.adb
Bind
[gprbind] hello.bexch
[Ada] hello.ali
Link
[link] hello.adb
Build finished successfully in 0.14 seconds.
Hello, World!

6. Если что-то пошло не так -- а под MacOS с этим может быть связано что-то с X Code, то нужно добиться, чтобы у вас корректно заработал xcode, в том числе CommandLineTools, а потом вернуться к Ada. Суть в том, что GNAT, который настроен на использование GCC, может испытывать проблемы при использовании clang, который мимикрирует под gcc под MacOS. Не буду пересказывать документацию, в интернете много рекомендаций как обновить все до актуальной версии, рекомендую начать с этого.

7. Если у вас всё заработало, то дальше следует выполнить поучительные эксперименты. Во-первых, следует запустить команду [$alr exec -- gprconfig], и после короткого диалога посмотреть на сгенерированный файл default.cgpr, который визуализирует все настройки по-умолчанию. Его имеет смысл удалить, сгенерировать всегда сможете. Во-вторых, следует запустить [$alr] без аргументов, и ознакомиться с выводом, возможно, запросить [$alr help ....] по интересным командам.

Если всё работает, можно двигаться дальше: добро пожаловать на бесплатный обучающий курс Ada https://learn.adacore.com/courses/intro-to-ada/index.html. И теперь примеры из него можно будет компилировать не только в браузере, но и локально.

А документация на Alire тут: https://alire.ada.dev/docs/
Когда некоторое время назад я прочитал о методе ведения заметок Zettelkasten (ZK), то попробовал вести свои заметки, как описано в нём. Ничего не получалось, никакой пользы от этого я не увидел. Раз не видно никакой пользы -- я быстро оставлял попытки, хоть и начинал несколько раз.
 
Проблема оказалась не в методе ZK, проблема оказалась в том, что "продают" под этим названием. "Копи-переврайтерам" очень нравятся абстрактные темы, которые можно раскачать до нескольких тысяч знаков, поэтому весь интернет заполнен фантазиями на тему ZK. В самом деле, никакой новости нет в том, что куда-то можно откладывать карточки с информацией, ставить на них гиперссылки. Многие так или иначе собирают заметки, это не спасает от того, чтобы заметки в конце концов превратились в свалку.
 
Так продолжалось, пока я не нашел в интернете оригинальные описания, и не смог сопоставить, в чем же состоит метод. В ZK важны некоторые детали, но они не описаны даже в Wiki. ZK называют "системой", но как раз система там не возникает. Ниже я расскажу, как стал вести заметки я, и прокомментирую эти важные детали.
 
0. Я много лет использую MS OneNote, так что и карточки ZK стал вести в нем. Из минусов -- он не умеет проставлять обратные ссылки сам. Но я пока не особо увидел пользы от обратных ссылок, возможно, они не так и полезны. Слышал, что кто-то использует Notion или Obsidian, сравнить не могу, я не использовал других инструментов.
 
Теперь к самим деталям тезисно.
 
1. Первая и самая главная деталь, о чем в интернете не пишут: у вас непременно должен быть "отстойник" записок. Я называю его у себя исчезающие заметки. Туда я скидываю все, что хочу впоследствие развить и отработать. Я не добавляю туда ссылок, не пишу анализ, никак не оформляю, и так далее. Единственная цель отстойника -- снять информацию "вотпрямща". В течение недели я пишу и копипащу туда сырые мысли, не глядя на остальные карточки вовсе, это write-only хранилище. За неделю накапливается 10-50 заметок.
 
2. Раз в неделю, регулярно примерно в одно и то же время, я сажусь за разбор этих заметок. Понятно, почему они исчезают -- я одну за одной разбираю заметки, ищу дополнительную информацию в интернете и у себя в предыдущих карточках, раздумываю, часто переписывая своими словами то, что было зафиксировано, добавляю выводы, если могу. Нет цели превратить заметку в карточку как есть, поэтому часто несколько исчезающих заметок превращаются в одну карточку со связанными тезисами, либо одна, наоборот, разделяется, на несколько карточек. Как именно заводятся карточки, я опишу далее. Какие-то заметки я просто выбрасываю.
 
Вот так эти карточки исчезают из "отстойника", что и дало им название.
 
Пункты 1 и 2 здесь самые важные  -- это то, что помогает организовать процесс, систему ведения заметок, а не систему заметок.
 
3. По итогам разбора заметок создаётся карточка (а то и не одна), она и отправляется в ZK. Вот именно здесь и наступает самая ценная стадия осмысления, категоризации, работы с источниками и знаниями, добавление связей с другими мыслями.
 
Теперь напишу про категории и то, как это должно работать. Это будет уже техника, её в интернете и обсуждают, в основном.
 
3а. В интернете пишут про теги. Оригинальный ZK для этого использовал специальные "индексные карточки" -- это карточки-оглавления, куда добавлялись номера всех карточек,  касающихся той или иной темой. Карточки-оглавления по темам я веду, но никакие ссылки туда не добавляю, только ключевые слова -- если у вас есть полнотекстовый поиск, а не ящик бумажных карточек (а он в MS OneNote есть), то теги становятся излишними.
3б. В интернете яростно спорят про какую-то хитрую нумерацию карточек через косую черту. В оригинальном ZK в качестве категории было только одно -- то число, с которого начинается номер карточки. Скажем, 1000 означает материалы о бессмертии, а 200, скажем, о пятнах на Юпитере. Дальнейшая нумерация (например, "200/1а/2") в оригинальном ZK никак не связана с категориями, автор просто брал первый попавшийся свободный номер, за исключением того, что буква рядом с номером означает продолжение мысли, если оно вдруг нашлось. Я так не стал использовать буквы, так как в MS OneNote всегда можно отредактировать карточку, явно выделив перечеркнутым шрифтом то, что устарено, и дописав в конце новое. Лично вы можете делать как угодно.
 
3в. В интернете пишут, мол, карточка должна ссылаться на другие карточки, но как именно? Многие добавляют прямо в конце список ссылок на другие карточки (а в тех -- обратные ссылки), я делаю иначе -- просто выделяю слово и делаю его ссылкой, автор ZK примерно так и делал, для этого ему и нужны были точные номера. Так же автор ZK настойчиво рекомендовал рядом со ссылкой пояснить письменно, почему была добавлена та или иная ссылка. Тут помогает MS OneNote своими возможностями -- можно и дописать карточку, и ссылку встроить, и побродить поиском по существующим карточкам в процессе написания очередной карты, и картинку добавить.
 
Вот, собственно, и всё, что превращает записи в систему. Этот пост я тоже оформлю как карточку.
 
Надеюсь, тон заметки вышел не слишком поучающим. Пользуйтесь, и удачи вам в создании собственного экзокортекса.
Об рынок софтвера

Наблюдать за рынком ПО необычайно интересно. Сначала софт писали в НИИ и на предприятиях под заказ, и распространяли промеж своих контактов.

Так продолжалось до середины девяностых, после чего продажи сломались, и стратегия поменялась. Теперь, чтобы продать ПО, нужно было оформить софт в коробку, звонить, оставлять контакты, заинтересовывать, публиковаться в журналах и каталогах.

Так продолжалось до начала нулевых, после чего продажи сломались, всем надоело искать знакомых. Теперь, чтобы продавать софт, нужно было создать сайт, опубликовать там свой shareware, и разработать механику лицензирования ПО.

Так продолжалось до середины нулевых, после чего продажи сломались, всем надоели коробки. Теперь, чтобы продавать софт, нужно было понять, кто твой клиент, собрать коробку под него, и целенаправленно долбиться в ЛПР.

Так продолжалось до конца нулевых, после чего продажи сломались, всем надоел оффлайн. Теперь, чтобы продавать софт, нужно было опубликовать его как сервис, выискивать в потоке людей тех, кому он мог бы подойти, научиться развивать клиента и завлекать его в много касаний на свой сервис.

Так продолжалось до начала десятых, после чего продажи сломались, всем надоело "развивать клиента". Теперь, чтобы продавать софт, надо было отыгрывать миллионы гипотез о полезных функциях софта, а зацепившись об позитивный отклик, строить софт вокруг этой функции (разумеется, онлайн).

Так продолжалось до конца десятых, после чего продажи сломались, всем надоел lean startup, бесконечное участие в роли подопытного в а/б тестах. Теперь, чтобы продавать софт, нужно [ВЫ НАХОДИТЕСЬ ЗДЕСЬ].

Что дальше сломается, и как это исправить, мы узнаем лет через пять.
Об Аду снова

Продолжим серию? В прошлый раз мы с вами освоили азы, как настроить инструменты и скомпилировать простейший "хелловорлд". На компьютере должны были появиться Alire c нативным тулкитом и VS Code с настроенными для Ады плагинами. Всё это нам понадобится.
 
Сегодня мы пойдем в embedded и попробуем скомпилировать Аду для baremetal платы на базе STM32, на мой взгляд, именно тут Ада сильна.
 
Что нам для этого нам понадобится, я напишу ниже.
 
* Нужно раздобыть плату STM32. Я буду работать с STM32 DISCOVERY на базе камня F407 с частотой 168MHz, чего и вам рекомендую, хотя и не заставляю. На плате распаяно много чего, но нам интересно, что на ней на самом деле стоит 2 чипа  STM32, второй при этом прикидывается программатором ST-LINK, flash-диском, а также USB-2-Serial конвертором и еще много чем. Это СИЛЬНО упрощает знакомство с темой, усложнить всегда успеется.
* Провод x-2-minuUSB (!) - это тот конец, который соединяется с программатором.
* Нужно внимательно почитать т.н. GNAT Supplement for Cross platform крайней версии, раздел Bareboards: https://docs.adacore.com/live/wave/gnat_ugx/pdf/gnat_ugx/gnat_ugx.pdf
* Нужно установить софт-отладчик OpenOCD, это замена проприетарных тулов для работы с ST-LINK. Я ставил через brew, у меня всё получилось. Вот вроде бы и всё, можно работать.
 
Пусть наш новый проект называется "disco1".
 
1. Итак, первым шагом надо научить GNAT компилировать под ARM. Для этого надо запустить alr вот таким образом: alr toolchain --select, и в списке выбрать что-то типа "6. gnat_arm_elf=12.2.1". GPRBuild оставляем самым свежим.
 
2. Далее нужно выполнить alr init --bin disco1, после чего перейти в свежую папку disco1. Alire сгенерировал нам новый проект, спасибо ему. Но он пока не знает, что мы хотим компилировать под ARM на голом железе, надо его научить. Нужно открыть файл disco1.gpr и добавить туда такие строки (про целевую архитектуру и рантайм):
for Target use "arm-eabi";
for Runtime ("Ada") use "light-tasking-stm32f4";

 
3. Alire сгенерировал нам пустой проект. Откроем основной файл disco1.adb и заменим текст на такой вот незамысловатый привет:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
procedure Disco1 is
begin
   loop
      Put_Line ("Hello");
      delay until Clock + Milliseconds (1000);
   end loop;
end Disco1;
 
Закроем файл и запустим alr build. Немного пошуршав, он оставит нам в папке bin elf-файлик. Теперь нам нужно получить из него прошивку.
 
4. Воспользуемся инструментами, которые принес нам Alire, и дадим такую команду:
alr -v exec  -- arm-eabi-objcopy -O binary --strip-all bin/disco1 bin/firmware
В папке bin появится файл firmware, который хоть сейчас шей! Было бы куда..
 
5. Достаем плату и подключаем её к USB, компьютер должен её опознать. Как именно это делать, посмотрите в вашей ОС, что-то типа lsusb или IOReg, факт в том, что нужно увидеть что-то похожее на STMicroelectronics, подключенное к компьютеру -- это победа
 
6. Если всё сделано правильно, у вас в системе появится флеш-диск с названием ST_F407 или что-то похожее. Там не должно быть файлов с именем Fail. Если всё ок, то нужно просто скопировать на этот "диск" файл прошивки firmware, полученный на 4-м шаге. Программатор увидит это, прошьет его в процессор, и перезапустит, флеш-диск перемонтируется и прошивка с него пропадет. Рекомендую переткнуть провод USB на этом моменте.
 
7. Теперь подключимся к программе. Надо выполнить: openocd -f board/stm32f4discovery.cfg -c "init; arm semihosting enable"
Тут обратите внимание на 2 важные вещи:
• OpenOCD знает про плату DISCOVERY, что упрощает жизнь еще немного
• После инициализации надо выполнить команду запуска semihosting; это хитрые регистры процессора STM32, которые позволяют обмениваться с программой данными без того, чтобы настраивать UART или другую периферию. В чем плюс? Наш рантайм Ады заворачивает стандартный ввод-вывод на эти регистры, а OpenOCD умеет их читать.
Извращенцы могут подсоединиться gdb на порт 3333 для удаленной отладки, а мы не будем, а просто понаблюдаем окно. Если всё сделано правильно, то лампочки замигают, а мы увидим, что каждую секунду туда валится текст Hello:
 
Info : Listening on port 3333 for gdb connections
semihosting is enabled
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : device id = 0x100f6413
Info : flash size = 1024 kbytes
Info : flash size = 512 bytes
Hello
Hello
Hello
Hello
Hello
Hello
Hello
..
 
Поздравляю, у вас всё получилось. Если нет, пишите в комментарии, будем разбираться.
 
Ниже я положу архив с более продвинутой программой, в ней будет 2 параллельно работающих задачи, одна будет просыпаться и выводить текст, а вторая - модифицировать данные для этого текста. Обратите внимание, как просто написать на Аде многопоточную программу с честным планировщиком задач для голого микроконтроллера, не задумываясь о RTOS и прочих таких вещах.
Об Аду на контроллере и загрузку в память
 
Кто-то, проделав упражнения из предыдущего поста, мог втянуться в разработку и отладку. И первое, с чем вы столкнетесь при отладке - с тем, что после пересборки прошивки необходимо еще записать её на flash. Но, во-первых, с ростом размера прошивки это замедляется, во-вторых, flash изнашивается. На помощь приходит возможность ядра Cortex M4 исполнять код прямо из встроенной в чип static RAM (1). Особенность данного ядра в том, что адресное пространство SRAM находится не там же, где ROM, поэтому линковать программу надо по другому адресу.
 
Правда, при выключении платы программа пропадет, но во время отладки нас такое устраивает, главное, не сбрасывать питание. Кроме этого, процессор сам не сможет загрузиться, поэтому после пуска надо будет его тормозить, и загружать отладчиком в него программу.
 
ПРИЕМЛЕМО.
 
1. Итак, первое, что надо сделать, это собрать программу с поддержкой запуска из SRAM. Для этого достаточно передать ключ вот так:
 
alr build -XLOADER=RAM
 
Линкер выдаст предупреждение, что обнаружил секцию данных, которая содержит исполнимый код; игнорируем. А вот bin мы готовить не будем, грузить будем прямо из elf-файла, он уже содержит всю информацию о правильных адресах.
 
2. На борту у stm32-discovery 1Мб Flash и всего 192кб SRAM, из неё часть придется потратить под программу, поэтому нужно ещё и следить за оптимизацией кода, и за тем, чтобы не случилось переполнения памяти. Мы собираемся оптимизировать код, а также посмотреть, что там с запасом по памяти. Для этого надо немного доработать файл disco1.gpr следующим образом:
 
package Linker is
   for Default_Switches ("Ada") use (
      "-Wl,--gc-sections",
      "-Wl,--print-memory-usage");
end Linker;

 
Теперь, если собрать приложение командой выше, мы увидим следующий текст:
Memory region         Used Size  Region Size  %age Used
           flash:                  0 GB         1 MB         0.00%
          sram12:          25272 B       128 KB     19.28%
             ccm:                   0 GB        64 KB         0.00%

Обратите внимание, теперь мы не будем перетирать флэш каждый раз (flash used = 0)
 
3. Теперь запустим наш OpenOCD так же, как мы делали раньше, но сбросим и остановим процессор:
openocd -f board/stm32f4discovery.cfg -c "init; reset halt; arm semihosting enable;"
 
4. Как я и говорил, грузить будем дебаггером. Для этого в соседней консоли запустим вот какую команду.
alr exec -- arm-eabi-gdb bin/disco1 -ex 'target extended-remote localhost:3333' -ex 'load'
 
Отладчик загрузит прошивку, остановится на первой команде. В этой консоли надо набрать команду "cont", и переключиться на консоль OpenOCD. Если всё сделано верно, можно увидеть сообщения от исполняющейся программы, как и в предыдущей серии.
 
--
 
Итого, теперь при перекомпиляции и заливке flash-память мы не будем трогать, код будет работать из встроенной RAM кристалла. А когда понадобится опять подготовить прошивку для flash, нужно будет указать ключ -XLOADER=ROM или удалить его вовсе из строки.
 
(1) То, что исполнение из SRAM может быть медленнее, чем из Flash, удивительно для десктопа, но вполне нормально для некоторых чипов с эффективной подкачкой кода.
2024/04/27 17:08:43
Back to Top
HTML Embed Code:


Fatal error: Uncaught Error: Call to undefined function pop() in /var/www/tgoop/chat.php:243 Stack trace: #0 /var/www/tgoop/route.php(43): include_once() #1 {main} thrown in /var/www/tgoop/chat.php on line 243