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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 25.01.2014, 22:51   #91
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
Только я себе с трудом представляю задачу, где бы нужно было принудительно размещать переменную во внутренней памяти МК, при возможности её размещения в регистре.
"С трудом представляю" - это не аргумент, это признание, в данном конкретном случае - неприличное.
Возникает такой вопрос - а пример, приведённый вами же для WinAVR, тоже с трудом себе представляете? Судя по выводам, сделанным из него, так и есть... Так может, нужно над ним немного подумать?

Сообщение от Godzilla82 Посмотреть сообщение
CV более миролюбив. Он вполне позволяет жить и здравствовать глобальным переменным в регистрах без указания volatile.
Какое глубокое непонимание предмета...
Во-первых, CV не является неким исключительным случаем - другие компиляторы тоже могут работать с глобальными переменными, размещёнными в регистрах, а во-вторых, вы что же - в самом деле думаете, что смысл volatile сводится к тому, что если его не ставить, то можно хранить глобальные переменные в регистрах?
А если читать вашу мысель буквально... то другие компиляторы, значит, этого не позволяют, да? От же ж, невезуха...

Пример на IAR for AVR, v.6.0:
Код:
main.c:

#pragma vector = TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void)
{
    a++;
    b--;
    c=a+b;
    d ^= 1;
}


main.map:
                ****************************************
                *                                      *
                *            RUNTIME MODEL             *
                *                                      *
                ****************************************

  R12             = VAR
  R13             = VAR
  R14             = VAR
  R15             = VAR

main.lst:

//   18 __interrupt void timer0_ovf_isr(void)
timer0_ovf_isr:
//   19 {
     ...
//   20     a++;
        INC     R12
//   21     b--;
        DEC     R13
//   22     c=a+b;
        MOV     R16, R12
        ADD     R16, R13
        MOV     R14, R16
//   23     d ^= 1;
        LDI     R16, 1
        EOR     R15, R16
//   24 }
        ...
        RETI

Сообщение от Godzilla82 Посмотреть сообщение
Если без него всё работает в разы быстрее.
А ничего, что оно работает некорректно?
Из интервью с потенциальной секретаршей: "Печатаю со скоростью 1000 знаков в минуту. ... правда, такая фигня получается. "
Сообщение от Godzilla82 Посмотреть сообщение
А что же он тогда делает в CV? Ну и для кучности - в WinAVR?
А посмотреть на 5 постов выше и прочесть? Для вас же писали...

Сообщение от Godzilla82 Посмотреть сообщение
Просто согласитесь, что были неправы насчёт volatile
Да, хороший кишмиш в голове... Так, в чём же неправы-то? Квалификатор volatile в предложенном исходнике отсутствует напрочь, а документация запрещает переменным быть регистровыми только если он есть... И в чём же тогда неправота?
Реклама:
__________________
There's always more than one way to skin a cat.
tempora вне форума   Ответить с цитированием
Непрочитано 25.01.2014, 23:50   #92
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от tempora Посмотреть сообщение
"С трудом представляю" - это не аргумент, это признание... Так может, нужно над ним немного подумать?
Думать надо в первую очередь вам, чтобы не ляпать как корова.

Если так хочется, приведите пример для CV, где использование volatile для глобальных переменных повышает быстродействие, уменьшает объём кода и т.п. Или вообще, пример, в котором без volatile не обойтись.

Сообщение от tempora Посмотреть сообщение
Во-первых, CV не является неким исключительным случаем - другие компиляторы тоже могут работать с глобальными переменными, размещёнными в регистрах
А если читать вашу мысель буквально... то другие компиляторы, значит, этого не позволяют, да?
Надо не только читать, но и понимать, что у вас не получается.
Речь идёт только о CV и volatile прменительно к CV.
Если вы не знаете, откуда звон, советую начать именно с этого. Даю подсказку: посты 30, 31 и 32.

Сообщение от tempora Посмотреть сообщение
Пример на IAR for AVR, v.6.0:
Неужели так трудно понять, что речь идёт только о CV?

Сообщение от tempora Посмотреть сообщение
Так, в чём же неправы-то?
Конкретно пост 68. В общем-то и много других, где говорится, что без volatile код жутко не оптимальный.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:32   #93
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
речь идёт только о CV
Ни разу не о нём. Вам задали вопрос - с чего вы взяли, что в нём volatile "не актуален", а далее вы начали пороть чушь.

Сообщение от Godzilla82 Посмотреть сообщение
чтобы не ляпать как корова
Вы об этом? ::
Сообщение от Godzilla82 Посмотреть сообщение
без volatile код жутко не оптимальный
Бред на бреде и бредом погоняет...

___________________________
Сообщение от Godzilla82 Посмотреть сообщение
В CV это не актуально.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 26.01.2014 в 00:35.
tempora вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:36   #94
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от tempora Посмотреть сообщение
Ни разу не о нём.
Ну если вы даже это не можете понять, с вами бессмыссленно разговаривать.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:39   #95
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
Думать надо в первую очередь вам, чтобы не ляпать как корова.
Думать надо всем, а ещё лучше соображать...
Сообщение от Godzilla82 Посмотреть сообщение
Если так хочется, приведите пример для CV, где использование volatile для глобальных переменных повышает быстродействие, уменьшает объём кода и т.п.
Вы оправдываете свой nick - требуете чудовищного. Почему понимаете?volatile служит для того чтобы запретить компилятору оптимизировать обращения к переменной.Как же компилятор может выдать более быстрый, компактный или оптимальный код? Ему ведь запрещено.
Сообщение от Godzilla82 Посмотреть сообщение
Или вообще, пример, в котором без volatile не обойтись.
Легко:
Код:
volatile uint16_t RxNextC0, RxFirstC0;
volatile uint8_t RxBufferC0[512];
ISR(USARTC0_RXC_vect)
{
	uint8_t new_byte=USARTC0.DATA;
	uint16_t next=RxNextC0;
	RxBufferC0[next++]=new_byte;
	if (next›=sizeof(RxBufferC0))
		next=0;
	RxNextC0=next;
}
int main()
{
	while (1) {
		cli();
		uint16_t next=RxNextC0,first=RxFirstC0;
		sei();
		if (next!=first) {......}
	}
}
Скажите, что для RxNextC0 volatile не нужен, можно её в регистры запихать? А если это xmega256A3U с 7-ю UART-ами (и не только UART-ами)? Все индексы в регистры поместятся?
Сообщение от Godzilla82 Посмотреть сообщение
Надо не только читать, но и понимать, что у вас не получается.
Речь идёт только о CV и volatile прменительно к CV.
Если вы не знаете, откуда звон, советую начать именно с этого. Даю подсказку: посты 30, 31 и 32.
Неужели так трудно понять, что речь идёт только о CV?
Про CV говорят, что у него Си не соответствует стандартам, а только похож на Си. Но тут и CV сделан как и другие компиляторы - volatile нужен.
Сообщение от Godzilla82 Посмотреть сообщение
Конкретно пост 68. В общем-то и много других, где говорится, что без volatile код жутко не оптимальный.
Речь не об оптимальности, а о корректности программы.

Последний раз редактировалось _Артём_; 26.01.2014 в 00:54.
_Артём_ вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:47   #96
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

"Ну, если вы даже это не можете понять":

Сообщение от ut1wpr Посмотреть сообщение
ежели в CV "volatile" уже не актуален (пост 32), то жизнь теряет свой смысл!
Сообщение от Godzilla82 Посмотреть сообщение
Всё равно не понимаю вашего юмора.
Сообщение от _Артём_ Посмотреть сообщение
а на ПК-шном Ц volatile используется? Или нет?
Сообщение от nahimovv Посмотреть сообщение
Но некоторые, к сожалению, этого не понимают.
Сообщение от Godzilla82 Посмотреть сообщение
А причём тут volatile?
Сообщение от SasaVitebsk Посмотреть сообщение
Да над вами смеются в голос, а вы даже не замечаете.
Сообщение от Godzilla82 Посмотреть сообщение
volatile принудительно заставляет компилятор хранить переменную в памяти.
Сообщение от _Артём_ Посмотреть сообщение
Чушь порете...
ну, и так далее.


__________________
Это не вы забыли? :
Сообщение от Godzilla82 Посмотреть сообщение
бессмыссленно разговаривать.
__________________
There's always more than one way to skin a cat.
tempora вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:50   #97
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от _Артём_ Посмотреть сообщение
требуете чудовищного. Почему понимаете?volatile служит для того чтобы запретить компилятору оптимизировать обращения к переменной.Как же компилятор может выдать более быстрый, компактный или оптимальный код? Ему ведь запрещено.
Так именно об этом я и говорю, зачем мои слова переиначивать?

Сообщение от _Артём_ Посмотреть сообщение
Легко:
...
Скажите, что для RxNextC0 volatile не нужен, можно её в регистры запихать? А если это xmega256A3U с 7-ю UART-ами (и не только UART-ами)? Все индексы в регистры поместятся?
Ну и зачем здесь volatile указывать? Зачем он здесь нужен? Что изменится, если мы его не укажем (речь по-прежнему идёт о CV)?
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:50   #98
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от _Артём_ Посмотреть сообщение
Речь не об оптимальности, а о корректности программы.
И ещё о полном непонимании Godzill'ой смысла поднятой им темы.
__________________
There's always more than one way to skin a cat.
tempora вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:52   #99
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Ну и в чём я не прав? Для вас ещё раз большими буквами: речь идёт о CV.

Пожалуйста по пунктам.
Godzilla82 вне форума   Ответить с цитированием
Непрочитано 26.01.2014, 00:59   #100
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
Ну и в чём я не прав?
На последних шести страницах, кои, как вы полагаете, вы "хорошо поняли", вам об этом уже раз надцать было сказано. Отсутствие результата у таких значительных усилий не оставляет надежды на то, что N+1-е объяснение что-либо изменит.
__________________
There's always more than one way to skin a cat.
tempora вне форума   Ответить с цитированием
Ответ

Закладки


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

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:30.


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