promo eddy_em август 17, 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
Костерок

Разница цена - качество

Берем две microSD-флешки на 32ГБ (обе брал 21 декабря прошлого года): эту (класс U3, брал за 10 баксов, получил 9 января) и эту (класс U1, брал за 4 бакса, пришла сегодня).
Проверяем. Первый тест — без файловой системы. Пишем так:
dd if=/dev/zero of=/dev/sdc bs=64k count=16384

читаем так:
dd of=/dev/null if=/dev/sdc bs=64k count=16384

(первую, правда, я кусками по 4ГБ тестировал). В итоге получилось, что "сырые" запись и чтение у первой — 27МБ/с и туда, и обратно; у второй — 187с на запись и 60с на чтение (т.е. пишет 5.5МБ/с, читает 17МБ/с).
Дальше создаем там единственный раздел, форматируем его в vfat (к сожалению, даже в 2020 веке подавляющее большинство железяк настолько тупы, что кроме vfat ничего не понимают! Хотя уже давно стоило бы их по крайней мере на ext2 перевести!!!), заходим в /media и монтируем раздел. Проверяем, сколько времени будет писаться гигабайтный файл (естественно, вместе со временем на сброс буферов):
time (dd if=/dev/zero of=vfat-sdc1/1GB bs=64k count=16384 && umount vfat-sdc1)

А потом проверяем, сколько времени он будет читаться:
dd if=vfat-sdc1/1GB  of=/dev/null bs=64k count=16384

У первой запись заняла 40 секунд (25.6МБ/с), чтение заняло 37 секунд (27.7МБ/с).
У второй запись заняла 154 секунды (6.6МБ/с), а чтение — 61 секунду (16.8МБ/с).
"Сырую" запись второй проверял дважды. Оба раза скорость ниже, чем запись на ФС. Не знаю, из-за чего такое может быть.

Вывод напоминает мораль сказки о попе и работнике его Балде: «Не гонялся бы ты, поп, за дешевизной!». Разница в цене в 2.5 раза дает разницу в скорости чтения в полтора раза, а записи — почти в четыре! Причем, я бы не сказал, что даже первая удовлетворила меня результатом скорости записи! Ведь получается, что небольшой фильм в 16ГБ (понятно, что флешку придется отформатировать в нормальную ФС) будет на нее писаться дольше десяти минут!!! Да, с торрентов он за полчаса скачивается, но локальную запись все же хотелось бы пошустрей.

И, кстати, как же задолбали эти гребаные маркетолухи, которые на флешках пишут 32ГБ! Реальный объем первой флешки — 29.7ГБ, а у второй еще меньше — 29.1ГБ. И куда деваются оставшиеся гигабайты? Не проходят тест ОТК???
P.S. Маркетолухи теперь даже в линуксе! Например, команда df -h нагло врет, показывая вместо нормальных килобайтов (где 1024 байта) какие-то десятичные... А еще где-то в GUI я встречал позорное "папка". Блин, ну что за детский сад? Папки с мамками у них...
Костерок

Вот что нужно сделать, чтобы на STM32 memset работал?

Аналогично с memmove. Вручную не задаю невыровненный размер → массив должен быть выровнен на 4. Но какого же черта memset и memmove приводят к hardfault'у?
Приходится городить свой огород с поэлементным копированием…
P.S. Кстати, сравнил сейчас два GPS-модуля: Quectel L80-R и Ublox NEO-6M. По цене они примерно одинаковы (правда, первый — SoC, распаиваемый на плату, а второй уже распаян, но на али готовые SoC стоят более-менее одинаково за десяток штук). И оказалось, что, несмотря на меньший размер антенны, Ublox намного шустрей находит спутники! Ему буквально 2-3 секунды нужно после включения GPS-ретранслятора, чтобы начать выдавать валидную информацию (Quectel это делает лишь минуту спустя). А после отключения питания ретранслятора он пару минут весело гнал PPS и показывал корректный вывод GPRMC!
Для наилучшего качества приема передатчик ретранслятора я положил рядом — на подножку монитора:
Костерок

Makefil'ы для release и debug

Ковыряясь с TODO, решил еще и Makefile немножко улучшить. С cmake я уже раньше подобное вытворял, но с Makefile пока как-то ручками (а то и иной раз вообще в начале makefile писал DEFS+=-DEBUG и комментировал эту строку для release).
Вот что получилось. Привожу основную выжимку:
# это пишем в начале, где определяем всякое разное, целью по умолчанию будет release
TARGET := RELEASE 
# здесь у меня всякий мусор хранится, чтобы некошерными файлами не заваливать основную директорию с кодом
OBJDIR = mk
# самой первой целью задаем умолчательную:
all: $(OBJDIR)/RELEASE  # в поддиректории mk создаем файл RELEASE или DEBUG в зависимости от модели сборки
all: bin list size
release: all # отдельно даем возможность писать не просто make, но и make release (хоть это и одно и то же)
# а теперь - для debug, здесь добавляем -DEBUG и -Werror
debug: CFLAGS += -DEBUG -Werror
debug: TARGET := DEBUG # меняем имя цели 
debug: $(OBJDIR)/DEBUG # и меняем зависимость от файла
debug: bin list size # писать здесь all нельзя, т.к. all зависит от $(OBJDIR)/RELEASE
# ну и объявим виртуально, что сами файлы mk/DEBUG и mk/RELEASE "создаются" при помощи make clean:
$(OBJDIR)/DEBUG:
    make clean
$(OBJDIR)/RELEASE:
    make clean
# ну и в цель - бинарник - добавляем создание нужных файлов:
$(BIN): $(ELF)
	@echo "TARGET: $(TARGET)"
	@> $(OBJDIR)/$(TARGET)


Все! Теперь покуда мы сидим в одной модели, правка отдельных файлов вызовет лишь их пересборку при соответствующих флагах. Как только модель поменяли, в mk/ не оказывается нужного файла, вызывается make clean, а затем новая модель сборки выполняется начисто! Вуаля!
Collapse )
  • Tags
Костерок

Как лаконично написать макрос TODO?

Почему-то у gcc нет опции _Pragma(GCC message). Пробую реализовать так:
#define DO_PRAGMA(x) _Pragma (#x)
#define TODO(x) DO_PRAGMA(GCC warning #x)

В "чистовой" сборке работает, а вот в debug — нет (т.к. у меня в debug-сборке добавляется -Werror).
И как же быть? Как не забыть обо всех своих TODO'шках, чтобы во время сборки напоминания постоянно вылезали? Писать вручную
#pragma message "TODO: add very usefull feature"

лень... Да и TODO-макросы можно было бы скрывать в чистовых сборках.

UPD. Плохой все-таки из меня "гугольщик"! Стал уже писать вопрос на SO, как вылезли похожие, и среди них было как раз то, что мне нужно!
В общем, вот как:
#ifdef EBUG
#define DO_PRAGMA(x) _Pragma (#x)
#define TODO(x) DO_PRAGMA(message #x)
#else
#define TODO(x)
#endif

Плохо я гуглил о _Pragma! Оказывается, не нужно там GCC ... писать.

P.S. Что-то давно я на stackexchange не заходил. "Карма" в стагнации...
Костерок

Сравнение астрометрических библиотек - 2

Как я уже писал, получается, что разные библиотеки для вычисления apparent place дают разные данные. С расхождением в минуты!
Один из авторов любезно поделился со мной статьей, где таких расхождений нет: там говорится о 5-6mas, а не минутах!!!
Collapse )
В общем, сравнивать их надо корректно. Но, судя по тому, что NOVA не использует DUT1, ее результаты таки должны быть менее правильными. Хотя, понятное дело: даже для БТА ошибка вычисления координат в ±1'' — мелочь по сравнению с ошибками наведения и сопровождения.
Костерок

"Звезды" на STM8

Я уже писал о том, что на новогодний концерт сделал управление "звездами" на основе STM8. Сам концерт можете посмотреть на youtube (на всякий случай я скопировал это в ВК и скинул на яндекс-диск, т.к. по идиотским "законам" всегда могут это видео удалить).
Collapse )
Концерт советую посмотреть. Полина Жеканис отлично всех организовала и срежиссировала "Ночь пере Рождеством" Гоголя на китайский мотив. Базовый сценарий взят с советского фильма. После переработки получился примерно такой же по длительности спектакль — около одного часа.
Костерок

Сравнение астрометрических библиотек

Решил я навсегда избавиться от устаревшей slalib (например, в apogee_control и прочих вещах, где нужен перевод координат между эпохами Jnow и J2000).
Существует несколько современных библиотек для этих целей: NOVAS, NOVA, SOFA и ERFA (правда, я так понял, что это — та же самая SOFA, но под другой лицензией).
Погуглив "nova sofa comparation" наткнулся на статью, но скачать ее нельзя — плати денежку... ОК, помимо статьи наткнулся на исходники. Пример есть и у автора в Readme на гитхабе, но я собрал и тоже запустил:
libNOVA UTC JNow  2458847.786754336208
NOVAS   TT  JNow  2458847.787555077113
                                                          d J2000             d NOVAS          d SOFA Atco13
                  ra deg           ,dec deg          ra''      ,dec''    ra''      ,dec''    ra''      ,dec''
J2000             345.986294056000,28.150389198100
libNOVA equ_prec2 346.228128882082,28.258449683874   870.605,  389.018    -0.009,    0.039   295.127, -160.093
NOVAS precession  346.228131342123,28.258438903511   870.614,  388.979                       295.136, -160.131
SOFA Atci13       346.222029679428,28.259039007764   848.648,  391.139   -21.966,    2.160   273.170, -157.971
SOFA Atco13       346.146149141993,28.302919840940   575.478,  549.110  -295.136,  160.131
SOFA Atco13 NO r  346.221947751140,28.259014432233   848.353,  391.051   -22.261,    2.072   272.875, -158.059
SOFA Atco13 NO eo 345.894173073050,28.302919840940  -331.636,  549.110 -1202.250,  160.131  -907.114,    0.000
ERFA Atco13       346.146149141993,28.302919840940   575.478,  549.110  -295.136,  160.131     0.000,    0.000

И кому верить?..

P.S. Почему-то поломался экспорт из dreamwidth в ЖЖ. Приходится руками копировать.
Что за чушь такая?
Failed to crosspost entry to eddy_em@LiveJournal: Client error: Your IP address is temporarily banned for exceeding the login failure rate.