32bit_me: (Default)
Прочитал руководство "UM1734 User manual STM32Cube USB device library", 59 стр., англ. язык.
32bit_me: (Default)
Прочитал руководство "How to Use WinUSB to Communicate with a USB Device", 24 стр., англ. язык.
Краткое введение в использование универсального драйвера WinUSB.
32bit_me: (Default)
Прочитал статью Н. Баландин, А. Крапивный "Отладка приложений и настройка параметров конфигурации операционной системы реального времени RTEMS", 6 стр.
В статье описываются некоторые специфические особенности ОСРВ RTEMS.
32bit_me: (Default)
Прочитал интересный материал: Pooja Gupta "LLVM Backend Development for ReISC Architecture", 52 стр., англ. язык.

Это не книга и не статья, это магистерская работа студентки из университета Дели. В небольшом объёме изложены ключевые моменты работы компилятора. Разумеется, то же самое можно прочитать в других местах, но для этого придётся читать много разных источников.
Как ясно из названия, описывается компилятор для архитектуры ReISC. Однако подробной информации по этой архитектуре нигде нет. Есть сведения, что это ядро фирмы STMicroelectronics для 32-битного low-end микроконтроллера со сверхнизким портеблением. Видимо, в производство оно не попало.

В конце работы автор приводит сравнение нескольких результатов компиляции, полученных с помощью LLVM и GCC. Разбираться в них детально я не стал, т.к. для этого надо подробно разбирать ассемблерные исходники со справочником по системе команд. К сожалению, в работе нет исходников (и даже фрагментов) самого бэкенда. А это было бы очень интересно почитать.

В целом, впечатляет, студенческая работа такого хорошего уровня. У нас 99% студентов и 95% специалистов с опытом работы в этой теме просто не разберутся. А девушка из Индии не только разобралась, но и написала хорошую работу на английском языке.

Для техже, кто хочет разобраться в работе компилятора, знающие люди рекомендуют бэкенд LANai. Тоже загадочное ядро, упоминаний про него почти нет. Вроде бы, оно разработано компанией Google для своих внутренних нужд, архитектура основана на книге [1]. Какой-то документации найти не удалось. Тем не менее, компилятор доступен в исходниках, и, говорят, очень несложен и хорош для изучения.

[1]. David E. Culler, Anoop Gupta, and Jaswinder Pal Singh. 1997. Parallel Computer Architecture: A Hardware/Software Approach (1st ed.). Morgan Kaufmann Publishers Inc., San Francisco, CA, USA.
32bit_me: (Default)
 С целью удобства сделал список публикаций на хабре:
 
 
Мои публикации на хабре/ГТ:
Программирование/компиляторы:
LLVM: компилятор своими руками. Введение
Как приручить дракона. Краткий пример на clang-c
Электроника и контроллеры:
Аналого-цифровое преобразование для начинающих
Подключение цветного LCD с сенсорным экраном к микроконтроллеру
Мобильный телефон своими руками. Часть 1
Мобильный телефон своими руками. Часть 2
Siemens Logo! — десять лет спустя
Начинаем работать в STM32CubeMX. Часть 1
Начинаем работать в STM32CubeMX. Часть 2
Ретрокомпьютеры:
Ноутбук Tandy TRS-80 model 200
Персональная электронная вычислительная машина «Апогей БК-01»
Персональный компьютер «Электроника МК-85»
Разное:
Raspberry Pi и Синяя Изолента
Внешняя USB-видеокарта Startech USB2DVIE3
Ремонт мыши Logitech MX Air
Обзор USB-осциллографа Hantek DSO-6022BL с логическим анализатором и гикпорном
32bit_me: (Default)
Прочитал руководство "Getting Started with RTEMS", 26 стр., англ. язык.



Руководство посвящено установке тулчейна и сборке операционной системы RTEMS.
 
32bit_me: (Default)
Прочитал книгу "Язык программирования Rust", 340 стр., русск. язык.



Книга является переводом на русский язык официального учебника по Rust.
Итак:
- Rust - компилируемый язык, без всяких виртуальных машин и прочего. 
- Rust строго следит за безопасным использованием данных, причем весь контроль производится во время компиляции и не приводит к накладным расходам при выполнении программы.
- многопоточность есть, и реализуется через вызовы ОС, а не как в Go.
- нет полноценного ООП, но есть некоторые элементы ООП
- есть лямбды
- есть возможность вызова функций С и из С.
- реализован как фронтенд к LLVM, то есть можно прикрутить к чему угодно, к любой аппаратной платформе
- можно делать свои расширения синтаксиса (в виде плагинов к компилятору)

В целом понравилось гораздо больше, чем Go. Однако пока что заниматься этим серьёзно нет ни времени, ни желания. Я лично считаю, что классические языки, такие, как С и С++, переживут большую часть новомодных хипстерских языков.


32bit_me: (Default)
 Прочитал книгу  Дж. Макконнелл "Основы современных алгоритмов", 368 стр., русск. язык.



Классический учебник по алгоритмам, но без больших и сложных доказательств. Основной упор сделан на рассмотрении самих алгоритмов, а не на математических выкладках. Рассматриваются как основные классические алгоритмы (сортировка, поиск, алгоритмы на графах и т..п.), так и параллельные алгоритмы.

32bit_me: (Default)
Прочитал  Karl Seguin "The Little Go Book", 84 стр., англ. язык.

Как-то не понял, почему такие восторги от этого языка. Что-то типа С, только со сборкой мусора и потоками. Для встраиваемых систем такое очевидно не подходит, потому что нужно реальное время, а сборка мусора и реальное время исключают друг друга.
Потоки тоже реализованы как-то через свои библиотеки, а не через вызовы ОС. С одной стороны, пишут, что при этом накладные расходы на создание потока очень малы, и можно запустить, например, миллион потоков. С другой стороны, если они запускаются без участия ОС, то как осуществляется их планирование? И тогда же не будут использоваться все ядра процессора, а только одно.
Мне кажется, что интересно будет посмотреть, как устроен этот механизм многопоточности.
В остальном язык не показался мне интересным, я не вижу причин его использовать в данный момент. 
32bit_me: (Default)
 Статья Krste Asanović и др. "The Rocket Chip Generator", 9 стр., англ. язык.
Описывается генератор ядер процессора RISC V на языке Chisel.




Статья обзорная, никаких конкретных руководств по работе с Rocket Chip в ней нет. Тем не менее, описываются возможности системы. В частности, можно генерировать базовые подсистемы (I, A, M, D. F), сокращённый и сжатый варианты, E и C, системы с MMU и без MMU, с выполнением команд in-order и out-of-order. Например, простое ядро без MMU имеет всего три стадии конвейера, а с MMU - пять стадий.
32bit_me: (Default)
Прочитал статью Howard Mao "Hardware Acceleration for Memory to Memory Copies", 27 стр.англ. язык.



Это тот самый Howard Mao, по статьям из блога которого я изучал SoC Cyclone V. Но эта статья не про Cyclone V, а про RISC V. В статье рассматривается расширение системы команд RISC V для операций копирования и перемещения участков памяти в процессоре с виртуализацией памяти. Указывается, что перемещение памяти в таких системах можно (в ряде случаев) осуществлять заменой записей в TLB, без физического копирования данных, а копирование можно делать с помощью специального узла Tile Link Memory Interface. От обычного DMA он отличается тем, что работает с адресами виртуальной памяти, а не с физическими адресами, и следовательно, может вызываться напрямую из user-space.
Понятно, что на задачах копирования памяти выигрыш по скорости составляет разы, кроме только самых маленьких блоков памяти (за счет дополнительных накладных расходов), а тест Dhrystone должен вообще сильно ускориться (но это уже мои догадки, авторы этот тест не проводили).
32bit_me: (Default)
Прочитал версию 2.1 руководства по системе команд Risc V, в той части, в которой она отличается от 2.0.
Есть интересные моменты:
1) есть версия Е, с количеством регистров, уменьшенным до 16, и
2) есть версия С (compressed), с 16-битными командами, но при этом накладываются дополнительные ограничения на использование регистров.
Эти варианты могут сильно уменьшить как площадь самого ядра, так и (в варианте С), размер исполняемого кода.
Также есть (пока не разработанные) планы по введению новых расширений системы команд, таких, как поддержка десятичных чисел с плавающей точкой.
32bit_me: (Default)
Прочитал руководство A. Waterman и др. "The RISC-V Instruction Set Manual Volume II: Privileged Architecture Version 1.9.1", 89 стр., англ. язык.



Руководство описывает подсистемы привилегий, виртуализации памяти и прерываний процессора Risc V. Во многих аспектах этот процессор отличается от ARMv7 и ARMv8. Описанные уровни добавляют немного команд, и довольно много регистров к описанному в первой части базовому ядру. Но отличительной чертой RISC V является гибкость реализации, и большая часть всех этих расширений необязательна для реализации, и может не присутствовать, в зависимости от результата, который мы хотим получить. Так, если мы хотим сделать ядро без многозадачности, без виртуализации памяти. то нам вообще все эти механизмы не нужны, нужен только контроллер прерываний.
Всего архитектура RISC V может содержать до 4-х уровней привилегий: User, Supervisor, Hypervisor, Machine. При этом: User - уровень прикладной задачи, Supervisor - уровень ОС, Hypervisor - уровень виртуальных машин, Machine - уровень полных привилегий. Опять же, можно не делать все уровни, оставить только User и Machine, например.
32bit_me: (Default)
Прочитал руководство "The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Version 2.0" по системе команд ядра Risc-V.



Итак, Risc V - это сравнительно новая архитектура процессорного ядра, которая может (в перспективе) заменить ARM (или хотя бы занять заметное место на рынке встраиваемых процессоров). Отличия Risc V от конкуретов - открытость и расширяемость. Система команд (ISA) открыта и описана, любой может сделать своё ядро, реализующее эту стстему команд. Система команд состоит из некоторого небольшого базового набора, стандартных расширений, и плюс к ним любой производитель/разработчик может добавлять свои раширения для своих узких задач.
Разрядность также может варьироваться (от 32 до 128 в текущей версии ISA), разрядность FPU (который также является необязательным расширением), также может варьироваться от 32 до 128.
Стандарт описывает базовую систему целочисленных команд (обозначаемую как I), стандартные расширения: расширение умножения/деления (M), расширение атомарных операций (А), расширение 32-битных вещественных чисел (F), расширение 64-битных вещественных чисел (D). Этот набор (IMAFD) образует ядро процессора общего назначения, которое может дополняться и другими расширениями, описанными в руководстве, или собственными расширениями производителя.
Минимально необходимое подмножество команд (I) мало и достаточно просто в реализации на HDL-языке. С его помощью можно программно реализовать все остальные команды, кроме набора А (атомарные операции), но набор А нужен только для многозадачных/многопоточных систем, если многопоточность не нужна, то можно обойтись без него.
Такой набор команд можно реализовать, например, на Verilog-е, что будет полезно для изучающих этот язык.
32bit_me: (Default)
Прочитал ARM Application Note 273 "Dhrystone Benchmarking for ARM Cortex Processors ", 12 стр. англ. язык.
Руководство описывает метод измерения производительности ядра процессора с помощью теста Dhrystone.


Разумеется, аналогичным способом может быть измерена производительность не только процессора с ядром ARM, но и процессора с другой архитектурой, работающего как под управлением операционной системы, так и в bare-metal режиме.
Также посмотрел исходный текст Dhrystone. Единственное, что вызывает опасения, это то, что оптимизатор может удалить из него много всего, что повлияет на результат. Надо будет попробовать скомпилировать и посмотреть код на выходе.
32bit_me: (Default)
Прочитал ГОСТ Р МЭК 61508-3 "Функциональная безопасность систем электрических, электронных, программируемых электронных, связанных с безопасностью. Часть 3. Требования к программному обеспечению". 97 стр., русск. язык.


Стандарт является переводом на русский язык междунарожного стандарта IEC 61508-3, и описывает требования к программному обеспечению для различных уровней полноты безопасности.
32bit_me: (Default)
Прочитал руководство Altera AN709 "HPS SoC Boot Guide - Cyclone V SoC Development Kit", описывающее процесс загрузки ОС в память и инициализацию встроенного процессора ARM9.
30 стр., англ. язык.

32bit_me: (Default)
Написал статью для хабра, по clang-c API: https://habrahabr.ru/post/320074/

Как всегда, не стесняйтесь заходить, комментировать, ставить плюсики.
32bit_me: (Default)
Прочитал William von Hagen "The Definitive Guide to GCC. Second Edition" 550 стр., англ. язык.



В книге изложены все аспекты практической работы с GCC, опции компиляции, расширения языков C и C++, и т.п.
32bit_me: (Default)
При установке DS-5 и Quartus под Linux могут возникнуть некоторые проблемы.



Read more... )

Profile

32bit_me: (Default)
32bit_me

April 2017

S M T W T F S
      1
2 34 5678
9101112 1314 15
16171819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 27th, 2017 04:30 pm
Powered by Dreamwidth Studios