Блог    Теги    RSS    Файлопомойка Мой Github Мой Telegram

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

   1  2  3   

Полезное о 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
Готово.
Комментировать Теги: #nix  

Статический анализ вызовов 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"; } )() );

Обратите внимание: GCC волен размещать код вложенных функций (и, как следствие, лямбд) в стеке!
Комментировать Теги: #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  

Отладка RTOS в OpenOCD

19 июля 2015, 19:54
Для отладки RTOS помимо плагинов IDE можно использовать встроенные средства OpenOCD. На данный момент поддерживаются FreeRTOS, ChibiOS, eCos и другие.

Для использования этой функциональности нужно в параметры запуска openocd добавить следующую строку (для openocd 0.9 и stm32f4):
-c "stm32f4x.cpu configure -rtos auto"


В случае FreeRTOS версий старше 7.5.3 нужно выполнить дополнительные движения:

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

Секунда координации

1 июля 2015, 08:45
Быстрофикс зависших серверов:
/etc/init.d/ntp stop; date; date `date +"%m%d%H%M%C%y.%S"`; date; /etc/init.d/ntp start
Комментировать Теги: #nix   #время  

Настройка Eclipse для разработки под STM32

2 июня 2015, 09:01
Инструкций сходной тематики в интернете немало, но как то вышло что информацию мне всё равно пришлось собирать по кусочкам. В этой статье я подытожу весь процесс от А до Я. Всё будет делаться на примере дистрибутива Debian Sid и отладочной платы STM32F4Discovery.

Читать дальше →
Комментировать Теги: #eclipse   #arm   #stm32   #ide   #nix  

Если долго запускается Wine...

12 марта 2015, 16:51
...то попробуйте сделать так:
mkdir ~/.cups ; echo 'ServerName dev.null' >~/.cups/client.conf
Комментировать Теги: #nix   #wine  
   1  2  3   
Ноябрь 2024
Пн
Вт
Ср
Чт
Пт
Сб
Вс
123
45678910
11121314151617
18192021222324
252627282930