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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Размещение строки во флэш, что не так?
ARV
сообщение Dec 4 2008, 11:36
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(011119xx @ Dec 4 2008, 14:17) *
А как размещать во флэш массив большой величины?
Делаю так: const uint16_t img[] PROGMEM = { здесь, например, 15000 слов }; Выдается ошибка: size of variable 'img' is too large

а флеши-то достаточно? может, вы пытаетесь впихнуть 30К в какую-нибудь atmega16 smile.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
011119xx
сообщение Dec 4 2008, 12:21
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Впихиваю в атмегу128 smile.gif
Памяти достаточно. Если массив поделить пополам, то они спокойно размещаются оба, но хотелось бы целиком.

Сообщение отредактировал 011119xx - Dec 4 2008, 12:23
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 4 2008, 12:39
Сообщение #18


Гуру
******

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



Цитата(011119xx @ Dec 4 2008, 13:17) *
const uint16_t img[] PROGMEM = { здесь, например, 15000 слов }; Выдается ошибка: size of variable 'img' is too large
Точно 15000 а не 16384 или больше? Для avr_gcc размер одного массива не может быть больше 32768 байт, связано это (как и у других компиляторов) с размером типа ptrdiff_t. Варианты обхода: определять массив в асм-файле, определять несколько массивов допустимой длинны в именованных сегментах и скриптом линкера обеспечить их размещение подряд, ну а доступ через указатель.


--------------------
На любой вопрос даю любой ответ
"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
011119xx
сообщение Dec 4 2008, 12:47
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Цитата(Сергей Борщ @ Dec 4 2008, 17:39) *
Точно 15000 а не 16384 или больше? Для avr_gcc размер одного массива не может быть больше 32768 байт, связано это (как и у других компиляторов) с размером типа ptrdiff_t. Варианты обхода: определять массив в асм-файле, определять несколько массивов допустимой длинны в именованных сегментах и скриптом линкера обеспечить их размещение подряд, ну а доступ через указатель.

Точно 23232 и точно uint16_t.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 4 2008, 12:51
Сообщение #20


Гуру
******

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



Цитата(011119xx @ Dec 4 2008, 14:47) *
Точно 23232 и точно uint16_t.
Ну вот. 23232 * sizeof(uint16_t) = 46464 > 32768. Оно. Можете поискать на avrfreaks в форуме по gcc - там было обсуждение этого вопроса.


--------------------
На любой вопрос даю любой ответ
"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

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

 


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


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