суббота, 26 сентября 2009 г.
Центральная проблема информатики
Как известео, центральной проблемой современной информатики является вычисление значения i (линк):
int i = 5;
i = ++i + ++i;
Читать дальше......
Ярлыки:
программирование
суббота, 12 сентября 2009 г.
понедельник, 7 сентября 2009 г.
C programming for microcontrollers
Глава 3 - Краткое введение в C
Глава 4 - Типы, операторы, выражения.
Ну что я могу сказать... Весьма ниже среднего. Введение в язык настолько сумбурное, что я бы на месте новичка ничего не понял. Пока на 70 страниц две умные мысли: первая - не заморачивайтесь с ассемблером, учите сразу С, вторая - "не пиши умно, пиши просто".
С первым утверждением я согласен с двумя оговорками. Во-первых, в процессе обучения программированию изучение асма нужно хотя бы для того, чтобы понять, что это такое. Во-вторых, младшие модели восьмибитников имеют столь ничтожные ресурсы, что без ассемблера никак.
Со второй мыслью я согласен полностью. Автор советует вообще не запоминать приоритетов операций в С, чтобы не возникло соблазна экономить на скобках в выражениях. Экстремальный подход, но что-то в этом есть.
В остальном, в плане изучения языка лучше Кернигана и Ричи ничего пока не придумано. То, что предлагает автор, является бессвязной смесью из школьной информатики, нескольких страниц из учебника С, нескольких страниц с описанием архитектурры AVR и примера с настолько кривым быдлокодом, что даже разбираться в нем неохота.
Читать дальше......
Глава 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);
...
}
Читать дальше......
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-технологии, но не будут ограничиваться столь специфичным кругом тем. И если одинокий путник сочтет мои размышления интересными, или хотя бы любопытными, я буду рад прочесть оставленные им комментарии, однако, разумеется, только в том случае, если комментарии сии находятся в рамках приличия и не содержат бранных слов, более приличествующих завсегдатаям кабаков, нежели образованным и культурным людям, к кругу которых, как я надеюсь, принадлежите и вы, мой дорогой читатель.
Однако, позвольте представиться.
Зовут меня Владимир, я проживаю в славном городе Екатеринбурге и работаю инженером-программистом в одной небольшой фирме. Закончил я славный Радиотехнический факультет Уральского Государственного Технического Университета по специальности "Управление и информатика в технических системах", и могу добавить к сказанному лишь то, что годы, проведенные в стенах этого заведения, были лучшим временем моей жизни.
На этом пока откланяюсь.
С уважением,
Владимир.
Читать дальше......
Однако, позвольте представиться.
Зовут меня Владимир, я проживаю в славном городе Екатеринбурге и работаю инженером-программистом в одной небольшой фирме. Закончил я славный Радиотехнический факультет Уральского Государственного Технического Университета по специальности "Управление и информатика в технических системах", и могу добавить к сказанному лишь то, что годы, проведенные в стенах этого заведения, были лучшим временем моей жизни.
На этом пока откланяюсь.
С уважением,
Владимир.
Читать дальше......
Ярлыки:
блог
Подписаться на:
Сообщения (Atom)