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

 
 
> Как объявить правильно массив 40МБ
kolobochishe
сообщение Dec 14 2011, 13:37
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



необходимо объявить ( =создать) массив размером 40МБ. Памяти SDRAM на борту - 64МБ.

1-ый вариант - объявляю глобально - все ОК, но!... прошивка устройства занимает немногим больше размера этого массива. Прошиваю через UART. Очень долго, да и глупо это прошивать пустой массив.

2-ой вариант - создаю динамический массив. Сначала не работает (calloc возвращает NULL). Увеличиваю размер кучи в линкер файле (HEAP) - все ОК, но!... опять прошивка чуть больше 40МБ

Хотел поэкспериментировать с указанием пределов размещения кода программы. Т.е. обмануть линкер. Объявить массив меньше на краю доступной памяти, заведомо указав край намного раньше. Но не получается.

Посоветуйте, как правильно сделать? Чтобы прошивка была нормального размера
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
toweroff
сообщение Dec 14 2011, 18:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



А не проще сделать так:

1. Выделить для линкера область, которую он не займет, размером [MyMaxArrayIndex]
2. В программе сделать
Код
unsigned char *MyArray;

и обращаться к нему
Код
*(MyArray + Index)

или я что-то не понял в условии задачи?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 14 2011, 19:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Dec 14 2011, 22:30) *
А не проще сделать так:

Оно, может, и проще, да идеологически неверно.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 14 2011, 19:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Dec 14 2011, 23:19) *
Оно, может, и проще, да идеологически неверно.

объявляя массив по константному адресу, какая разница, где его указывать?
можно спокойно разместить его в именованной области и уже в скрипте линкера расписать расположение
только с объявлением массива мы получаем область, которая им (массивом) однозначно занята
с указателем больше простора - если вдруг такой огромный кусок не нужен, отдаем его, например, под кучу
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 14 2011, 20:34
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(toweroff @ Dec 14 2011, 23:59) *
объявляя массив по константному адресу, какая разница, где его указывать?

Объявлять массив по константному адресу в любом случае не комильфо. Только в случае с прагмой будет хотя бы предупреждение или ошибка при наложении.

Цитата(toweroff @ Dec 14 2011, 23:59) *
с указателем больше простора - если вдруг такой огромный кусок не нужен, отдаем его, например, под кучу

Больше простора для ошибок. А теперь представьте, что таких указателей не один, а, например, 2 или 5 в разных модулях.
В общем, не стоит увлекаться ручным распределением памяти. Особенно там, где нет ни малейших показаний для этого.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kolobochishe   Как объявить правильно массив 40МБ   Dec 14 2011, 13:37
- - aaarrr   Цитата(kolobochishe @ Dec 14 2011, 17:37)...   Dec 14 2011, 14:07
- - sigmaN   А мне кажется не инициализированные данные не долж...   Dec 14 2011, 14:17
- - kolobochishe   Массив пустой только объявляю. вот так unsigned...   Dec 14 2011, 14:27
- - aaarrr   Цитата(sigmaN @ Dec 14 2011, 18:17) Кстат...   Dec 14 2011, 14:31
- - kolobochishe   RE: Как объявить правильно массив 40МБ   Dec 14 2011, 14:41
|- - aaarrr   Цитата(kolobochishe @ Dec 14 2011, 18:36)...   Dec 14 2011, 14:42
- - kolobochishe   массив на адресе 0x80007608 Цитата(aaarrr @ ...   Dec 14 2011, 14:49
|- - aaarrr   Цитата(kolobochishe @ Dec 14 2011, 18:49)...   Dec 14 2011, 14:57
|- - kolobochishe   Цитата(aaarrr @ Dec 14 2011, 19:57) Если ...   Dec 15 2011, 04:03
- - kolobochishe   Хорошо. Ну ROM и RAM действительно в одном и том ж...   Dec 14 2011, 15:10
|- - aaarrr   Цитата(kolobochishe @ Dec 14 2011, 19:10)...   Dec 14 2011, 15:14
- - kolobochishe   а вообще, похоже я чего-то не понял. Не хотел он с...   Dec 14 2011, 15:14


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:11
Рейтинг@Mail.ru


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