Инициализация периферии с помощью именованных аргументов

В статье речь пойдет о реализации способа работы c периферией микроконтроллера с помощью именованных аргументов функций Си. Способ разобран на примере реализации функции конфигурации таймера TIM4 семейства STM8L.

Вообще, существует 2 типа передачи параметров внутрь функции или программного модуля: позиционный или именной. Так например, обычные функции в Си используют позиционную передачу, т.е. мы должны знать что и в каком порядке передавать функции. Использование именованных аргументов же гарантирует, что мы присвоим нужные значения куда положено, да и освободим себя от необходимости помнить какой параметр за каким следует. Ну вообщем, на дальнейшем примере это станет понятно.


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

AVRASM: Пример использования "Диспетчера задач RTOS 2.0" (установка и настройка)

AVR
Для демонстрации основных возможностей и особенностей «Диспетчера задач RTOS 2.0» был собран демонстрационный макет, на основе «Универсальной макетной платы для МК в DIP-корпусе». В качестве прикладной задачи: мигаем светодиодами, в разных режимах…


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

AVRASM: Диспетчер задач RTOS 2.0 (псевдо кооперативная ОС)

AVR
Отрефакторил код «Диспетчера задач RTOS» (псевдо кооперативной ОС), оптимизировал и универсализировал, добавил новые фичи, декларировал чёткое API, и опубликовал на GitHub… Фактически, весь код был переписан сызнова, по прототипу DI HALTа.

Operating system placement


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

C++ с полного нуля спустя месяц

Примерно месяц назад я решил освоить программирование и выбрал для этого C++. Основные занятия продолжаю по книге Стауструпа «Программирование. Принципы и практика использования C++».

За это время я разобрался с типами данных, выражениями, функциями и почти две недели закрывал задачи по массивам, только сегодня разобравшись с реализацией решета Эратосфена (я заглянул в готовый алгоритм только после того, как собственная реализация не вызывала критики с моей стороны). На этой задаче был затык, т.к. идея вложенных циклов не разжевывается в книге.

Однако, я считаю это плюсом, т.к. наталкивает на материал из других источников (например, чтобы разобраться с циклами, я прорешал пару десятков задач из другой книги и только после этого решето Эратосфена вылилось в готовый код).

Желания бросить не возникало, но убедился, что выбор основной книги верен для моего уровня подготовки на данный момент с позиции методологии (все же думаю, есть специальная литература, по которой надо шлифовать правильность архитектуры программ и позволяющая улучшить «красоту» кода). Я сравнил подачу изученного материала Страуструпом с подходом авторов в книгах:

Джесс Либерти «Освой Cpp самостоятельно за 21 день»
Харви М. Дейтел, Пол Дж. Дейтел — «Как программировать на C++»
Шилдт Г. — «Самоучитель C++»

Хотя, в поисках идеи вложенных массивов я запоем прочитал тематические главы из всех упомянутых книг и Страуструп Б. «Язык Программирования С++».

К Visual Studio 2013 я поставил Visual Assist, к которому быстро привык. Другие среды программирования буду щупать позже, т.к. Visual Studio устраивает полностью. Главное, освоившись с азами, я понимаю, что впереди море интересного: классы, шаблоны, наследование и прочее.

P. S. По поводу конкретно C++ и сетевых холиваров о перегруженности его «отвлекающим» функционалом, сказать пока ничего не могу, однако заметил, отличия в подаче материала Страуструпом и другими авторами в книгах по C++ для новичков. У Страуструпа какие-либо абстракции языка гармонично вытекают из предварительно поданной базы, остальные упомянутые книги я к данному моменту воспринимаю как гораздо менее связанный набор описаний аспектов языка.
  • +3
  • 09 февраля 2014, 22:32
  • habl

C++ Изучение программирования с нуля

В связи с обилием свободного времени в последние месяцы я решил поднять свой скилл программирования с нулевой отметки в каком-нибудь языке программирования. При этом стоит отметить, что программировал я всего четыре раза в жизни: в школе на бейсике, в экселе, разбирая входящие данные с битыми значениями, решив изменить дизайн блога, параллельно изучив html & CSS и решив пройти курс по javascript на codecademy.com.

Я помню кайф школьных времен, когда после размышлений, решение задачи приходит на ум и не терпится проверить, работает ли оно в реализации бейсика. Однако, освоив html, CSS, пройдя курсы javascript на codecademy.com и написав в экселе парсер битых данных, я понял, что нужно изучать что-то больше приближенное к сфере деятельности.

Врожденный перфекционизм не давал мне просто сесть и освоить assembler AVR (слишком узко), python и java (слишком аутентично), pascal (считал малоперспективным), C (зачем, если есть C++?). В итоге проведя пару вечеров за философскими рассуждениями на тему выбора первого языка для программирования, я остановился на C++, как универсальном современном языке программирования, решив, что потом при желании освою C#.

Потом я нашел книгу Б. Страуструпа «Принципы и практика использования C++» rutracker.org/forum/viewtopic.php?t=4123965 и определился, что учиться буду в Visual Studio 2013.

Скачал, установил, проверил, что SumatraPDF blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader.html позволяет копировать текст из DJVU файла данной книги, прочитал вводную главу и начал разбираться с первой частью «Основы».

Книга оказалась, как раз для моего уровня, новичка, не владеющего синтаксисом языка программирования вообще. Сегодня я одолел все упражнения из конца первой главы, пару раз зайдя в тупик, из-за незнания конструкции else if и отсутствия объяснения со стороны автора, что в тело if можно добавлять несколько операторов через фигурные скобки. Я думал, что Страуструп будет объяснять все нюансы синтаксиса функций, которые позволяют выполнить упражнения после главы. Но мне так даже интереснее.

Я получаю удовольствие от процесса обучения по данной книге и мне интересно, кто как изучает программирование в случае, похожем на мой.
  • +1
  • 13 января 2014, 16:18
  • habl

'Тайны ПОРТИ'+(is_shit(CODE) ? 'М':'Н')+'ГА'

Заинтересовала статья про портирование простого стека TCP/IP для AVR на STM32, хотел написать там, но как-то постепенно получилось очень много для простого вопроса, и скорее всего — возникнут еще новые вопросы.

Тема портирования, правильного портирования и написания портируемых программ для MCU интересна многим, например я, — не знаю как это ПРАВИЛЬНО делать. Поэтому буду периодически «разжигать» здесь вопросами по Си: что и зачем добавлено, и как правильнее. Исходники стека берем из этой статьи.


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

Переходник/адаптер 10-6 pin для внутрисхемного программирования микроконтроллеров AVR

Когда-то все мои печатные платы были заточены под детали для установки в отверстия (through holes). В те славные времена для внутрисхемного программирования микроконтроллеров AVR я вовсю использовал 10-контактный разъем BH-10 (или штыри PLD-10) со стандартной Atmel-овской распиновкой (см. STK200/STK300). С учетом размеров прочих компонентов платы, данный разъем занимал не так уж и много места. Но времена изменились, и теперь в основном я использую детали SMD. Так что установка на плату разъема габаритами с два корпуса TQFP-32, мягко говоря, напрягает. Поэтому было принято эпохальное решение – впредь использовать для программирования камней другой стандарт (это который привязан к 6-ти пиновому разъему BH-6 или PLD-6). Однако, поскольку все мои программаторы были сделаны относительно давно, из них торчали именно 10-контактные разъемы BH-10. И для того, чтобы для программирования «по новому стандарту» использовать старый шлейф (да и чтобы их не валялось с десяток разных видов), смастерил я себе такой вот переходник, цепляющийся на один из концов 10-жильного провода:





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

4E4th + TI LaunchPad. В начале было Слово.

После нескольких экспериментов и вводных слов (раз, два) пора переходить к рассмотрению внутренних механизмов нашей учебной форт-системы 4e4th. Иначе, как мне кажется, народу скоро наскучит зажигать светодиоды из терминала и забавляться вывернутой наизнанку логикой стековой машины.

Непосредственным стимулом к написанию данного текста стало то обстоятельство, что, просматривая в очередной раз исходники нашей исследуемой форт-системы, наткнулся на несколько новых слов, которых раньше не замечал.

В связи с этим подумалось, что те люди, которым интересна данная оригинальная технология программирования родом из 70-х, могли бы сами потихоньку копать в интересующем направлении, но для этого нужно уяснить несколько базовых принципов и основ построения forth.

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

Таким образом, сегодня рассмотрим строение основополагающего компонента любой forth-системы — слова.



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

4E4th + TI LaunchPad. Основы языка Forth

В прошлый раз я представил общественности учебное компактное ядро forth, целиком размещаемое в 8 из 16 кБ флеш памяти MSP430G2553 и полноценно функционирующее, несмотря на смешные по нынешним временам 512 байт ОЗУ, в которых разместился буфер вводимых через UART команд, два стека (данных и возвратов) и пользовательский словарь, в который складываются вновь скомпилированные слова.

Дополнительные возможности (по сравнению с прототипом — CamelForth) дает слово save, которое сохраняет новые слова, введенные пользователем, в флеш память, освобождая ОЗУ.
(На самом деле это слово делает что-то другое, пока точно не разобрался. А слова изначально сохраняются в пользовательскую половину флеш памяти.)

Так как был высказан интерес к теме, продолжим изучение основ фортостроения вообще и особенности конкретной реализации 4E4th.


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