syv 0 6 марта, 2008 Опубликовано 6 марта, 2008 · Жалоба Уважаемые форумчане, большое спаисбо :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 руб. Может есть где-нибудь еще подешевле... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 6 марта, 2008 Опубликовано 6 марта, 2008 · Жалоба вопрос с чередованием не снятВ таких случаях я обычно говорю "И чтобы он еще за пивом бегал!"сейчас выглядит глупо))) но программы аонов конца 80х начала 90х в 4к пзу возможностями не страдали"Сто дюжих коней под капот я запрятал, а прадед везде успевал на одном". Ушло то время, когда процессор с 4к пзу стоил ползарплаты инженера. Да, "проредить" программу на С дерганьем пина не удастся. Ну не буду я убивать время, творя программу на асме - я просто возьму другой процессор, пусть вдвое дороже, который умеет ногой дергать аппаратно через таймер и забуду об этой проблеме в принципе. Сэкономленное рабочее время стоит дороже, чем разница в цене процессора. Если вдруг мне придется пректировать устройство (с афигенно большим тиражом), в котором конечная программа будет на ассемблере - я все равно спроектирую ее на С, потом возьму ассемблерный результат компилятора и отрихтую уже его. Я на примере выше показал, как такой подход позволяет экономить время разработки. Переубеждать вас я не собираюсь. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Ее можно легко найти в Интернете (достаточно спросить у гугля "Керниган Ритчи"), например вот или вот, но нужно именно второе издание! С момента выхода первого издания язык очень сильно изменился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rv3dll 0 6 марта, 2008 Опубликовано 6 марта, 2008 · Жалоба В таких случаях я обычно говорю "И чтобы он еще за пивом бегал!""Сто дюжих коней под капот я запрятал, а прадед везде успевал на одном". Ушло то время, когда процессор с 4к пзу стоил ползарплаты инженера. Да, "проредить" программу на С дерганьем пина не удастся. Ну не буду я убивать время, творя программу на асме - я просто возьму другой процессор, пусть вдвое дороже, который умеет ногой дергать аппаратно через таймер и забуду об этой проблеме в принципе. Сэкономленное рабочее время стоит дороже, чем разница в цене процессора. Если вдруг мне придется пректировать устройство (с афигенно большим тиражем), в котором конечная программа будет на ассемблере - я все равно спроектирую ее на С, потом возьму ассемблерный результат компилятора и отрихтую уже его. Я на примере выше показал, как такой подход позволяет экономить время разработки. Переубеждать вас я не собираюсь. я понял что это не моё и ушел сначала проц пдюс логика потом логика в проце а сейчас и программист пишет своё а я своё ))) и ответ на тему в 90 процентов случаев всё можно написать на СИ в 5 прочентах на ассемблере а в 5 оставшихся в грамотном подходе проектирования и ещё в плисинах использую свой кодовый язык - при написании своего процессора - в плисинахпамять двупортовая - поэтому на 1 блок 4 кбита в альтере например вешаю 2 проца с разных сторон)) работа в кодах по таблице - это даже ниже ассемблера))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 6 марта, 2008 Опубликовано 6 марта, 2008 (изменено) · Жалоба Ее можно легко найти в Интернете (достаточно спросить у гугля "Керниган Ритчи"), например вот или вот, но нужно именно второе издание! С момента выхода первого издания язык очень сильно изменился. К сожалению, так и не научился читать с экрана, а если печатать 289 страниц формата А4, то потом неудобно читать, да и по деньгам приблизительно то же и выйдет. Не сочтите за рекламу, но книга достаточно хорошо издана, текст программок структурирован, рисунки внятные, формат самый подходящий. Мне, лично, так удобнее. К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги? int bitcount (unsigned x) { int b=0; while (x&=(x-1)) b++; return b; } Изменено 6 марта, 2008 пользователем Прохожий Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima34 0 6 марта, 2008 Опубликовано 6 марта, 2008 (изменено) · Жалоба вот или вот, но нужно именно второе издание! Большое спасибо за ссылки, Керниган понятно и просто объясняет, приводя большое количество примеров. Уже печатаю :) ! да и по деньгам приблизительно то же и выйдет. Если не секрет, где вы книги покупаете? Изменено 6 марта, 2008 пользователем Kalina Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 6 марта, 2008 Опубликовано 6 марта, 2008 · Жалоба Если не секрет, где вы книги покупаете? А Вы по моей ссылке пройдите. Это книжный интернет-магазин. Оплата наложенным платежом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pyku_He_oTTyda 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба Прохожий Спасибо! Хороший магазин с демократичными ценами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Demeny 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги? int bitcount (unsigned x) { int b=0; while (x&=(x-1)) b++; return b; } Решение неправильное. Для числа 0x80, например, результат равен 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Algol 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба По поводу эффективного программирования на Си и для снятия многих вопросов из этой темы посоветую прочитать статью Си без Си Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Demeny 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба По поводу эффективного программирования на Си и для снятия многих вопросов из этой темы посоветую прочитать статью Си без Си Операторы ветвления. Эти операторы встречаются в программах наиболее часто и, одновременно с этим, наиболее часто являются источником ошибок в программах. ............................ Сравнивая операторы while и do… while можно заметить, что второй оператор имеет на одну команду перехода меньше по сравнению с первым и, стало быть, его использование более предпочтительно. ............................. Совет по оптимизации (C, asm): старайтесь там, где возможно, использовать оператор do…while. :crying: Я плакалъ ... Керниган с Ритчей отдыхают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба int bitcount (unsigned x) { int b=0; while (x&=(x-1)) b++; return b; } Посмотрите книгу "Алгоритмические трюки для программистов" Генри Уоррен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andron86 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба К стати, что скажете о таком решении упр. 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 7 марта, 2008 Опубликовано 7 марта, 2008 · Жалоба Я плакалъ ... Керниган с Ритчей отдыхают. Совершенно правильные обыденные вещи. Степень влияния на результат у прилично оптимизирующих компиляторов должна быть никакой, но тем не менее дела обстоят именно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 7 марта, 2008 Опубликовано 7 марта, 2008 (изменено) · Жалоба я бы сказал вот так :-) 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(х)... все остальное полностью соответствует концепции псевдостека, поддерживаемого этим компилятором. В связи с этим и некое разрастание кода. Изменено 7 марта, 2008 пользователем Прохожий Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться