-
- Хотел предложить constexpr и template<>, о которые
недавно тут бурно обсуждали, но это ж будет С++... И сможет ли он
во флэш сам положить... хз - Costic(11.02.2022 14:27)
- Во флэш положить не проблема. Вообще. Проблема в загрузке из флэши в переменную. Тратится индексный регистр, который активно юзается и так, в результате страдает время. Но решение годное, если будет лень дефайнить, просто напишу аттрибут PROGMEM и воспользуюсь макросом pgm_read_dword. - mse homjak(11.02.2022 14:43)
- я б не делал union, это лишняя сущность. и использовал бы memcpy из
константы в РОМ в РАМ. - abivan(11.02.2022 12:31)
- Было желание вообще избавиться от РАМ. - mse homjak(11.02.2022 12:37)
- а если не в рам, то зачем битовые поля? ПЗУ тоже экономим? - abivan(11.02.2022 12:42)
- Битовыми полями удобно работать с инициализированной переменной. У АВР выборка из ПЗУ, это немного геморроя и времени. - mse homjak(11.02.2022 13:15)
- а если не в рам, то зачем битовые поля? ПЗУ тоже экономим? - abivan(11.02.2022 12:42)
- Было желание вообще избавиться от РАМ. - mse homjak(11.02.2022 12:37)
- А если объявить_R1initMask_ как PROGMEM? Насколько помню, на AVR недостаточно константы просто const объявлять. - LightElf(10.02.2022 20:55)
- Это уже ручная оптимизация, если компилятор не справился с
ограничением на объём ОЗУ. В таких случаях, я беру руководство
компилятора и добавляю специальнве атрибуты, явно указывающие
конкретному компилятору где и как разместить переменную. - Nikolay_Po(10.02.2022 20:25)
- Тут дело не в оптимизаццыи. Создаётся переменная рид онли и
копируется в рабочую. Зачем? Это-же константа, просто объявленная
не через дефайн. В ГЦЦ 11.ХХ для АВР всё как положено, в рабочую
переменную грузятся непосредственные константы. У меня старый
компилер. Буду страдать. - mse homjak(10.02.2022 20:29)
- Почему бы не взять компилятор поновее? >>> SciFi(2 знак., 10.02.2022 20:39, ссылка, ссылка)
- загнанных лошадей на переправе не пристреливают... - mse homjak(10.02.2022 20:48)
- Почему бы не взять компилятор поновее? >>> SciFi(2 знак., 10.02.2022 20:39, ссылка, ссылка)
- Тут дело не в оптимизаццыи. Создаётся переменная рид онли и
копируется в рабочую. Зачем? Это-же константа, просто объявленная
не через дефайн. В ГЦЦ 11.ХХ для АВР всё как положено, в рабочую
переменную грузятся непосредственные константы. У меня старый
компилер. Буду страдать. - mse homjak(10.02.2022 20:29)
- Уровень оптимизации какой стоит? Так как _R1initMask_ константна,
то компилятор может/должен вообще её выкинуть. В случае С значение
этой переменной должно быть видно в той же единице трансляции. В
С++ можно определить _R1initMask_ как constexpr в каком-нибудь
заголовочном файле и компилятор сам всё сделает даже на минимальной
оптимизации. - VladislavS.(10.02.2022 19:35)
- надо делать не просто const, а static const - Mahagam(10.02.2022 21:47)
- ну, если в этой версии компилера const, это ридонли переменная, то
всё останется тем-же самым, тока видимость её будет из функцыи, где
определена. - mse homjak(10.02.2022 21:51)
- И для просто конст ты можешь в другом месте взять адрес переменной
и ковырятся по адресу. статик говорит о том, что хрен кто этот
адрес возьмёт. Mahagam(61 знак., 10.02.2022 21:59)
- Ессно, не возьмёт. Но печаль не в этом. Печаль в том, что под
константу компилер выделяет память в ОЗУ. И пох, откуда она видима. - mse homjak(10.02.2022 22:08)
- Ещё раз. ЙАР мне просто конст копировал из пзу в озу, а статик
конст не копировал. Mahagam(59 знак., 10.02.2022 22:12)
- То, чем я пользуюсь, копирует. - mse homjak(10.02.2022 22:15)
- дык не пользуйся тем, чем ты пользуешься )) - Mahagam(11.02.2022 12:33)
- Поздна... - mse homjak(11.02.2022 12:36)
- дык не пользуйся тем, чем ты пользуешься )) - Mahagam(11.02.2022 12:33)
- То, чем я пользуюсь, копирует. - mse homjak(10.02.2022 22:15)
- Ещё раз. ЙАР мне просто конст копировал из пзу в озу, а статик
конст не копировал. Mahagam(59 знак., 10.02.2022 22:12)
- Ессно, не возьмёт. Но печаль не в этом. Печаль в том, что под
константу компилер выделяет память в ОЗУ. И пох, откуда она видима. - mse homjak(10.02.2022 22:08)
- И для просто конст ты можешь в другом месте взять адрес переменной
и ковырятся по адресу. статик говорит о том, что хрен кто этот
адрес возьмёт. Mahagam(61 знак., 10.02.2022 21:59)
- ну, если в этой версии компилера const, это ридонли переменная, то
всё останется тем-же самым, тока видимость её будет из функцыи, где
определена. - mse homjak(10.02.2022 21:51)
- -Os. Компилятор её не выкидывает. Он располагает её в ОЗУ из флэши в стартапе и таких там под 100байт. Жалко. - mse homjak(10.02.2022 19:49)
- надо делать не просто const, а static const - Mahagam(10.02.2022 21:47)
- AVR, да ? - VLLV(10.02.2022 18:43)
- Да. ВинАВР. - mse homjak(10.02.2022 19:47)
- Формально это вопрос не С, а гарвардской архитектуры. Недостаток
двух адресных пространств. - VLLV(11.02.2022 10:24)
- С чего это вдруг? Кто мешает пользоваться командой непосрецтвенной
загрузки, вместо загрузки из памяти? В ГЦЦ 11.хх всё прекрасно
работает. И архитектура не помеха. - mse homjak(11.02.2022 11:56)
- "... доступ становится горбатым" Хорошо, архитектура ни при чем,
виноваты компиляторописатели, не совладевшие с архитектурой. Легче? - VLLV(11.02.2022 16:20)
- Компиляторостроители не совладали с мозгами. Или решили, что это
неважно и не стали тратить время на эту оптимизаццыю. В том-же
ВинАВР есть косяки куда более чудовищные, чем эта срань с
константой. Тут кто-то писал про ИАР, с его "я так вижу" константы.
Приходится работать с тем, что есть. - mse homjak(11.02.2022 17:44)
- я дико извиняюсь, асм вставками положить константы во флеш? бред? - m16(11.02.2022 17:49)
- Компиляторостроители не совладали с мозгами. Или решили, что это
неважно и не стали тратить время на эту оптимизаццыю. В том-же
ВинАВР есть косяки куда более чудовищные, чем эта срань с
константой. Тут кто-то писал про ИАР, с его "я так вижу" константы.
Приходится работать с тем, что есть. - mse homjak(11.02.2022 17:44)
- "... доступ становится горбатым" Хорошо, архитектура ни при чем,
виноваты компиляторописатели, не совладевшие с архитектурой. Легче? - VLLV(11.02.2022 16:20)
- Формально Гарвард не требует раздельных адресных пространств.
Дешифраторы адреса никто не отменял. Предлагаю называть это явление
не Гарвардом, а Урюпинском. "Урюпинская архитектура" — звучит же. - SciFi(11.02.2022 10:39)
- Как тогда назвать 8051? - LightElf(11.02.2022 17:49)
- "Древнее г-но мамонта"™ ? - SciFi(11.02.2022 17:50)
- Оно еще не окаменело! Скорее всего - нас переживет. - LightElf(11.02.2022 17:51)
- "Древнее г-но мамонта"™ ? - SciFi(11.02.2022 17:50)
- Как тогда назвать 8051? - LightElf(11.02.2022 17:49)
- С чего это вдруг? Кто мешает пользоваться командой непосрецтвенной
загрузки, вместо загрузки из памяти? В ГЦЦ 11.хх всё прекрасно
работает. И архитектура не помеха. - mse homjak(11.02.2022 11:56)
- Я бы avr-gcc попробовал, если применимо к вашему чипу. Он LTO
может, мне понравилось, как работает. - Nikolay_Po(10.02.2022 20:54)
- Проект к завершению идёт, не охота пороться. - mse homjak(10.02.2022 21:00)
- Согласен. Тогда пачка дефайнов в заголовочном файле. И использовать их. - Nikolay_Po(10.02.2022 21:49)
- Проект к завершению идёт, не охота пороться. - mse homjak(10.02.2022 21:00)
- godbolt в помощь >>> SciFi(1 знак., 10.02.2022 19:54, ссылка)
- Формально это вопрос не С, а гарвардской архитектуры. Недостаток
двух адресных пространств. - VLLV(11.02.2022 10:24)
- Да. ВинАВР. - mse homjak(10.02.2022 19:47)
- C99 compound literals >>> SciFi(1 знак., 10.02.2022 18:36, ссылка)
- Чота посмотрел, мою проблему не решит. mse homjak(237 знак., 10.02.2022 19:58)
- Не думаю, что про это, но хотя бы отсеем вариант. Dingo(504 знак., 10.02.2022 18:03)
- Хотел предложить constexpr и template<>, о которые
недавно тут бурно обсуждали, но это ж будет С++... И сможет ли он
во флэш сам положить... хз - Costic(11.02.2022 14:27)