|
Рассуждения о _regvar и register, Вынесено из темы "Глюки компилятора.." |
|
|
|
Jan 26 2008, 14:00
|
Местный
  
Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004

|
IAR 4.21A помогите - что за ошибка ? Error[Pa043]: the keyword "__regvar" is not available with the current settings. Registers must be locked with --lock_regs C:\_AN447 my\_bldc_iar\main.c 55 before __regvar can be used Total number of errors: 1 Total number of warnings: 0 вот проект прицепил - http://slil.ru/25402589 (20 Кб)
Сообщение отредактировал kamedi_clab - Jan 26 2008, 14:08
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Jan 26 2008, 18:49
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

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

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 26 2008, 19:05
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(prottoss @ Jan 26 2008, 21:32)  ...если расширения начинают противоречить стандартам языка... - слишком громко сказанно:-) Украл батон - преступление? Или слишком громко сказано?  Из мелочей все и состоит, тут отступим, там переиначим, глядишь и получим из C Джаву  Цитата(prottoss @ Jan 26 2008, 21:32)  ИМХО фишка с регистрами, нууу оччень для мелких камней типа Tiny. Программы для них зачастую заточены только под эти камни. Да и, в принципе, перенести такой код не проблема - к ногтю __reg_var и все дела, так же как и при смене архитектуры CPU __flash меняется на const Ну разве что заточены и переносить на другой никогда не понадобится. А к ногтю __reg_var и потом вылавливать странные баги из-за незапрещенных прерываний во время модификации флага вне прерывания это хорошо? И с __flash не все так очевидно, можно получить например массив шрифта в ... ОЗУ, с запретом его модифицировать  Цитата(singlskv @ Jan 26 2008, 21:49)  А если любимый gcc ? Он не игнорирует и я этим иногда пользуюсь, только нужно проявлять осторожность при использовании библиотек в случае объявления большого количества регистровых переменных(ну или листинг смотреть...). Тоже проигнорирует, особенно в случае большого количества регистровых переменных. Я правда больше пары штук не пробовал, обычно индекс массива или указатель объявляю как register. А можете поподробнее про осторожность? Чего опасаться?
|
|
|
|
|
Jan 26 2008, 19:21
|

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

|
Цитата(singlskv @ Jan 26 2008, 21:49)  А если любимый gcc ? Он не игнорирует и я этим иногда пользуюсь, Исключения, только подтверждают правила  . Цитата только нужно проявлять осторожность при использовании библиотек в случае объявления большого количества регистровых переменных(ну или листинг смотреть...). Да ну? У Вас совершенно ошибочные  представления о квалификаторе register, даже в случаях если он не игнорируется в принципе, он носит только рекомендательный характер. Цитата(Qwertty @ Jan 26 2008, 22:05)  А можете поподробнее про осторожность? Чего опасаться? Абсолютно нечего - безопасно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 26 2008, 19:46
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Jan 26 2008, 22:21)  Да ну? У Вас совершенно ошибочные  представления о квалификаторе register, даже в случаях если он не игнорируется в принципе, он носит только рекомендательный характер. Абсолютно нечего - безопасно. Эксперименты ставить будем ?  Для затравки, предлагаю объявить регистры R0,R1 байтовыми переменными и присвоить им значение например 255 ... Если не убедит, подгоню примеры повеселее....
|
|
|
|
|
Jan 26 2008, 20:03
|

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

|
Цитата(singlskv @ Jan 26 2008, 22:46)  Эксперименты ставить будем ?  Нет для начала будем читать (пост #69) о чем идет речь речь идет о квалификаторе register. Цитата Для затравки, предлагаю объявить регистры R0,R1 байтовыми переменными... Давайте - есть квалификатор register описанный в стандарте языка. Давайте попробуйте с его помощью сделать вышеобещанное. Готов внимать. Цитата Если не убедит, подгоню примеры повеселее....  Да и так уже не скучно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 26 2008, 20:09
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Jan 26 2008, 23:03)  Нет для начала будем читать (пост #69) о чем идет речь речь идет о квалификаторе register. Давайте - есть квалификатор register описанный в стандарте языка. Давайте попробуйте с его помощью сделать вышеобещанное. Готов внимать. register unsigned char mynull asm("r0"); ...... mynull=255; попробуйте, не пожалеете...
|
|
|
|
|
Jan 26 2008, 20:22
|

Просто 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. Так что все абсолютно безопасно
|
|
|
|
|
Jan 26 2008, 20:47
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Jan 26 2008, 23:22)  Если Вы это срьезно, то ну и каша у Вас в голове  . Ну кашу я вобще не ем, кроме разьве что гречневой, так что в голове она у меня редкая гостья  ну перечитываем тогда что ли пост №68 с которого и началась дискуссия: Цитата(Qwertty @ Jan 26 2008, 18:50)  А что спецификатор типа памяти register ИАР не понимает? Зачем еще __regvar изобретать? так вот gcc его понимает и пользуется им для размещения переменных в регистрах...
|
|
|
|
|
Jan 26 2008, 20:52
|

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

|
Цитата(singlskv @ Jan 26 2008, 23:47)  ...так что в голове она у меня редкая гостья  1. Это не С, это асмовская вставка в стиле одного из диалектов со всеми вытекающими последствиями для компиляции и оптимизации. 2. Читаем стандарт языка C99. 3. Без register должно быть аналогично.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 26 2008, 21:01
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

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

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

|
Цитата(singlskv @ Jan 27 2008, 00:01)  Тока Вы похоже опять забыли... Я прекрасно помню, на какой конкретный вопрос конкретно по register лично я отвечал :-E.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|