Вопросы архитектуры кода, или Low Coupling на C. Делегируем обязанности.

Привет-привет, дорогие друзья.

Программирую я на Си не так уж и много, но есть определённый опыт работы на Objective-C, и в парадигме ООП одним из основополагающих принципов является Low Coupling — низкая связанность объектов, которая позволяет максимально легко переиспользовать написанные классы, тем самым увеличивая эффективность разработки в разы.

Естественно, говоря о Си, мы не можем говорить об объектах, но хотелось бы получить слабую связанность модулей, чтобы можно было их легко добавлять в разные проекты, по минимуму задумываясь о том количестве хвостов, что тащит за собой модуль. Один из способов — использовать функции с атрибутами weak alias в GCC. Правильно ли это или нет — я не знаю, возможно есть и решения по-красивее, но цели, которые ставились более-менее достигнуты. Скорее всего речь пойдёт об абсолютно тривиальных вещах, но я реально не знал, как это делается в Си, по-этому Всех кого преамбула заинтриговала, или, может быть, наоборот, заставила негодовать — добро пожаловать под кат)

Delegate Em'All!


Читать дальше

STM32 Удобные внешние прерывания

STM32 Удобные внешние прерывания

При изучении STM32 меня приятно удивило большое количество внешних прерываний (всего 16), да и еще возможность настроить их на любой пин микроконтроллера. Такой расклад после того, как долгое время сидел на AVR — кажется фантастичным. Однако при детальном изучении радость моя несколько поуменьшилась. Оказывается, есть и ограничения:
1) Настроить прерывания можно только на один из входов, где совпадает нумерация порта.
Например, настроить два прерывания на GPIOA.0 и GPIOB.0 — не получится. Только одно из них. Это необходимо учитывать при разводке схемы.
2) Отсутствует способ вызова прерываний по нижнему уровню (иногда требуется именно этот способ, например при сочленении с WIZnet). Хотя этот недочет, в принципе, — программно решаемый.
3) Всего 7 векторов в прерываниях. А событий — 16. А это значит, что обработка нескольких событий производится в одном и том же месте.

Но даже такое положение вещей все равно гораздо более привлекательное, чем в старом-добром AVR-e.

Цель написания этой статьи — разбавить 3-е по списку ограничение — недостаток векторов, упрощение инициализации внешних прерываний. И напоследок, разберемся, что такое «слабосвязанные функции» и с чем их едят (С) Умка :). Итак, начнем:


Читать дальше