реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Рассуждения о _regvar и register, Вынесено из темы "Глюки компилятора.."
prottoss
сообщение Jan 26 2008, 18:32
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Qwertty @ Jan 27 2008, 01:19) *
По поводу ИАР-овских расширений - если расширения начинают противоречить стандартам языка, то я например, не стал бы ими пользоваться. А тут противоречие налицо - возможен указатель на регистровую переменную. Нафиг такие расширения smile.gif
...если расширения начинают противоречить стандартам языка... - слишком громко сказанно:-) ИМХО фишка с регистрами, нууу оччень для мелких камней типа Tiny. Программы для них зачастую заточены только под эти камни. Да и, в принципе, перенести такой код не проблема - к ногтю __reg_var и все дела, так же как и при смене архитектуры CPU __flash меняется на const


--------------------
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2008, 18:49
Сообщение #17


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jan 26 2008, 20:42) *
Поверьте моему опыту - игнорирут. Посмотрите документацию на любимый компилятор и увидете чего-нибудь типа User requests for register variables are ignored.
А если любимый gcc ?
Он не игнорирует и я этим иногда пользуюсь,
только нужно проявлять осторожность при использовании библиотек в случае
объявления большого количества регистровых переменных(ну или листинг смотреть...).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2008, 18:52
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Qwertty @ Jan 26 2008, 21:19) *
__zero_reg__, R1, это то же самое про что Вы говорите? Или имеется ввиду R0?

Нет, R15 - да бог с ними.
Цитата
По поводу ИАР-овских расширений - если расширения начинают противоречить стандартам языка, то я например, не стал бы ими пользоваться.

Заодно можете перестать пользоватся простенькими с контроллерами, которые вследствии этого имеют дивное количество вариантов памятей с уникальными адресациями. Ресурсов у таких контроллеров тоже не густо, посему АСMообразные финты тоже бывают много более полезны, нежели у свежих собратьев. Для, например, ARM контроллеров у того-же IAR расшрений языка абсолютный минимум.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 26 2008, 19:05
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(prottoss @ Jan 26 2008, 21:32) *
...если расширения начинают противоречить стандартам языка... - слишком громко сказанно:-)

Украл батон - преступление? Или слишком громко сказано? smile.gif Из мелочей все и состоит, тут отступим, там переиначим, глядишь и получим из C Джаву smile.gif
Цитата(prottoss @ Jan 26 2008, 21:32) *
ИМХО фишка с регистрами, нууу оччень для мелких камней типа Tiny. Программы для них зачастую заточены только под эти камни. Да и, в принципе, перенести такой код не проблема - к ногтю __reg_var и все дела, так же как и при смене архитектуры CPU __flash меняется на const

Ну разве что заточены и переносить на другой никогда не понадобится. А к ногтю __reg_var и потом вылавливать странные баги из-за незапрещенных прерываний во время модификации флага вне прерывания это хорошо? И с __flash не все так очевидно, можно получить например массив шрифта в ... ОЗУ, с запретом его модифицировать smile.gif

Цитата(singlskv @ Jan 26 2008, 21:49) *
А если любимый gcc ?
Он не игнорирует и я этим иногда пользуюсь,
только нужно проявлять осторожность при использовании библиотек в случае
объявления большого количества регистровых переменных(ну или листинг смотреть...).

Тоже проигнорирует, особенно в случае большого количества регистровых переменных. Я правда больше пары штук не пробовал, обычно индекс массива или указатель объявляю как register.
А можете поподробнее про осторожность? Чего опасаться?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2008, 19:21
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 26 2008, 21:49) *
А если любимый gcc ?
Он не игнорирует и я этим иногда пользуюсь,

Исключения, только подтверждают правила smile.gif.
Цитата
только нужно проявлять осторожность при использовании библиотек в случае
объявления большого количества регистровых переменных(ну или листинг смотреть...).

Да ну? У Вас совершенно ошибочные sad.gif представления о квалификаторе register, даже в случаях если он не игнорируется в принципе, он носит только рекомендательный характер.
Цитата(Qwertty @ Jan 26 2008, 22:05) *
А можете поподробнее про осторожность? Чего опасаться?

Абсолютно нечего - безопасно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Baser
сообщение Jan 26 2008, 19:44
Сообщение #21


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Qwertty @ Jan 26 2008, 21:05) *
Украл батон - преступление? Или слишком громко сказано? smile.gif Из мелочей все и состоит, тут отступим, там переиначим, глядишь и получим из C Джаву smile.gif

Ну разве что заточены и переносить на другой никогда не понадобится. А к ногтю __reg_var и потом вылавливать странные баги из-за незапрещенных прерываний во время модификации флага вне прерывания это хорошо? И с __flash не все так очевидно, можно получить например массив шрифта в ... ОЗУ, с запретом его модифицировать smile.gif

А так-ли важно блюсти чистоту Си и бояться применять расширения, если речь идет о небольших МК и о работе с прерываниями и другой аппаратной периферией? Это уровень драйверов. А этот уровень никогда не был особенно переносимым. Если говорить об алогитмах верхнего уровня, то там заботится о переносимости есть смысл.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2008, 19:46
Сообщение #22


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jan 26 2008, 22:21) *
Да ну? У Вас совершенно ошибочные sad.gif представления о квалификаторе register, даже в случаях если он не игнорируется в принципе, он носит только рекомендательный характер.
Абсолютно нечего - безопасно.
Эксперименты ставить будем ? smile.gif
Для затравки, предлагаю объявить регистры R0,R1 байтовыми переменными и присвоить
им значение например 255 ...
Если не убедит, подгоню примеры повеселее.... smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2008, 20:03
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 26 2008, 22:46) *
Эксперименты ставить будем ? smile.gif

Нет для начала будем читать (пост #69) о чем идет речь речь идет о квалификаторе register.
Цитата
Для затравки, предлагаю объявить регистры R0,R1 байтовыми переменными...

Давайте - есть квалификатор register описанный в стандарте языка. Давайте попробуйте с его помощью сделать вышеобещанное. Готов внимать.
Цитата
Если не убедит, подгоню примеры повеселее.... smile.gif

Да и так уже не скучно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2008, 20:09
Сообщение #24


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jan 26 2008, 23:03) *
Нет для начала будем читать (пост #69) о чем идет речь речь идет о квалификаторе register.
Давайте - есть квалификатор register описанный в стандарте языка. Давайте попробуйте с его помощью сделать вышеобещанное. Готов внимать.

register unsigned char mynull asm("r0");
......

mynull=255;

попробуйте, не пожалеете... smile.gif
Go to the top of the page
 
+Quote Post
Baser
сообщение Jan 26 2008, 20:22
Сообщение #25


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(singlskv @ Jan 26 2008, 21:46) *
Для затравки, предлагаю объявить регистры R0,R1 байтовыми переменными и присвоить
им значение например 255 ...

А это что, gcc позволяет проделывать такие финты!??

IAR такого не дает. Если речь идет о стандартном классе памяти register, то компилятор сам решает, какие регистры использовать.
Если речь о глобальных регистровых переменных __regvar (--lock_regs), то они могут размещаться в регистрах R4-R15.
Если об опции --zero_register, то это только R15==0.
При выделении регистров под глобальные нужды все конфликты с библиотеками отслеживает линкер и при наличии этих конфликтов ругается:
Цитата
The linker will issue a link-time error if any incompatibilities arise.

Так что все абсолютно безопасно smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2008, 20:22
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 26 2008, 23:09) *
попробуйте

Если Вы это срьезно, то ну и каша у Вас в голове sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2008, 20:47
Сообщение #27


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jan 26 2008, 23:22) *
Если Вы это срьезно, то ну и каша у Вас в голове sad.gif.
Ну кашу я вобще не ем, кроме разьве что гречневой, так что в
голове она у меня редкая гостья smile.gif

ну перечитываем тогда что ли пост №68 с которого и началась дискуссия:
Цитата(Qwertty @ Jan 26 2008, 18:50) *
А что спецификатор типа памяти register ИАР не понимает? Зачем еще __regvar изобретать?


так вот gcc его понимает и пользуется им для размещения переменных в регистрах...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2008, 20:52
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 26 2008, 23:47) *
...так что в голове она у меня редкая гостья smile.gif

1. Это не С, это асмовская вставка в стиле одного из диалектов со всеми вытекающими последствиями для компиляции и оптимизации.
2. Читаем стандарт языка C99.
3. Без register должно быть аналогично.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2008, 21:01
Сообщение #29


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jan 26 2008, 23:52) *
1. Это не С, это асмовская вставка в стиле одного из диалектов со всеми вытекающими последствиями для компиляции и оптимизации.
нет, это спецконструкция с использованием резервированного register которая
придает более точный смысл register, те указание точного месторасположения.
Цитата
2. Читаем стандарт языка C99.
Читаем, читаем...
Тока Вы похоже опять забыли с чего началось все обсуждение, там вроде как было про __regvar
при чем здесь стандарт.... непонимаю
Цитата
3. Без register должно быть аналогично.
ЧТО ДОЛЖНО БЫТЬ АНАЛОГИЧНО ???
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2008, 21:06
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 27 2008, 00:01) *
Тока Вы похоже опять забыли...

Я прекрасно помню, на какой конкретный вопрос конкретно по register лично я отвечал :-E.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016