Archive for the ‘Hints & Tips’ Category.

Універсальний gcc-avr.mak

У зв’язку з описаною раніше помилкою avr-ld та методом боротьби з нею мене спитали про той «універсальний» файл gcc-avr.mak, яким я користуюся у всіх проектах. «Нічого воєнного», це просто файл, у який зібрано команди, які без змін переходили б з проекту в проект шляхом копіювання (і наступного редагування) Makefile від попереднього проекту 😉

Тепер файл gcc-avr.mak підключається до Makefile проекту командою include. Так само, як і подібний мейк-файл для роботи з програматором avreal — avreal.mak. Файл для проекту тепер короткий, містить лише головні налаштування. Легше знайти потрібне, важче поламати те, що вже перевірене.

Повернімося тепер до цього універсального мейк-файлу для avr-gcc і до згаданої помилки в avr-ld.

Окрім іншого, на початку gcc-avr.mak здійснюється налаштування шляхів до програм, використовуваних при компіляції. Виглядає це так (нумерація рядків відповідає файлу, доданому у прикріплений архів).

40
41
42
43
44
45
46
47
48
49
# Set default toolchain prefix if it does not defind in environment or project makefile
TOOL ?= avr-

# Set tool names
CC  := $(TOOL)gcc
AS  := $(TOOL)gcc -x assembler-with-cpp
BIN := $(TOOL)objcopy
OBJCOPY := $(TOOL)objcopy
OBJDUMP := $(TOOL)objdump
SIZE    := $(TOOL)size

Читати далі » » »

Attached Files:

Недорога плата розробки для STM32L05x

Останнім часом я трохи працюю з мікроконтролерами STM32, зокрема STM32L011 і STM32L051, але то все конкретні плати, на яких виводи задіяно під конкретні функції. І коли раптом хочеться поколупатися із якоюсь ідеєю, то на тих тісних платах то страшенно незручно. А використати їх як носій мікросхеми, прибравши все зайве, так прибирати доведеться майже все і то буде навіть гірше, ніж просто перехідник «TQFP на штирі».

Існують плати STM32L1xxDISCOVERY, але там на найдешевших одна радість — вбудований «фірмовий» ST_LINK. Платити за те під 500 гривень неохота. Та й на них L100 або L152, а мені сподобалися STM32L0xx.

От для STM32F103C8 є декілька варіантів плати, яку називають «синя таблетка» (що викликає деякі застарілі асоціації[1]). Недорого, є необхідний мінімум.
Але то F103…
Тю, так виводи ж у STM32 стандартизовані!
STM32F103C8 і STM32L051C8… Співпадають!
Чудово, вчора син по дорозі зі свого університету заїхав у мікроАмпер і забрав потрібну плату, я ж заїхав у Імрад і взяв STM32L052C8, щоб вже й USB було.

Сьогодні на роботі скористався службовим становищем — попросив похімічити, здути F103 і запаяти на її місце L052:
Створення плати розробки STM32L052 із плати STM32F103

Під дією тепла проведено реакцію, у результаті якої я отримав бажану плату, а STM32F103C8 випала в осад. Залежно від того, чи буде цей мікроконтролер десь використаним, плата розробки для L05x обійшлася у суму від десь 110 до 180 гривень.

p.s. Там ще STM32F303C у такому ж корпусі TQFP48 бувають 😉


1 Колись давно мем про червону і синю таблетки використовували на форумах як вибір між червоним кольором PIC/Microchip і синім AVR/Atmel. Тепер і те і те мірочіпівське, хоч кольори і не помінялися.

Ubuntu MATE на Raspberry Pi 3

Колись давно я був купив Raspberry Pi — ще ту стару, з 512М пам’яті й 700-мегагерцовим одноядерним процесором. Трохи побавився й відклав, бо реального на ній ні́чого було робити, а інші задачі підпирали.

А то до мене звернулися знайомі, які погано знайомі з лінуксами і їм потрібна деяка підтримка. Дали одну платку Raspberry Pi 3 мені. Тепер коли є проблеми — пишуть, я у себе розбираюся і висилаю рекомендації («для себе» я із нею нічого й не роблю).

Оце вчергове щось там треба було перевірити зі свіжим Raspbian 9.1 stretch, поліз по нього і виявив, що є ще й Ubuntu MATE для RPi.
Звісно ж, по тому, як все зробив, вирішив погратися і з цим.

На око наче не повільніша за Raspbian, але займає більше місця на карті micro-SD. Просто тому, що тягне із собою відразу набагато більше софта.

Тільки от… хтось вирішив, що без проблем буде нецікаво » » »

Зайві коми в CSV

Зустрівся з ситуацією класу «перестаралися з локалізацією».
Підкинули мені як вхід до симуляції однієї системи лог-файли, про які програма, що їх згенерувала, думала, що вона робить файли CSV. Воно, може, так би й було, якби не те, що та програма подивилася на мову операційної системи і в числах замість «рухомої крапки» втулила «рухому кому». Результат — такі числа сприймаються скрізь як два незалежних поля з цілими числами.

Пошукати, чи не можна у програмі увімкнути фіксовано використання в числах розділювача-крапки, я порадив, але ж із вже отриманими мегабайтними логами реальних процесів треба щось робити…

Ці файли мають практично вільний формат (рядки мають різну кількість полів), але, на щастя, перед кожним числовим полем йде текстова назва цього поля, маємо набір пар «назва даних», «значення» (значення може бути текстовим, але у випадкові із зайвими комами це не важливо).
Тобто не зустрічаються два цілих числа підряд і якщо вже кома з двох сторін має цифри, то її гарантовано слід замінити крапкою. «Ніколи» — це ніколи там, де є числа з рухомою комою. На початку кожного рядка йде фрагмент фіксованої структури, де є і текстові рядки, і декілька цілих чисел підряд. Рядок розбивається на дві частини, першу слід залишити як була, у другій всі коми, обрамлені цифрами, замінити на крапки.

Тут теж є трішки програмістського щастя — між цим фрагментом і «хвостом» з довільними іменованими даними завжди зустрічається одна й та ж сама послідовність літер, скажімо, vli, що дає можливість не рахувати поля на початку і не сподіватися на фіксовану довжину заголовка, а просто розділити рядок на дві частини по цій комбінації літер.

Все перераховане може зробити коротенький скрипт мовою AWK:

/^.+$/ {
    i = index($0, "vli")
    s0 = substr($0, 1, i)
    s1 = substr($0, 1+i)
    print s0 gensub(/([0-9]),([0-9])/, "\\1.\\2", "g", s1)
}

SEC_ERROR_LIBRARY_FAILURE

Або «як заблокувати собі інтернет за кілька секунд і як повернути його собі назад»
Щоправда, якщо це вперше, то назад не за кілька секунд і якщо є ще з чого погуглити.

Минулого разу я запускав Wireshark давно і у WindowsXP. Пам’яталося, що там запускав його від адміністратора, тому коли в Linux він мені сказав, що на щось там (на dumpcap, але то не важливо) йому не вистачає привілеїв, я не поліз читати, що треба робити (додати себе в групу wireshark), а взяв і запустив його через sudo.

Йому це однак не сподобалося (і правильно!) і він послав мене читати документацію. В інтернеті. Через Firefox. Ну я прочитав, зробив як він просив, захотів ще щось глянути в мережі, запустив Firefox, а він мені і каже оце кляте SEC_ERROR_LIBRARY_FAILURE

Добре, що є ще планшет. Причина хвороби та ліки знайшлися швидко — Firefox з-під sudo-шного Wireshark кілька файлів у мене в ~/.mosilla/ перезаписав від рута. При роботі від звичайного користувача ті файли не читалися і робота далі не йшла.
Ліки:

find ~/.mozilla/firefox/ -user root -print0 | xargs -0 sudo chown fooluser:fooluser

де fooluser — логін необережного користувача.

p.s. Дійсно щось я став необережним поспішайком 🙁

Статична матрична клавіатура

Матричні клавіатури, на зразок показаної 12-клавішної, зазвичай опитують «динамічно», за допомогою сканування.

Процес опитування складається з послідовного видавання імпульсів на лінії, наприклад, COL0…COL2 і зчитування стану ліній ROW0…ROW3 та, при виявленні натискання, комбінування номерів чи масок цих ліній у скан-код клавіші. Це вимагає наче небагато команд і часу (та енергії) на їх виконання, але…
Якщо у пристрої вже й так використовується динамічна індикація, то таке опитування клавіатури може використовувати той же цикл і ті ж лінії сканування, що використовуються для індикатора, тому опитування клавіатури практично не вимагає додаткових ресурсів.

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

В інших випадках можна обійтися без сканування, «статично», просто зчитуючи стан входів. Нічого не дається надурняк, тут якась кількість внутрішніх ресурсів мікроконтролера розмінюється на декілька транзисторів-резисторів (втім, сумарною вартістю меншою, ніж одна кнопка). Чи вартий того такий розмін, чи ні — вирішувати розробнику, але спочатку треба з ознайомитися з можливістю » » »

Генерація таблиці синусів

Дивно, я чомусь думав, що про cog я вже писав.

Знадобилася таблична генерація синусоїдальних сигналів — звичайнісінький функціональний генератор. Накопичувач фази та вибірка готового значення з таблиці. Не я перший, не я останній.

Цікаво, який метод отримання таблиці синусів для найпоширеніший?
Пошук в інтернеті готової таблиці з потрібними параметрами (розрядність даних, амплітуда, кількість квадрантів у таблиці та точок)?
Розрахунки у електронній таблиці (OpenOffice calc чи там MS Excel з експортом у .csv та переносом результатів у C-файл?

Не виключаю, що при певних навичках користування гуглом перший варіант дасть найшвидший результат 🙂
Але це не наш метод. Будь-яка зміна параметрів — і заново шукай чи міняй таблицю. Мені ж зазвичай хочеться автоматизувати процеси. Зрештою, «machines should work, people should think».

Як це часто буває, хтось вже все придумав, лише бери і користуйся.
Є такий чудовий генератор cog. Він шукає у вхідному файлі (написаному не обов’язково мовами С/С++) коментарі спеціальної форми, в яких розміщено пітон-скрипти, і породжує вихідний файл, у якому поруч з початковим текстом додається згенерований фрагмент коду. Тобто можна доповнити написаний код фрагментами, згенерованими автоматично. До генерації власне коду я не дійшов, а от таблички іноді генерую.

»»» Якось так…

Символ діаметру

І не лише він.

Вже багато років використовую розкладку клавіатури «Ukrainian unicode».
Спочатку вибирав її при налаштуванні Linux, тепер вже багато років ця розкладка встановлюється автоматично при виборі української мови системи. До речі, цю розкладку можна встановити і для Windows.

Переваги цієї розкладки для мене суттєві:
• У системі залишається дві розкладки — англійська та ця. Російську мову я використовую доволі рідко і можливості набрати російські літери Ы ы Ё ё Э э Ъ ъчерез правий Alt вистачало ще тоді, коли я відносно багато часу проводив на форумах, а зараз і поготів. Перемикання можна призначити на клавішу CapsLock — капсом я пишу ще рідше, ніж російською, а якщо сильно потрібно, то можна натиснути Shift-CapsLock. Індикацію вибраної розкладки для двох розкладок можна призначити на світлодіод ScrollLock на клавіатурі, що теж доволі зручно.
• Доступні символи, заради яких зазвичай доводилося перемикатися на англійську. Це «більше-менше», різноманітні дужки, косі риски.
• Доступні символи, яких раніше просто не було і доводилося пам’ятати код Unicode для набору через Ctrl-Shift-u або шукати потрібне через меню «вставити символ». Це ± та , еліпсис , градус °, лапки потрібного виду, em- та en- тире і © ® ™. Також є можливість поставити наголос та вставити нерозривний пробіл.

Але завжди хочеться більшого 😉

»»» Наприклад…

Калькулятор

До речі, про octave.
Поступово ця програма стає моїм «настільним калькулятором». Все частіше використовую її для простих поточних обчислень замість графічного galculator. Купа зручностей: є історія набраних виразів, яка зберігається між запусками, можна додавати свої функції.

Ну от приклад:

Знадобилося погратися з паралельним з’єднанням трьох резисторів, скажімо, треба обчислити опір паралельно з’єднаних резисторів 10k, 4k7, 1k. Розрахунок через обернену суму провідностей з урахуванням векторної орієнтації octave виглядає так:

1 / sum(1 ./ [10,4.7,1])

Таким способом що два, що десять — набирати легко. Можна взяти з історії вираз, замінити/додати/прибрати резистор і отримати новий результат. Декілька разів скориставшись цим обчисленням я зрозумів, що пора додати у файл .octaverc домашнього каталогу таку функцію:

function res = par(rlist)
    res = 1 / sum( 1 ./ rlist);
end

Ця функція при старті octave автоматично додається до вбудованих і можна писати просто par([10,4.7,1]).

Варення з аґрусу

Є купа варіантів рецептів варення з аґрусу. Повен інтернет, нема сенсу цитувати. Але переважна більшість з них, окрім, хіба що, крайнощів, де ягоди перемелюються на пюре або де з ягоди «товстошкірого» аґрусу виймають насіння, вкладаючи замість нього шматочок горіха, — мають спільну рису.

Ця спільна риса, чи, радше, операція — надколювання ягід. Але чомусь в описах технології для цього пропонують використовувати «заточену виделку» (це ж продірявлювання, а не надколювання шкірки!) або ж дерев’яну шпичку. У моєї бабусі на те був спеціальний інструмент — простий у виготовленні й зручний у використанні. Звісно, ми використовуємо аналогічний.

Шматочок корка, набитий голками:

[flagcounter image]