Блог №200 по адресу 0708:07C7

1  2  3   

...

10 ноября 2016, 16:22
An aircraft company discovered that it was cheaper to fly its planes with less fuel on board. The planes would be lighter and use less fuel and money was saved. On rare occasions however the amount of fuel was insufficient, and the plane would crash. This problem was solved by the engineers of the company by the development of a special OOF (out-of-fuel) mechanism. In emergency cases a passenger was selected and thrown out of the plane. (When necessary, the procedure was repeated.) A large body of theory was developed and many publications were devoted to the problem of properly selecting the victim to be ejected. Should the victim be chosen at random? Or should one choose the heaviest person? Or the oldest? Should passengers pay in order not to be ejected, so that the victim would be the poorest on board? And if for example the heaviest person was chosen, should there be a special exception in case that was the pilot? Should first class passengers be exempted? Now that the OOF mechanism existed, it would be activated every now and then, and eject passengers even when there was no fuel shortage. The engineers are still studying precisely how this malfunction is caused.

Источник

Комментировать Теги: #юмор   #linux  

О Mikrotik

12 августа 2016, 13:53
Не так давно я заимел в личное пользование маршрутизатор Mikrotik RB951Ui-2HnD, и в этой заметке хочу поделиться впечатлениями от работы с данным устройством.

Читать дальше →
Комментировать Теги: #mikrotik  

Применение m4 для генерации конфигурации

5 июня 2016, 17:43
В данной заметке я хочу рассказать о существовании замечательной утилиты - макропроцессора m4.
Заметка носит ознакомительный характер и не ставит целью описание нюансов m4 (RTFM!).

Читать дальше →
Комментировать Теги: #linux   #m4   #nagios  

ГОСТ шифр

17 мая 2016, 10:06
В данной статье решается задача создания защищённого соединения с сервером госзакупок с минимизацией необходимости дальнейшей поддержки решения.

Читать дальше →
Комментировать Теги: #linux  

Полезное о C

27 февраля 2016, 17:05
В этой заметке я буду собирать ссылки на полезные и интересные материалы, обязательные к прочтению каждому использующему язык Си разработчику.
Читать дальше →
Комментировать Теги: #c   #ссылки  

Расширение корневого раздела в LVM в RHEL6

24 декабря 2015, 10:23
Вводная: виртуальная машина с одним диском и корневой фс в lvm.
Задача: расширить корневую фс без остановки предоставляемого сервиса.
Решение:
1. Увеличиваем размер диска средствами системы управления виртуальными машинами. В моём случае это Proxmox:
qm resize 100 virtio0 +5G
2. Далее нужно как-то подключить наше новое пространство к VolumeGroup. Вот тут кроется засада. Для RHEL5 можно увеличить размер раздела с PhysicalVolume и обновить таблицу разделов командой partprobe. Но начиная с RHEL6 она покажет шиш и откажется что-либо делать пока мы всё не остановим и не отмонтируем. Однако есть и обходной путь: создаём на этом же диске ещё один раздел с PhysicalVolume чтобы затем расширить нашу VolumeGroup на неё:
parted /dev/vda mkpart primary ext2 НАЧАЛО_РАЗДЕЛА -1
parted set НОМЕР_РАЗДЕЛА lvm on
Затем выполняем потенциально опасную операцию - обновляем наживую таблицу разделов. Существующие разделы при этом остаются на месте (даже если были изменены/удалены), новые же добавляются:
partx -a /dev/vda
3. Дальше дело техники - расширяем VolumeGroup:
vgextend VolGroup /dev/vda3
4. ... расширяем LogicalVolume:
lvextend -l +100%FREE VolGroup/lv_root
5. ... и, наконец, увеличиваем сам раздел:
resize2fs /dev/VolGroup/lv_root
Готово.
Комментировать Теги: #linux  

Статический анализ вызовов printf-like функций

16 ноября 2015, 11:38
При разработке для встраиваемых систем зачастую приходится писать свои реализации printf и подобных функций. Однако для самописных функций не работает опция "-Wformat": проверка вызовов на корректность аргументов (сверка количества и типов аргументов со строкой форматирования). Для решения этой проблемы в GCC существует специальный атрибут функции "format". Пример применения:

int fmt( void (*put)(char,void**), void *putarg, const char *fmt, ... )
__attribute__ ((format (__printf__, 3, 4)));

Первым аргументом атрибута идёт тип проверки (__printf__, __scanf__, __strftime__, __strfmon__), второй - номер аргумента с форматом (нумерация с 1), третий - номер аргумента с которого начинается список аргументов (...).
Комментировать Теги: #gcc   #c  

Лямбды в Си

13 ноября 2015, 17:06
Есть два пути получения лямбд в Си:

1. Использовать дополнительный препроцессор cmacro. Идея очень интересная, но, к сожалению, реализация подводит. У меня этот препроцессор не только спотыкался на простейших конструкциях (например, лямбда, возвращающая указатель), но и умудрялся портить совершенно сторонний код ("return -1" чудесным образом превращается в "return- 1"). Проект по всей видимости заброшен.

2. Использовать расширения компилятора GCC. Это простой и безболезненный путь если нет необходимости сохранять совместимость с другими компиляторами. Для этого варианта достаточно объявить макрос:
#define lambda(l_ret_type, l_arguments, l_body)         \
({ \
l_ret_type l_anonymous_functions_name l_arguments \
l_body \
&l_anonymous_functions_name; \
})

Пример создания и использования лямбды:
    printf("%s world\n", lambda(char*, (void), { return "Hello"; } )() );
Комментировать Теги: #c   #gcc  

Анализ сбоев МК пост-фактум

8 октября 2015, 14:16
Часто возникает необходимость зафиксировать состояние МК во время сбоя (деление на 0, разыменование нулевого указателя, обращение к невыровненному адресу и тысяча других возможностей прострелить себе ногу). И часто при этом нет возможности держать устройство с подключенным отладчиком.

В таких случаев поможет связка ПО CrashDebug и CrashCatcher.
CrashCatcher - библиотека подключающаяся к прошивке МК. Она берёт на себя обработку исключения HardFault и вывод содержимого регистров и памяти на последовательный порт (либо любым другим реализованным программистом способом). Полученный по последовательному порту дамп сохраняется в файл и передаётся утилите CrashDebug, выступающей в роли target для GDB. Дальше уже можно работать любыми привычными средствами - консольным arm-none-eabi-gdb, ddd, либо даже Eclise (через тип конфигурации "GDB Hardware Debug").

Оба проекта имеют исчерпывающую документацию и достаточно легко интегрируются в существующий проект.
Комментировать Теги: #stm32   #отладка   #arm  

Если вы калибруете АЦП...

3 сентября 2015, 20:38
... то не забывайте перед калибровкой отключать DMA (ADC1->CFGR1 &= ~ADC_CFGR1_DMAEN) и сбрасывать значение счётчика DMA1_ChannelN->CNDTR.

Читать дальше →
Комментировать Теги: #stm32  
1  2  3   
Декабрь 2016
Пн
Вт
Ср
Чт
Пт
Сб
Вс
1234
567891011
12131415161718
19202122232425
262728293031