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

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

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

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

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

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


 
Опции темы

CodeVisionAVR 2.60

Непрочитано 25.01.2014, 22:51  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 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  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
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  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 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  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от tempora Посмотреть сообщение
Ни разу не о нём.
Ну если вы даже это не можете понять, с вами бессмыссленно разговаривать.
Godzilla82 вне форума  
Непрочитано 26.01.2014, 00:39  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 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  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 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  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

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

Сообщение от _Артём_ Посмотреть сообщение
Легко:
...
Скажите, что для RxNextC0 volatile не нужен, можно её в регистры запихать? А если это xmega256A3U с 7-ю UART-ами (и не только UART-ами)? Все индексы в регистры поместятся?
Ну и зачем здесь volatile указывать? Зачем он здесь нужен? Что изменится, если мы его не укажем (речь по-прежнему идёт о CV)?
Godzilla82 вне форума  
Непрочитано 26.01.2014, 00:50  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 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  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

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

Пожалуйста по пунктам.
Godzilla82 вне форума  
Непрочитано 26.01.2014, 00:59  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 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, время: 11:09.


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