LINUX.ORG.RU

Избранные сообщения Kosyak

Rust и создание больших массивов

Форум — Development

Вот этот очень простой код потенциально легко вызовет stack overflow (если нет, то надо просто увеличить 16777216), хотя не должен (мы ведь на самом деле выделяем место в куче в итоге).

#[derive(Copy, Clone)]
pub struct Item {
    a: i32,
    b: i32
}

pub struct Items {
    items: [Item; 16777216]
}

impl Items {
    pub fn new() -> Items {
        Items {
            items: [Item { a: 0, b: 1 }; 16777216]
        }
    }
}

fn foo() -> Box<Items> {
    Box::new(Items::new())
}

Пруф: https://rust.godbolt.org/z/8sWsoKojx

Для Ъ: Массив сначала создаётся на стеке, а только потом выделяется память и происходит memcpy в кучу. Максимальные оптимизации не спасут.

К тому же не забываем про оверхед копирования. Я готов поверить разработчикам Rust, что копирование при создании структур из нескольких сотен байт не создаст заметной просадки, но я верю, что пример выше будет статистически значимо работать медленнее уже на нескольких тысячах элементов, а не обязательно 16 миллионов.

Как принято создавать в Rust такие массивы? unsafe или есть решения получше?

Мне нравится Rust последнее время, сколько я к нему присматриваюсь, но вот такая очевидная мелочь как copy elision не предусмотрена для типа системного языка... Или я просто всё делаю не так и Items::new надо писать как-то иначе?

 ,

KivApple
()

mcu-info-util

Форум — Talks

Как уже я здесь немного говорил, я разрабатываю архиполезную (на мой взгляд) утилиту mcu-info-util. Она OpenSource, написана на Python и нативно работает под Linux.

Данная утилита нужна только тем, кто занимается разработкой прошивок для микроконтроллеров. Если вы этим не занимаетесь в качестве работы или хобби, то вам данный проект интересен не будет. mcu-info-util умеет следующее:

  • Находить компиляторы avr-gcc и arm-none-eabi (актуально для Windows, утилита ищет в реестре некоторые ключи, которые туда пишут установщики соответствующих тулчайнов, также производится поиск в PATH, для Linux только поиск PATH).
  • Подсказывать ключи, которые нужно передать компилятору и линковщику, чтобы успешно скомпилировать проект под целевой микроконтроллер (и если для AVR это всего лишь -mmcu=..., то для ARM всевозможные указания версии cortex, наличия модуля аппаратной математики и т. д.).
  • Генерировать скрипт линковки для ARM. Больше не нужно писать свой скрипт или искать готовый - достаточно названия микроконтроллера (например, STM32F103C8T6) и утилита создаст подходящий скрипт линковки.
  • Генерировать заголовочный файл с описанием регистров периферии выбранного микроконтроллера (в настоящий момент только для ARM, используется информация из файлов SVD, включённых в комплект поставки). Не нужно при использовании libopencm3 или CMSIS, но никто и не заставляет использовать.

Например, мы хотим собрать прошивку под микроконтроллер STM32F103C8T6:

$ mcu-info-util --mcu stm32f103c8t6 --find-compiler
/usr/bin/arm-none-eabi-gcc
$ mcu-info-util --mcu stm32f103c8t6 --print-flags
-D_ROM=65536 -D_RAM=20480 -D_ROM_OFF=0x08000000 -D_RAM_OFF=0x20000000 -mcpu=cortex-m3 -mthumb -DSTM32F1 -msoft-float
$ mcu-info-util --mcu stm32f103c8t6 --linker-script script.ld
$ mcu-info-util --mcu stm32f103c8t6 --header mcudefs.h

Разумеется, было бы разумно использовать mcu-info-util не самостоятельно, а внутри скриптов сборки. На этот случай я приготовил пару примеров - для make и для cmake в каталоге misc репозитория проекта.

Таким образом Makefile проекта может выглядеть как-то так (разумеется, проект будет поддерживать инкрементальную компиляцию с отслеживанием зависимостей исходных файлов) - https://github.com/KivApple/mcu-info-util/blob/master/misc/makefile-project/M...

А проект CMake как-то так - https://github.com/KivApple/mcu-info-util/blob/master/misc/cmake-project/CMak....

Выбор используемого микроконтроллера осуществляется всего лишь одной переменной - MCU. Скрипты произведут серию обращений к mcu-info-util, в итоге будет найден (если установлен) необходимый компилятор, флаги компиляции и при необходимости сгенерирован скрипт линковщика и заголовочный файл с описаниями регистров.

Согласитесь, это гораздо удобнее хардкода размеров ОЗУ и ПЗУ, путей к компилятору (в настройках IDE) и т. д. Функционал подобного уровня (выбор МК по названию и автонастройка проекта под него) предоставляют лишь коммерческие IDE, а моё решение не имеет каких-либо привязок. Вы можете использовать в своём проекте любые библиотеки (скажем, подключить исходники какой-нибудь RTOS), писать код в любой IDE (нужна лишь поддержка Makefile или CMake, либо возможность скриптовать систему сборки и прямые руки), данная утилита лишь берёт на себя необходимую рутину по выбору необходимого компилятора и флагов компиляции без которых проект банально не заработает.

В настоящий момент имеется поддержка только микроконтроллеров STM32 и AVR (также теоретически может нормально заработать для ARM от Atmel).

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

 ,

KivApple
()

Самоучитель для игры на акустической гитаре.

Форум — Talks

Захотелось осилить гитару для себя. К сожалению, а может и к счастью, с преподом заниматься нет возможности, т.к. график у меня скачет и невозможно назначить перманентное время занятий. Некоторые советуют начинать задрачивать брынчание аккордов, мол этого будет достаточно, но мне бы хотелось осилить интсрумент на более серьёзном уровне - знать нотную грамоту и т.д.

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

Спасибо ☺

 , , , ,

ubik
()

Нищербродской портативной аудиофилии тред

Форум — Talks

Хочу взять себе Sennheiser px100 или px200. Или что-то с приставкой -ll. Говорят, что во второй ревизии сих девайсов в них начали ставить мембраны другого производителя и качество звука упало. Собственно поэтому ищутся варианты первой ревизии. Где их можно послушать?

Еще нужен относительно недорогой и хороший источник. Слушаться будут флаки с флешлки. Рассматриваю сансу с рокбоксом, может что-то еще. В соседнем треде хвалят ковоны - чем они так хороши? Как по мне в плеере не должно быть лишнего функционала.

Лор, что посоветуешь? Ищутся именно накладные, затычки и вкладыши НЕ рассматриваем. Можно даже открытые накладные.

 ,

smilessss
()

google code всё

Форум — Talks

http://www.opennet.ru/opennews/art.shtml?num=41829

Компания Google сообщила о сворачивании третьего по величине хостинга открытых проектов - Google Code. С завтрашнего дня добавление в Google Code новых проектов станет невозможным. С 24 августа будет прекращена возможность внесения изменений и инфраструктура будет переведена в режим только для чтения. 26 января будет отключен сервис хостинга проектов, но оставлена возможность загрузки tar-архивов с кодом, обсуждениями проблем и wiki-страницами. В конце 2016 года доступ к архивам будет закрыт.

В последние годы большое число проектов, в том числе около тысячи собственных проектов Google, перешли с Google Code на GitHub. С другой стороны отток пользователей сопровождал рост попыток нецелевого использования сервиса для распространения незаконного контента и спама. В итоге, последнее время вся административная работа сводится к обработке жалоб на размещение проблемного контента. Проанализировав статистику целевого использования Google Code для разработки, компания пришла к выводу, что после почти десяти лет существования сервис исчерпал себя и больше не востребован разработчиками. Предлагаемая проектом GitHub модель размещения кода и совместной работы оказались наиболее жизнеспособной.

интересно, а когда откинет коньки гитхаб, что будет дальше?

https://news.ycombinator.com/item?id=9191587 — объявился гугловец и отвечает на вопросы по поводу гуглокода

 , , ,

nagibator
()

ноутбук и smbus/i2c/spi/uart

Форум — Talks

Из всех интерфейсов для подключения внешних устройств, уже остался один только usb. И если кому нужно что-то другое, типа i2c, или uart, или еще что, то приходится брать переходник usb-это что-то. Но как несложно обнаружить, на самой материнской плате вполне себе современные шины i2c/smbus/spi активно используются.

Но хоть бы кто вывел их на внешний разъем!

 

cvs-255
()

Дайте посмпотреть на ваш lspci

Форум — Talks
 lspci | grep VGA 

Спасибо.

 , , ,

Dron
()