Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Какой код быстрее(Си)?

Непрочитано 14.08.2012, 21:08  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

Сообщение от =GM= Посмотреть сообщение
А вообще, кто бы объяснил: в ветке обсуждается вопрос на си, но за каким-то чертом сишники лезут в ассемблерный листинг, зачем?
Однако вы так разве не делаете ? Всегда полезно знать во что ваш бред обернулся ...
Реклама:
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 14.08.2012, 21:54  
Alecsej
Вид на жительство
 
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
Alecsej на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

http://www.atmel.com/Images/doc8453.pdf
Alecsej вне форума  
Сказали "Спасибо" Alecsej
granel (15.08.2012)
Непрочитано 15.08.2012, 00:11  
dash
Частый гость
 
Регистрация: 19.08.2004
Сообщений: 33
Сказал спасибо: 6
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
dash на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

Сообщение от =GM= Посмотреть сообщение
А вообще, кто бы объяснил: в ветке обсуждается вопрос на си, но за каким-то чертом сишники лезут в ассемблерный листинг, зачем?
кто-то из великих (по моему это Керниган) сказал что-то вроде "легко писать на С, когда знаешь как каждая строчка компилируется в ассемблер". я всеми рукам и ногами "за"
и когда подтягиваюсь на очередной контроллер сразу же изучаю как что компилится, дабы сразу писать эффективный код. хотя последнее время начинаю замечать: компилеры стали очень умными, так что все изощрения их только сбивают с толку. сейчас им надо максимально тупо объяснить, что нужно сделать, соптимизят они сами. в итоге третий вариант победил
а на счет эффективности - а вдруг ТС нужно этот код в обработчик прерывания поставить.
кстати, не знаю, с чего я взял, что надо компилить под ARM... видимо перед этим читал какой-то другой топик про ARM сорри
dash вне форума  
Эти 2 пользователя(ей) сказали Спасибо dash за это сообщение:
Dmitri_256 (16.08.2012), dosikus (15.08.2012)
Непрочитано 15.08.2012, 00:11  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию ха-р-р-о-ший документ, да

Впрочем, посмотрел по диагонали, немного надуманно. Вот на странице 6 приводят пример, как сэкономить 2 байта в теле цикла, типа надо использовать декремент, а не инкремент

int main(void)
{
uint8 local=0;
do
{
PORTB ^=0x01;
local++;
}
while(local‹100);
}

Утверждают, что здесь на два байта больше, чем во фрагменте ниже

int main(void)
{
uint8 local=100;
do
{
PORTB ^=0x01;
local--;
}
while(local);
}

Идиоты! И с инкрементом можно написать фрагмент такой же длины

int main(void)
{
uint8 local=255-99;
do
{
PORTB ^=0x01;
local++;
}
while(local);
}
=GM= вне форума  
Непрочитано 15.08.2012, 00:37  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: ха-р-р-о-ший документ, да

Сообщение от =GM= Посмотреть сообщение
int main(void)
{
uint8 local=0;
do
{
PORTB ^=0x01;
local++;
}
while(local‹100);
}

Утверждают, что здесь на два байта больше, чем во фрагменте ниже

int main(void)
{
uint8 local=100;
do
{
PORTB ^=0x01;
local--;
}
while(local);
}
В ASCII так точно.
alvadep вне форума  
Непрочитано 15.08.2012, 10:49  
vasenik
Частый гость
 
Регистрация: 02.10.2009
Сообщений: 18
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
vasenik на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

а как Вам такой код:
count = MAX;

...

if( count-- )
{
/* operations */
}
else
{
count = MAX;
}
я обычно так действую
vasenik вне форума  
Непрочитано 15.08.2012, 12:49  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

Сообщение от vasenik Посмотреть сообщение
а как Вам такой код:
Код:
 count = MAX;
...
 if( count-- ) 
 {
    /* operations */
 }
else
{
  count = MAX;
}
я обычно так действую
Смотря что вы задумали. Если вам нужно исключить /* operation */ при нулевом значении счетчика, тогда да. Это обычно делают тогда, когда текущее состояние счетчика не имеет значения, а важно количество итераций. Нужно быть внимательным.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 15.08.2012, 14:40  
vasenik
Частый гость
 
Регистрация: 02.10.2009
Сообщений: 18
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
vasenik на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

Сообщение от ut1wpr Посмотреть сообщение
Смотря что вы задумали. Если вам нужно исключить /* operation */ при нулевом значении счетчика, тогда да. Это обычно делают тогда, когда текущее состояние счетчика не имеет значения, а важно количество итераций. Нужно быть внимательным.
ну да, если необходимо значение счетчика, тогда данный код не подходит
vasenik вне форума  
Непрочитано 15.08.2012, 18:00  
Красный Свин
Частый гость
 
Регистрация: 12.10.2010
Сообщений: 27
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 14 сообщении(ях)
Красный Свин на пути к лучшему
По умолчанию Re: ха-р-р-о-ший документ, да

Сообщение от =GM= Посмотреть сообщение
Впрочем, посмотрел по диагонали, немного надуманно. Вот на странице 6 приводят пример, как сэкономить 2 байта в теле цикла, типа надо использовать декремент, а не инкремент
[...]
Ну... не надо считать себя умнее хорошего оптимизирующего компилятора

Я как-то тоже в одном критическом кусочке кода пытался умничать и "оптимизировать" на С, долго выбирал между конструкциями типа:

void Foo(uint32_t aInp)
{
(1) uint32_t val = aInp & 0xFFFF0000;
(2) uint32_t val = (aInp ››16) ‹‹ 16;
}

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

Опять же, "premature optimisation is a root of all evil" (c).
Попытка "теоретической экономии" пары байтиков без четкого понимания, нужно ли это и критериев оценки, ничего, кроме потери времени может и не принести

Хотя, безусловно, некоторые особенности реализации надо знать, типа различного поведения пост и пре- декремента для non-POD объектов с С++. Тут уж компилятор может и не помочь..
Красный Свин вне форума  
Непрочитано 18.08.2012, 19:34  
ek6lx
Частый гость
 
Аватар для ek6lx
 
Регистрация: 29.05.2010
Адрес: Армения, Гюмри
Сообщений: 19
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
ek6lx на пути к лучшему
По умолчанию Re: Какой код быстрее(Си)?

Добрый вечер!
Позвольте выразить мое мнение про Си и Ассемблер. На Си гораздо легче
написать программы, чем на Ассемблере. Ассемблер требует более глубокие знания микроконтроллера. Программа на СИ похож на черный ящик, компилятор сам находит все регистры, область памяти и сам впыхает туда программу и данные. Там все зависит ни от Вас, а от того программиста, кто написал код компилятора. А на Ассемблере
микроконтроллер как на ладонии, все видно и ты можешь от МК взять максимум, будет глюк, ошибка, сразу можно найти ошибку и принять меры, исправить все. И учтите, программа на Ассемблере на кристалле занимает 3 раза меньше места, чем на СИ. Если вы всерьез занимаетесь программированием МК, то лучше Ассемблер. Я долгое время занимаюсь программированием МК, преподаю, и и пришел к такому выводу. Удачи всем !!!
ek6lx вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой контроллер быстрее дергает ногами ? cignal Микроконтроллеры, АЦП, память и т.д 32 28.03.2010 00:50
В какой программе компелить код (подключение #include ) FedorChek Микроконтроллеры, АЦП, память и т.д 4 04.05.2009 20:00
Во какой код-грабер! retas Отвлекитесь, эмбеддеры! 0 27.01.2009 20:41
преобразователь код-код zazan111 TTL и CMOS логика 18 05.01.2009 06:11
[Решено] Почему SATA быстрее ATA и т.д. Дима Ремонт оргтехники 7 15.01.2004 22:41


Часовой пояс GMT +4, время: 17:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.