С/C++ задачка: что будет, если разделить INT_MIN на -1

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

Предлагается такой вот код:

#include <limits.h>
 
int foo(int a, int b) {
  return a / b;
}
 
int main(void) {
  return foo(INT_MIN, -1);
}

Каков результат деления?

За подробным ответом — сюда.

Скользкая дорожка для поклонников volatile



Прошло уже практически 30 лет с тех пор, как в стандарте языка C появился модификатор volatile, но в наши дни это ключевое слово вызывает лишь больше вопросов и непонимания даже среди программистов, общающихся с железом на “ты”. Сейчас уже никого не удивишь многоядерным мобильным телефоном или компьютером, умещающимся в одном чипе. Прогресс не стоит на месте, компиляторы умнеют, задачи программистов усложняются, вынуждая помнить о барьерах компиляции и барьерах памяти работая на многопроцессорных системах, только volatile по-прежнему остается темным уголком стандарта, в котором лишь сказано, что доступ к такой изменчивой переменной “implementation-defined” (Стандарт C, 6.7.3/7), т.е. как решат ребята, разрабатывающие компилятор, так и будет.



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

Отладка по UART или встроенный GDB server

AVR
Хочу подробно описать в деталях и коде, как можно отлаживать AVR по UART, не прибегая к использованию внутрисхемной отладке по JTAG, не тратя лишние пины, а задействуя лишь UART, прерывания по таймеру и возможности самопрограммирования FLASH-памяти контроллера.
В этой статье речь пойдет о программной заглушке, которая будет приостанавливать выполнение основной программы, возвращать состояние процессора, читать и писать в память, короче, выполнять роль отладчика, исполняясь непосредственно на контроллере.

Я был оч удивлен, когда на просторах сети не нашел ни одного достойного решения для, казалось бы, нужной задачи, как отладка AVR по UART. На запрос «avr gdb stub» я получил пару куцих решений, которые уже давным давно не поддерживаются, несовместимы с текущей версией gdb и содержат ряд существенных недостатков: отсутсвие исполнения интрукций по шагам или же замедление исполнения отлаживаемой программы в сотни раз. Мне показалось, что это хороший шанс попытаться разобраться в теме и, возможно, улучшить существующие решения.



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

Игрушка-шар для маленьких на ATmega16 + акселерометр MMA7455 + led driver TLC5940

AVR
«Для маленьких» — это не фигура речи, а мне действительно хотелось бы рассказать о шарике-самоделке, мигающем огоньками и радующем моего еще совсем маленького годовалого сынка. Идея пришла спонтанно, как только встретил описания дешевого и легкодоступного акселерометра на eBay. Электроникой я увлекся всего полгода назад и в процессе этого домашнего проекта (длившегося, к слову сказать, несколько месяцев) схему переделывал неоднократно, изобретая велосипед за велосипедом.

Постановка задачи

А не сделать ли сынцу что-нибудь, чтоб можно было катать, чтоб разноцветное и с лампочками, но чуть умнее, чем просто мигающий светодиод?! А что, если это будет пластиковый шар, утыканный разноцветными диодами, знающий где верх, а где низ? По-моему, любому малышу, это должно понравится, а уж отцу поковыряться вечером — милое дело.



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