May 16

Официално: Arduino/Genuino MKR1000 вече е на пазара!

Почти половин година, след официалното му обявяване, Arduino/Genuino MKR1000 вече се продава официално. Очаквам този продукт да се появи скоро и в България.

Continue reading

May 14

Комбиниране на Struct и Volatile в C/C++

Покрай един проект с Ардуино възникнаха няколко въпроса:

  1. Volatile ли са елементите на дадена структура, ако самата тя е декларирана като Volatile?
  2. Може ли в структура да има както обикновени елементи, така и Volatile елементи?
  3. Как се дефинира указател към Volatile структура, която не е маркирана като Volatile в нейната дефиниция?

Continue reading

May 14

Служебната дума Volatile в C/C++

Компилаторите имат редица опции, влияещи върху оптимизацията на кода. Включвайки една или повече от тях, Вие разрешавате на Компилатора да прави “подобрения” на вашата програма, при превеждането й на Асемблер/машинен код. Обикновено оптимизациите не са проблем, но започват да създават главоболия при многонишковите приложения (Multithreading), Interrupt Service Routines (ISR), работа на ниско ниво с регистри на крайни устройства  и т.н.

Главният симптом е: програмата Ви работи добре, докато не включите оптимизациите. След това започват да се случват “странни неща”.

Continue reading

Apr 13

Първи стъпки с Arduino (SoftUni) – Проектът

Петте седмици от курса отлетяха толкова бързо! И дойде време за проект и защита 🙂

В последния момент и много на бързо (така се стекоха обстоятелствата) успях да сътворя нещо семпло:

Continue reading

Jun 03

Мистерия: if (something==NULL) или if (NULL==something)?

   Нека разгледаме следния програмен отрязък:

[code lang=”C”]if (NULL == someApiPointer)
{
  //do something here
};[/code]

Защо сравняваме NULL със стойността на someApiPointer, а не обратното – както са ни учили в училище и както изглежда по-логично?
Когато за първи път срещнах подобна конструкция си помислих, че има нещо специално в нея – прави се от гледна точка на сигурността или пък е нов стил на писане?

Continue reading

Dec 16

Безумната комбинация CreateToolhelp32Snapshot + TH32CS_SNAPTHREAD

CreateToolhelp32Snapshot е основна функция що се отнася до изброяване на процеси, модули, нишки и heap-ове. В MSDN тя е дефинирана така:

Най-просто казано първият параметър указва каква информация ще се изисква, а вторият – процесът, за който се отнася въпросната информация.

Нека за момент си представим, че искате да получите списък с нишките, които принадлежат на даден процес. Необходимият флаг е TH32CS_SNAPTHREAD. По инерция въвеждате и идентификатора на процеса, който Ви интересува. Изпълнявате и ХОП – ИЗНЕНАДА!  Сдобивате се със списък на всички активни в операционната система нишки (до които имате достъп), а не за конкретната програма?!?

Continue reading

Sep 04

Спомняте ли си Turbo Pascal и Turbo C/C++?

   Преди години това бяха два продукта, които промениха начина, по който се програмира. Голямата новост беше, че те предлагат интегрирана среда за програмиране (IDE), макар и в текстов режим. Години след това имената им се промениха, бяха мигрирани към графичен интерфейс, IDE частта им ставаше все по-добра и лесна за употреба. Цената им обаче – твърде висока за повечето потребители.

Добрата новина е, че някои от големите компании, които се занимават с разработката на IDE и компилатори предоставят и по-орязани версии на своите продукти на цена $0 т.е. безплатно. Въпреки намалената си функционалност те са изключително подходящи за изучаване на различните програмни езици в училищата (часовете по информатика/ИТ).

Continue reading