суббота, 26 сентября 2009 г.

Центральная проблема информатики



Как известео, центральной проблемой современной информатики является вычисление значения i (линк):

int i = 5;
i = ++i + ++i;

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

суббота, 12 сентября 2009 г.

С днем программиста!

С днем программиста! Читать дальше......

понедельник, 7 сентября 2009 г.

C programming for microcontrollers

Глава 3 - Краткое введение в C
Глава 4 - Типы, операторы, выражения.



Ну что я могу сказать... Весьма ниже среднего. Введение в язык настолько сумбурное, что я бы на месте новичка ничего не понял. Пока на 70 страниц две умные мысли: первая - не заморачивайтесь с ассемблером, учите сразу С, вторая - "не пиши умно, пиши просто".
С первым утверждением я согласен с двумя оговорками. Во-первых, в процессе обучения программированию изучение асма нужно хотя бы для того, чтобы понять, что это такое. Во-вторых, младшие модели восьмибитников имеют столь ничтожные ресурсы, что без ассемблера никак.
Со второй мыслью я согласен полностью. Автор советует вообще не запоминать приоритетов операций в С, чтобы не возникло соблазна экономить на скобках в выражениях. Экстремальный подход, но что-то в этом есть.
В остальном,  в плане изучения языка лучше Кернигана и Ричи ничего пока не придумано. То, что предлагает автор, является бессвязной смесью из школьной информатики, нескольких страниц из учебника С, нескольких страниц с описанием архитектурры AVR и примера с настолько кривым быдлокодом, что даже разбираться в нем неохота.
Читать дальше......

C programming for microcontrollers

Начал читать "C programming for microcontrollers", автор Joe Pardue.
Книга состоит из 11 глав, 7 приложений и предметного указателя.







В книге рассматривается программирование на языке C для платформы Atmel AVR. Уровень - с нуля.
Прочел первые две главы.
Глава 1 - Введение.
Глава 2 - Краткий обзор программного обеспечения, первая программа.

Впечатления пока не составил. Однако на странице 30 можно наблюдать пример отъявленного быдлокодерства:

// Blinky.c
#include <avr io.h>
#include <avr delay.h>

int main(void)
{
  //set PORTD for output
  DDRD = 0xFF;
  while(1) {
    for(int i = 1; i <= 128; i = i*2)
    {
      PORTD = i;
      _delay_loop2(30000);
    }
    for(int i = 128;  i > 1; i -= i/2)

    {
      PORTD = i;
      _delay_loop2(30000);
    }
  }
  return 1;
}

В чем же быдлокодерство? С виду этот код представляет собой обычный код, демонстрирующий мигание светодиодов, своеобразный "hello, world" микроконтроллерного мира. Однако как забавно реализованы циклы! Посмотрите на это чудо:

    for(int i = 1; i <= 128; i = i*2)

Ну, я бы еще понял так:

    for(int i = 1; i <= 128; i *= 2)

или так:

    for(int i = 1; i <= 128; i <<= 1)

Вообще, я бы написал так:

    for(int i = 0; i <= 7; i++)
    {
      PORTD = (1 << i);
      ...
    }

Конечно, во многом это дело вкуса, однако мой вариант кажется мне более понятным.
Далее мы видим вообще нечто странное:

    for(int i = 128;  i > 1; i -= i/2)

Мой внутренний парсер сказал "э...". Берем бумагу и пишем следующее:

Итерация | Значение i (до)| Значение i/2 | Значение i (после) |
---------+----------------+--------------+--------------------+
    1    |     128        |      64      |        64          |
---------+----------------+----------- --+--------------------+
    2    |      64        |      32      |        32          |
...
---------+----------------+------------ -+--------------------+
    8    |      2         |       1      |        1           |

---------+----------------+--------------+--------------------+
На этом цикл завершается.
Т.е. мы видим, что:
1. i -= i/2 в данном случае эквивалентно i /= 2
2. можно и так i >>= 1;
3. и, не самый лаконичный, но самый понятный, на мой вкус, вариант:

    for(int i = 0; i <= 7; i++)
    {
      PORTD = (128 >> i);
      ...
    }


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

четверг, 3 сентября 2009 г.

О себе

Я начинаю свои записки сегодня, 3 сентября 2009 года, с тем, чтобы публиковать здесь различные статьи, заметки, записки, а также все, что придет мне в голову. Записки эти в основном будут касаться микроконтроллеров, ПЛК, встраиваемых систем, схемотехники, программирования, switch-технологии, но не будут ограничиваться столь специфичным кругом тем. И если одинокий путник сочтет мои размышления интересными, или хотя бы любопытными, я буду рад прочесть оставленные им комментарии, однако, разумеется, только в том случае, если комментарии сии находятся в рамках приличия и не содержат бранных слов, более приличествующих завсегдатаям кабаков, нежели образованным и культурным людям, к кругу которых, как я надеюсь, принадлежите и вы, мой дорогой читатель.
Однако, позвольте представиться.

Зовут меня Владимир, я проживаю в славном городе Екатеринбурге и работаю инженером-программистом в одной небольшой фирме. Закончил я славный Радиотехнический факультет Уральского Государственного Технического Университета по специальности "Управление и информатика в технических системах", и могу добавить к сказанному лишь то, что годы, проведенные в стенах этого заведения, были лучшим временем моей жизни.
На этом пока откланяюсь.

С уважением,
Владимир.
Читать дальше......