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

 
 
> const в ИАР
at90
сообщение Jun 8 2006, 06:07
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 866
Регистрация: 31-03-05
Из: Краснодар
Пользователь №: 3 814



Раньше работал в кодэвижен. Но теперь нада портировать Uc/gui для AVR.
В кодэвижене это проблемно.
Cобрал проект для меги 128 + внешнее озу 32kb + индикатор 320 на 240.
Но постоянно не хватает стэка. Походу он переменные с CONST не помещает во влэш.
Пытался вместо const посавить __flash. Но много ошибок на нессответсвие типов.
И проект сдишком огромный. кучу текста нада перелопачивать.
Можно как нить побороть эту беду.


--------------------
<<Первая производная от чужой идеи - уже твоя идея.>>
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
at90
сообщение Jun 9 2006, 05:07
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 866
Регистрация: 31-03-05
Из: Краснодар
Пользователь №: 3 814



Вроде с такой вот штукой скомпилировалось нормально.

#pragma constseg=FAR_F


--------------------
<<Первая производная от чужой идеи - уже твоя идея.>>
Go to the top of the page
 
+Quote Post
Nikson1200
сообщение Jan 22 2009, 22:29
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 21-05-08
Из: Беларусь, г. Минск
Пользователь №: 37 699



Цитата(at90 @ Jun 9 2006, 08:07) *
Вроде с такой вот штукой скомпилировалось нормально.
#pragma constseg=FAR_F


скомпилироваться-то оно скомпилируется. а будет ли работать? smile.gif
у меня - нет sad.gif

занимаюсь тем же самым что и автор темы в 2006-ом году и пришёл к той же проблеме - большие массивы (шрифты для ucGUI) добровольно не хотят размещаться во flash. или дописывать __flash перед константой (и править много-много функций, использующих их), или попробовать вот таким вышеуказанным методом. да, массив разместили во flash, компилятор проглотил. а теперь все эти функции пытаются использовать данные, расположенные совсем не там где надо (отсюда или мусор вместо букв, или пустота).

насколько я понял, происходит вот это (из мануала):
"if you want to place an object in flash, you can use any of the memory attributes __tinyflash, __flash, __farflash, or __hugeflash. The object becomes a flash object, which means you cannot take the address of it and store it in a default pointer.

However, it is possible to store the address in either a __flash pointer or a __generic pointer, though neither of these are default pointers.

Note that if you attempt to take the address of a constant __flash object and use it as a default pointer object, the compiler will issue an error. If you make an explicit cast of the object to a default pointer object, the error message disappears, instead there will be problems at run-time as the cast cannot copy the object from the flash memory to the data memory.
"

получается, выхода нет? или я неправ?

PS. очень интересно было бы услышать мнение автора темы.. хотя 2006-ой год....sad.gif

Сообщение отредактировал Nikson1200 - Jan 22 2009, 23:11
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 23 2009, 01:12
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Nikson1200 @ Jan 23 2009, 00:29) *
или дописывать __flash перед константой (и править много-много функций, использующих их),
Именно так. Или менять архитектуру процессора на другую, с одним адресным пространством. Это ведь не прихоть авторов компилятора - процессору действительно нужны другие команды, чтобы обращаться к данным во флеш (вы в этом убедились наглядно). И нет никакого другого способа сообщить компилятору об этом. Ведь ключевое слово const всего лишь указывает, что данные нельзя изменять. Вы можете объявить параметр функции с квалификатором const и компилятор будет следить, чтобы вы случайно не изменили этот параметр, только и всего. Сделать вывод о расположении данных и, следовательно, способе доступа к ним он не может, необходима ваша подсказка в виде квалификатора __flash, __eeprom или его отсутсвия.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Nikson1200
сообщение Jan 28 2009, 13:24
Сообщение #5





Группа: Участник
Сообщений: 14
Регистрация: 21-05-08
Из: Беларусь, г. Минск
Пользователь №: 37 699



Цитата(Сергей Борщ @ Jan 23 2009, 04:12) *
Именно так. Или менять архитектуру процессора на другую, с одним адресным пространством. Это ведь не прихоть авторов компилятора - процессору действительно нужны другие команды, чтобы обращаться к данным во флеш (вы в этом убедились наглядно). И нет никакого другого способа сообщить компилятору об этом. Ведь ключевое слово const всего лишь указывает, что данные нельзя изменять. Вы можете объявить параметр функции с квалификатором const и компилятор будет следить, чтобы вы случайно не изменили этот параметр, только и всего. Сделать вывод о расположении данных и, следовательно, способе доступа к ним он не может, необходима ваша подсказка в виде квалификатора __flash, __eeprom или его отсутсвия.

значит так.... редактирую я исходники библиотеки и чувствую что терпения не хватает - слишком много надо всего перелопатить. быть может есть какой-нить компилятор который автоматически решает проблему размещения const во flash и последующего обращения к этим данным?
(чувствую что наверное проще будет внешнюю RAM поставить и пускай шрифты туда ложаться sad.gif )
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 28 2009, 14:01
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Nikson1200 @ Jan 28 2009, 17:24) *
быть может есть какой-нить компилятор который автоматически решает проблему размещения const во flash ..

Конечно! IAR для контроллеров фоннеймановской архитектуры! biggrin.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- at90   const в ИАР   Jun 8 2006, 06:07
- - Сергей Борщ   Цитата(at90 @ Jun 8 2006, 09:07) Раньше р...   Jun 8 2006, 07:13
- - rezident   Может имеет смысл константы объединить в структуру...   Jun 8 2006, 10:00
- - IgorKossak   Чтобы не так много было переделывать, определите м...   Jun 8 2006, 12:25
- - _Sam_   могу ошибаться, но попробуйте добавить к опциям ко...   Jun 8 2006, 12:41
- - at90   Цитата(_Sam_ @ Jun 8 2006, 16:41) могу ош...   Jun 8 2006, 18:03
- - GetSmart   Может не по делу, но... Если описывать const внутр...   Jun 9 2006, 00:09
|- - dxp   Цитата(GetSmart @ Jun 9 2006, 07:09) Може...   Jun 9 2006, 04:20
- - Nikson1200   Сергей Борщ, спасибо!   Jan 23 2009, 08:52
- - west329_   unsigned char __flash mymac[6] = {0xAA,0xBB,0xCC,0...   Jan 23 2009, 17:10
- - Nikson1200   блин, ощущаю себя полным лузером в недрах ucGUI ...   Jan 28 2009, 16:56
|- - Сергей Борщ   Цитата(Nikson1200 @ Jan 28 2009, 18:56) б...   Jan 28 2009, 18:36
- - alux   Вставлю и я свои пять копеек 1) Если необходимо ...   Feb 4 2009, 14:22


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

 


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


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