25.01.2014, 22:51
|
#91
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
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.
|
|
|
|
25.01.2014, 23:50
|
#92
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
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 код жутко не оптимальный.
|
|
|
|
26.01.2014, 00:32
|
#93
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
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.
|
|
|
|
26.01.2014, 00:36
|
#94
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от tempora
|
Ни разу не о нём.
|
Ну если вы даже это не можете понять, с вами бессмыссленно разговаривать.
|
|
|
|
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
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: CodeVisionAVR 2.60
__________________
There's always more than one way to skin a cat.
|
|
|
|
26.01.2014, 00:50
|
#97
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от _Артём_
|
требуете чудовищного. Почему понимаете?volatile служит для того чтобы запретить компилятору оптимизировать обращения к переменной.Как же компилятор может выдать более быстрый, компактный или оптимальный код? Ему ведь запрещено.
|
Так именно об этом я и говорю, зачем мои слова переиначивать?
Сообщение от _Артём_
|
Легко:
...
Скажите, что для RxNextC0 volatile не нужен, можно её в регистры запихать? А если это xmega256A3U с 7-ю UART-ами (и не только UART-ами)? Все индексы в регистры поместятся?
|
Ну и зачем здесь volatile указывать? Зачем он здесь нужен? Что изменится, если мы его не укажем (речь по-прежнему идёт о CV)?
|
|
|
|
26.01.2014, 00:50
|
#98
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от _Артём_
|
Речь не об оптимальности, а о корректности программы.
|
И ещё о полном непонимании Godzill'ой смысла поднятой им темы.
__________________
There's always more than one way to skin a cat.
|
|
|
|
26.01.2014, 00:52
|
#99
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Ну и в чём я не прав? Для вас ещё раз большими буквами: речь идёт о CV.
Пожалуйста по пунктам.
|
|
|
|
26.01.2014, 00:59
|
#100
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
Ну и в чём я не прав?
|
На последних шести страницах, кои, как вы полагаете, вы " хорошо поняли", вам об этом уже раз надцать было сказано. Отсутствие результата у таких значительных усилий не оставляет надежды на то, что N+1-е объяснение что-либо изменит.
__________________
There's always more than one way to skin a cat.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:30.
|
|