Перейти к содержанию
    

Выбор пути ... Assembler или C ?

Уважаемые форумчане, большое спаисбо :a14: за тот опыт работы с языками программирования, которым вы поделелись. Кто бы что не говорил, а знать, конечно, необходимо оба языка, иначе никогда не будет права выбора, так как выбирать будет не из чего :). Конечным принятым решением было начало освоения С.

P.S. Какую литературу вы могли бы посоветать для начинающего? И ваше мнение о книге "Программирование на языке C для AVR и PIC микроконтроллеров" Шпак Ю.А.?

Эту книгу советовали на этой площадке неоднократно, но я не поленюсь и посоветую ее Вам лишний раз:

Керниган, Брайан У., Ритчи, Деннис М.

Язык программирования С, 2-е издание.: Пер. с англ. - М.: Издательский дом "Вильямс", 2007. - 304 с.: ил. - Парал. тит. англ.

ISBN 979-5-8459-0891-9 (рус.)

ББК 32.973.26-016.2.75

К36

УДК 004.438

Покупал здесь приблизительно за 300 руб. Может есть где-нибудь еще подешевле...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос с чередованием не снят
В таких случаях я обычно говорю "И чтобы он еще за пивом бегал!"
сейчас выглядит глупо))) но программы аонов конца 80х начала 90х в 4к пзу возможностями не страдали
"Сто дюжих коней под капот я запрятал, а прадед везде успевал на одном".

Ушло то время, когда процессор с 4к пзу стоил ползарплаты инженера. Да, "проредить" программу на С дерганьем пина не удастся. Ну не буду я убивать время, творя программу на асме - я просто возьму другой процессор, пусть вдвое дороже, который умеет ногой дергать аппаратно через таймер и забуду об этой проблеме в принципе. Сэкономленное рабочее время стоит дороже, чем разница в цене процессора. Если вдруг мне придется пректировать устройство (с афигенно большим тиражом), в котором конечная программа будет на ассемблере - я все равно спроектирую ее на С, потом возьму ассемблерный результат компилятора и отрихтую уже его. Я на примере выше показал, как такой подход позволяет экономить время разработки. Переубеждать вас я не собираюсь.

 

Керниган, Брайан У., Ритчи, Деннис М.

Язык программирования С, 2-е издание.:

Ее можно легко найти в Интернете (достаточно спросить у гугля "Керниган Ритчи"), например вот или вот, но нужно именно второе издание! С момента выхода первого издания язык очень сильно изменился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В таких случаях я обычно говорю "И чтобы он еще за пивом бегал!""Сто дюжих коней под капот я запрятал, а прадед везде успевал на одном".

Ушло то время, когда процессор с 4к пзу стоил ползарплаты инженера. Да, "проредить" программу на С дерганьем пина не удастся. Ну не буду я убивать время, творя программу на асме - я просто возьму другой процессор, пусть вдвое дороже, который умеет ногой дергать аппаратно через таймер и забуду об этой проблеме в принципе. Сэкономленное рабочее время стоит дороже, чем разница в цене процессора. Если вдруг мне придется пректировать устройство (с афигенно большим тиражем), в котором конечная программа будет на ассемблере - я все равно спроектирую ее на С, потом возьму ассемблерный результат компилятора и отрихтую уже его. Я на примере выше показал, как такой подход позволяет экономить время разработки. Переубеждать вас я не собираюсь.

 

я понял что это не моё и ушел сначала проц пдюс логика потом логика в проце а сейчас и программист пишет своё а я своё ))) и ответ на тему в 90 процентов случаев всё можно написать на СИ в 5 прочентах на ассемблере а в 5 оставшихся в грамотном подходе проектирования

и ещё в плисинах использую свой кодовый язык - при написании своего процессора - в плисинахпамять двупортовая - поэтому на 1 блок 4 кбита в альтере например вешаю 2 проца с разных сторон)) работа в кодах по таблице - это даже ниже ассемблера)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ее можно легко найти в Интернете (достаточно спросить у гугля "Керниган Ритчи"), например вот или вот, но нужно именно второе издание! С момента выхода первого издания язык очень сильно изменился.

К сожалению, так и не научился читать с экрана, а если печатать 289 страниц формата А4, то потом неудобно читать, да и по деньгам приблизительно то же и выйдет. Не сочтите за рекламу, но книга достаточно хорошо издана, текст программок структурирован, рисунки внятные, формат самый подходящий. Мне, лично, так удобнее.

К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги?

int bitcount (unsigned x)
{
int b=0;
while (x&=(x-1)) b++;
return b;
}

Изменено пользователем Прохожий

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот или вот, но нужно именно второе издание!

 

Большое спасибо за ссылки, Керниган понятно и просто объясняет, приводя большое количество примеров. Уже печатаю :) !

 

да и по деньгам приблизительно то же и выйдет.

 

Если не секрет, где вы книги покупаете?

Изменено пользователем Kalina

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не секрет, где вы книги покупаете?

А Вы по моей ссылке пройдите. Это книжный интернет-магазин. Оплата наложенным платежом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прохожий

Спасибо! Хороший магазин с демократичными ценами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги?

int bitcount (unsigned x)
{
int b=0;
while (x&=(x-1)) b++;
return b;
}

Решение неправильное. Для числа 0x80, например, результат равен 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу эффективного программирования на Си и для снятия многих вопросов из этой темы посоветую прочитать статью

Си без Си

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу эффективного программирования на Си и для снятия многих вопросов из этой темы посоветую прочитать статью

Си без Си

Операторы ветвления.

Эти операторы встречаются в программах наиболее часто и, одновременно с этим, наиболее часто являются источником ошибок в программах.

............................

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

.............................

Совет по оптимизации (C, asm): старайтесь там, где возможно, использовать оператор do…while.

:crying:

Я плакалъ ... Керниган с Ритчей отдыхают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

int bitcount (unsigned x)
{
int b=0;
while (x&=(x-1)) b++;
return b;
}

Посмотрите книгу "Алгоритмические трюки для программистов" Генри Уоррен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги?

int bitcount (unsigned x)
{
int b=0;
while (x&=(x-1)) b++;
return b;
}

 

я бы сказал вот так :-)

int bitcount (unsigned x)
{
int b=0;
while (x){
x &= (x-1);
b++;
}
return b;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я плакалъ ... Керниган с Ритчей отдыхают.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я бы сказал вот так :-)

int bitcount (unsigned x)
{
int b=0;
while (x){
x &= (x-1);
b++;
}
return b;
}

Я сделал вот так:

unsigned char bitcount (unsigned char x)
{
unsigned char b=0;
if(x)
    {
    b=1;
    while (x&=(x-1)) b++;
    }
return b;
}

После трансляции получил следующее:

979:               unsigned char bitcount (unsigned char x)
  0BA2    D912     RCALL 0xdc8
  0BA4    52E6     MOVF 0xfe6, F, ACCESS
980:               {
981:               unsigned char b=0;
  0BA6    6ADF     CLRF 0xfdf, ACCESS
982:               if(x)
  0BA8    0EFE     MOVLW 0xfe
  0BAA    50DB     MOVF 0xfdb, W, ACCESS
  0BAC    E011     BZ 0xbd0
983:                   {
984:                   b=1;
  0BAE    0E01     MOVLW 0x1
  0BB0    6EDF     MOVWF 0xfdf, ACCESS
985:                   while (x&=(x-1)) b++;
  0BB2    0EFE     MOVLW 0xfe
  0BB4    04DB     DECF 0xfdb, W, ACCESS
  0BB6    6E3C     MOVWF 0x3c, ACCESS
  0BB8    50D9     MOVF 0xfd9, W, ACCESS
  0BBA    0FFE     ADDLW 0xfe
  0BBC    6EE9     MOVWF 0xfe9, ACCESS
  0BBE    0EFF     MOVLW 0xff
  0BC0    20DA     ADDWFC 0xfda, W, ACCESS
  0BC2    6EEA     MOVWF 0xfea, ACCESS
  0BC4    503C     MOVF 0x3c, W, ACCESS
  0BC6    16EF     ANDWF 0xfef, F, ACCESS
  0BC8    50EF     MOVF 0xfef, W, ACCESS
  0BCA    E002     BZ 0xbd0
  0BCC    2ADF     INCF 0xfdf, F, ACCESS
  0BCE    D7F1     BRA 0xbb2
986:                   }
987:               return b;
  0BD0    50DF     MOVF 0xfdf, W, ACCESS
988:               }
  0BD2    52E5     MOVF 0xfe5, F, ACCESS
  0BD4    D192     BRA 0xefa

Компилятор МСС18, оптимизация включена. Кроме непонятно зачем вставленного MOVLW 0xfe в операторе if(х)... все остальное полностью соответствует концепции псевдостека, поддерживаемого этим компилятором. В связи с этим и некое разрастание кода.

Изменено пользователем Прохожий

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...