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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 02.02.2014, 15:42   #231
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
Я ему помню пишу что-нибудь типа for(i=0;i‹15;i++) а он реально Инициализирует переменную 15 и делает декремент. Это меня убивало. Кстати думаю на x51 такое нормальный компилятор будет вытворять. Так как DJNZ команда эффективнее.
Такую оптимизацию можно понять. Компилятор может делать всё что угодно, если код остаётся работоспособным. Но глумиться над программистом как в примере, который я привёл выше - кто ему дал такое право?
Реклама:
olc0267 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 15:46   #232
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
TCNT0 объявлена как volatile в хидере на конкретный процессор. Прикольно правда?
Обычное явление. Это же не CV, поэтому volatile - стандартный приём.

Сообщение от SasaVitebsk Посмотреть сообщение
На вопрос зачем так выёживаться программисту, приведу пример:
Возьмите свою программную задержку. И выполните (даже с volatile) на нескольких компах. Подсказываю: размер задержки будет зависеть от производительности проца и ...
Какая разница - сколько тактов. Я просил процессор выполнить пустой цикл столько-то раз. Я не просил процессор курить ровно "столько-то".

Когда мне нужна будет чёткая задержка во столько-то мс, я буду думать как это реализовать учитывая среду, в которой выполняется программа.

Например на PC все приёмы, реализованные для AVR не прокатят (речь идёт о реализации задержки, скажем на 2 мкс). Даже если откомпилируются. Зачем об этом говорить?
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 15:48   #233
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от omercury Посмотреть сообщение
Код:
for(; a==0; --a) TCNT0;
Откуда ж ему взяться-то?
А что, в новом стандарте Си for - уже не цикл? Извиняйте, не знал.
CV, наверное, тоже не знает, если сделал это
Код:
                  _del:
                 ; 0000 001C 	for(; a==0; --a) TCNT0;
                 ;	a -› Y+0
                 _0x4:
000048 81e8      	LD   R30,Y
000049 81f9      	LDD  R31,Y+1
00004a 9730      	SBIW R30,0
00004b f439      	BRNE _0x5
00004c b7e2      	IN   R30,0x32
00004d 81e8      	LD   R30,Y
00004e 81f9      	LDD  R31,Y+1
00004f 9731      	SBIW R30,1
000050 83e8      	ST   Y,R30
000051 83f9      	STD  Y+1,R31
000052 cff5      	RJMP _0x4
                 _0x5:
                 ; 0000 001D }
000053 9622      	ADIW R28,2
000054 9508      	RET

Последний раз редактировалось olc0267; 02.02.2014 в 15:51.
olc0267 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 16:03   #234
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
Такую оптимизацию можно понять. Компилятор может делать всё что угодно, если код остаётся работоспособным.
Есть много случаев, в которых важно, с 15 или с 0 начинается выполнение цикла. Думаю, что GCC далеко не всегда так поступает.

Приведите исходный текст программы целиком.
PHP код:
for(; a==0; --aTCNT0
PHP код:
#include ‹avr\io.h›

int main(void)
{
unsigned char a;
255;
for(; 
a!=0; --aTCNT0;
begin:
goto 
begin;

Код:
int main(void)
{
  84:	8f ef       	ldi	r24, 0xFF	; 255
unsigned char a;
a = 255;
for(; a!=0; --a) TCNT0;
  86:	92 b7       	in	r25, 0x32	; 50
  88:	81 50       	subi	r24, 0x01	; 1
  8a:	e9 f7       	brne	.-6      	; 0x86 ‹main+0x2›
  8c:	ff cf       	rjmp	.-2      	; 0x8c ‹main+0x8›
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 16:10   #235
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
А что, в новом стандарте Си for - уже не цикл?
Ну если мыслить очень широко, то у вас простое сравнение, которое в случае изначального равенства переменной a нулю выполнится 1 раз.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 16:35   #236
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
Такую оптимизацию можно понять. Компилятор может делать всё что угодно, если код остаётся работоспособным. Но глумиться над программистом как в примере, который я привёл выше - кто ему дал такое право?
Вы полностью переворачиваете истину с ног на голову. Когда компилятор выкинул пустой цикл, то программа осталась работоспособной. В пустом цикле НИЧЕГО не делалось! И дальнейший ход программы не зависел от результатов работы цикла. Вы пишете, что если бы хотели сделать задержку то сделали бы её. Так сделайте. Вот и весь вам ответ.
Если я прочитаю данные в какую-то переменную, а дальше эту переменную использовать не буду, то компилятор это выкинет. И правильно сделает. Если я размещу в какой-то переменной значение, а потом использую эту переменную 1 раз (к примеру), то он выкинет переменную, а значение подставит прямо по тексту программы и так далее ...
Не надо ругать компилятор, коли вы не смогли донести до него алгоритм. Это не его вина а ваша. Вы привязываетесь к конкретной реализации но не понимаете глобальных вещей.

Например сейчас молодых программистов обучают правильному написанию что-нибудь типа того:
uint8_t GetTCNT0(void) {return(TCNT0);}
Откройте любой учебник объектно ориентированного программирования и посмотрите.. Так вот исходя из вашей логики, компилятор должен создать п/п в ней разместить чтение TCNT0 и в нужном месте обеспечить вызов. Но грамотный компилятор просто в месте вызова GetTCNT0 просто вставит чтение TCNT0. Вам кажется это глупость?

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

Чем выше уровень программирования тем ниже результирующая эффективность, но зато прозрачнее проект. Прога на си менее эффективна чем на асме. А применение ОС снижает производительность и съедает дополнительные ресурсы. С++ менее эффективен чем С. И так далее.
SasaVitebsk вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 17:34   #237
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
Например сейчас молодых программистов обучают правильному написанию что-нибудь типа того:
uint8_t GetTCNT0(void) {return(TCNT0);}
Откройте любой учебник объектно ориентированного программирования и посмотрите..
Вот это ужасно. Программистов учат красиво (честно говоря, не вижу никакой красоты) писать на си, совершенно не задумываяь об эффективности кода.

По сути, всё ложиться на плечи компилятора. Хорошо, если компилятор в нужном месте подставит, а если нет?

Кстати, Borland C++ для PC не выкидывает пустой цикл.

Программист должен знать, что означает вызов процедуры, примерный расход тактов процессора и стека при этом. И писать оптимально, не полагаясь на компилятор.

А то получается, что раньше влезало в 48 к памяти синклера, сейчас на DVD с трудом помещается.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 19:23   #238
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Цитата:
Например сейчас молодых программистов обучают правильному написанию что-нибудь типа того:
uint8_t GetTCNT0(void) {return(TCNT0);}
И правильно делают.
olc0267 вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 20:06   #239
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
в одном из регистров - заведомо 0х0
Откуда это следует? Укажите в приведённом листинге инструкцию, обнуляющую хотя бы один регистр.

Сообщение от olc0267 Посмотреть сообщение
занёс в один из них число 50
Нихрена себе, вы спутали - он прочитал из порта с адресом 50 (0x32), как ему было сказано.

Сообщение от olc0267 Посмотреть сообщение
Обязан, но не стал читать. См. мой предыдущий пост.
А это что - "in r24, 0x32 " - не чтение разве?!

Сообщение от olc0267 Посмотреть сообщение
Я ещё могу понять, когда компилятор решит сумничать,
Ошибаетесь. Не можете.

Сообщение от olc0267 Посмотреть сообщение
Аболютно серьёзно.
Ясно. "Больше вопросов не имею." ©

_____________________
Какие великие люди стоят на страже "репутации" CV!
И это неспроста.
__________________
There's always more than one way to skin a cat.
tempora вне форума   Ответить с цитированием
Непрочитано 02.02.2014, 21:13   #240
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
Прога на си менее эффективна чем на асме. А применение ОС снижает производительность и съедает дополнительные ресурсы. С++ менее эффективен чем С. И так далее.
Весьма спорные утверждения - всё зависит от ситуации и критерия эффективности.
››на си менее эффективна чем на асме
Если не учитывать расходы на поддержку и модификацию(не говоря уже о переносе на другую архитектуру).
››применение ОС снижает производительность
SuperLoop эффективнее? И прграмма такая же простая при этом?
››С++ менее эффективен чем С
C чего бы это? вовсе не факт...
_Артём_ вне форума   Ответить с цитированием
Ответ

Закладки

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeVisionAVR selevo Embedd С 11 26.02.2016 22:16
SD и CodeVisionAvr 2.04.4a sersne Микроконтроллеры, АЦП, память и т.д 29 24.03.2010 18:39
CodeVisionAVR V2.03.2 dimonbest Микроконтроллеры, АЦП, память и т.д 253 29.09.2009 22:37
New CodeVisionAVR 1.25.8 dimonbest Микроконтроллеры, АЦП, память и т.д 15 07.02.2008 12:56
Help CodeVisionAVR Serg79 Микроконтроллеры, АЦП, память и т.д 3 15.12.2005 23:32


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot