|
Выбор пути ... Assembler или C ? |
|
|
|
Mar 3 2008, 19:02
|

Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 19-12-07
Из: Житоимр
Пользователь №: 33 457

|
Всем добрый день! Недавно начал осваивать микроконтроллеры фирмы ATMEL. Первое с чем имел дело - AT90S2313, теперь перешёл на ATmega. Проэкты в основном небольшие (думаю это времено), пользуюсь AVR Studio. Язык, который использую - assembler. Часто посещаю форум, и особо часто попадаю на программы написанные на С. Так вот, хочу задать вопрос всем, кто чувствует себя уже уверенными пользователями обоих языков, вы не могли бы обьяснить начинающему:
1. почему люди переходят с assemblera на C? 2. какие плюсы и минусы языка С? 3. где без языка С нельзя обойтись? 4. лично ваше мнение относительно обоих? (ненормативная лексика принимается:-) Всем, кто отзовется, заранее благодарен!
|
|
|
|
|
 |
Ответов
(60 - 73)
|
Mar 6 2008, 18:31
|
Cундук
    
Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269

|
Цитата(Kalina @ Mar 6 2008, 21:00)  Уважаемые форумчане, большое спаисбо  за тот опыт работы с языками программирования, которым вы поделелись. Кто бы что не говорил, а знать, конечно, необходимо оба языка, иначе никогда не будет права выбора, так как выбирать будет не из чего  . Конечным принятым решением было начало освоения С. P.S. Какую литературу вы могли бы посоветать для начинающего? И ваше мнение о книге "Программирование на языке C для AVR и PIC микроконтроллеров" Шпак Ю.А.? Эту книгу советовали на этой площадке неоднократно, но я не поленюсь и посоветую ее Вам лишний раз: Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер. с англ. - М.: Издательский дом "Вильямс", 2007. - 304 с.: ил. - Парал. тит. англ. ISBN 979-5-8459-0891-9 (рус.) ББК 32.973.26-016.2.75 К36 УДК 004.438 Покупал здесь приблизительно за 300 руб. Может есть где-нибудь еще подешевле...
|
|
|
|
|
Mar 6 2008, 18:49
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(rv3dll(lex) @ Mar 6 2008, 19:57)  вопрос с чередованием не снят В таких случаях я обычно говорю "И чтобы он еще за пивом бегал!" Цитата(rv3dll(lex) @ Mar 6 2008, 19:57)  сейчас выглядит глупо))) но программы аонов конца 80х начала 90х в 4к пзу возможностями не страдали "Сто дюжих коней под капот я запрятал, а прадед везде успевал на одном". Ушло то время, когда процессор с 4к пзу стоил ползарплаты инженера. Да, "проредить" программу на С дерганьем пина не удастся. Ну не буду я убивать время, творя программу на асме - я просто возьму другой процессор, пусть вдвое дороже, который умеет ногой дергать аппаратно через таймер и забуду об этой проблеме в принципе. Сэкономленное рабочее время стоит дороже, чем разница в цене процессора. Если вдруг мне придется пректировать устройство (с афигенно большим тиражом), в котором конечная программа будет на ассемблере - я все равно спроектирую ее на С, потом возьму ассемблерный результат компилятора и отрихтую уже его. Я на примере выше показал, как такой подход позволяет экономить время разработки. Переубеждать вас я не собираюсь. Цитата(Прохожий @ Mar 6 2008, 20:31)  Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Ее можно легко найти в Интернете (достаточно спросить у гугля "Керниган Ритчи"), например вот или вот, но нужно именно второе издание! С момента выхода первого издания язык очень сильно изменился.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 6 2008, 19:03
|

Полное ничтожество
    
Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354

|
Цитата(Сергей Борщ @ Mar 6 2008, 21:35)  В таких случаях я обычно говорю "И чтобы он еще за пивом бегал!""Сто дюжих коней под капот я запрятал, а прадед везде успевал на одном". Ушло то время, когда процессор с 4к пзу стоил ползарплаты инженера. Да, "проредить" программу на С дерганьем пина не удастся. Ну не буду я убивать время, творя программу на асме - я просто возьму другой процессор, пусть вдвое дороже, который умеет ногой дергать аппаратно через таймер и забуду об этой проблеме в принципе. Сэкономленное рабочее время стоит дороже, чем разница в цене процессора. Если вдруг мне придется пректировать устройство (с афигенно большим тиражем), в котором конечная программа будет на ассемблере - я все равно спроектирую ее на С, потом возьму ассемблерный результат компилятора и отрихтую уже его. Я на примере выше показал, как такой подход позволяет экономить время разработки. Переубеждать вас я не собираюсь. я понял что это не моё и ушел сначала проц пдюс логика потом логика в проце а сейчас и программист пишет своё а я своё ))) и ответ на тему в 90 процентов случаев всё можно написать на СИ в 5 прочентах на ассемблере а в 5 оставшихся в грамотном подходе проектирования и ещё в плисинах использую свой кодовый язык - при написании своего процессора - в плисинахпамять двупортовая - поэтому на 1 блок 4 кбита в альтере например вешаю 2 проца с разных сторон)) работа в кодах по таблице - это даже ниже ассемблера)))
|
|
|
|
|
Mar 6 2008, 19:14
|
Cундук
    
Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269

|
Цитата(Сергей Борщ @ Mar 6 2008, 21:49)  Ее можно легко найти в Интернете (достаточно спросить у гугля "Керниган Ритчи"), например вот или вот, но нужно именно второе издание! С момента выхода первого издания язык очень сильно изменился. К сожалению, так и не научился читать с экрана, а если печатать 289 страниц формата А4, то потом неудобно читать, да и по деньгам приблизительно то же и выйдет. Не сочтите за рекламу, но книга достаточно хорошо издана, текст программок структурирован, рисунки внятные, формат самый подходящий. Мне, лично, так удобнее. К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги? Код int bitcount (unsigned x) { int b=0; while (x&=(x-1)) b++; return b; }
Сообщение отредактировал Прохожий - Mar 6 2008, 19:17
|
|
|
|
|
Mar 6 2008, 20:31
|

Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 19-12-07
Из: Житоимр
Пользователь №: 33 457

|
Цитата(Сергей Борщ @ Mar 6 2008, 21:49)  вот или вот, но нужно именно второе издание! Большое спасибо за ссылки, Керниган понятно и просто объясняет, приводя большое количество примеров. Уже печатаю  ! Цитата(Прохожий @ Mar 6 2008, 22:14)  да и по деньгам приблизительно то же и выйдет. Если не секрет, где вы книги покупаете?
Сообщение отредактировал Kalina - Mar 6 2008, 20:35
|
|
|
|
|
Mar 7 2008, 07:30
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(Прохожий @ Mar 6 2008, 22:14)  К стати, что скажете о таком решении упр. 2.9 (подсчет числа единиц в байте) из этой книги? Код int bitcount (unsigned x) { int b=0; while (x&=(x-1)) b++; return b; } Решение неправильное. Для числа 0x80, например, результат равен 0.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Mar 7 2008, 08:17
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(Algol @ Mar 7 2008, 10:51)  По поводу эффективного программирования на Си и для снятия многих вопросов из этой темы посоветую прочитать статью Си без СиЦитата Операторы ветвления. Эти операторы встречаются в программах наиболее часто и, одновременно с этим, наиболее часто являются источником ошибок в программах. ............................ Сравнивая операторы while и do… while можно заметить, что второй оператор имеет на одну команду перехода меньше по сравнению с первым и, стало быть, его использование более предпочтительно. ............................. Совет по оптимизации (C, asm): старайтесь там, где возможно, использовать оператор do…while. Я плакалъ ... Керниган с Ритчей отдыхают.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Mar 7 2008, 09:16
|
Местный
  
Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821

|
Цитата(Прохожий @ Mar 6 2008, 20:14)  К стати, что скажете о таком решении упр. 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; }
|
|
|
|
|
Mar 7 2008, 19:51
|
Cундук
    
Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269

|
Цитата(andron86 @ Mar 7 2008, 12:16)  я бы сказал вот так :-) Код 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(х)... все остальное полностью соответствует концепции псевдостека, поддерживаемого этим компилятором. В связи с этим и некое разрастание кода.
Сообщение отредактировал Прохожий - Mar 7 2008, 19:53
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|