Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 18.09.2018, 07:31  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
Вопрос Памяти ещё много, а компилятору не хватает

Создаю простой пробный проект.
В нём один файл memory.c
MPLAB v8.92 + CCS Compiler
При добавлении ячеек памяти к массиву, происходит ошибка.
Может у меня софт с ограничением на размер создаваемых программ, или что это такое?
Код:
#include ‹16F876A.h›
//////// Program memory: 8192x14  Data RAM: 367  Stack: 8

int m[8][17];	/// *** Error 87 "memory.c" Line 4(12,13): Data item too big    1 Errors,  0 Warnings. Build Failed.
//int m[8][12];	/// Memory usage:   ROM=0%      RAM=27% - 27%      0 Errors,  0 Warnings. Build Successful.
//int m[8][11];	/// Memory usage:   ROM=0%      RAM=25% - 25%      0 Errors,  0 Warnings. Build Successful.

void main()
{
m[1][2] = m[3][4];
}
Реклама:
yellow87 вне форума  
Непрочитано 18.09.2018, 08:00  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

8*17=136. И при его страничной памяти это выходит за размер банка. Непрерывный массив не может быть адресован с пропуском адресов.
8*12=96, как раз влазит в один банк. Но последние его 16 байт - общие для всех банков.
И массив вы создаете не в памяти программ, а в памяти ОЗУ.
PIC16F876 еще кому-то нужен?? Странно, почему ТС до сих пор не научился с ними работать

Последний раз редактировалось Исбанни; 18.09.2018 в 08:10.
Исбанни вне форума  
Непрочитано 18.09.2018, 09:24  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

Так я именно в ОЗУ и хочу!

А в памяти программ беспрепятственно создаю массив
const int arr[10][26] = {...

и как же теперь быть?..

создавать два массива, одну половину в одном банке хранить, другую половину - в другом...

Последний раз редактировалось yellow87; 18.09.2018 в 09:29.
yellow87 вне форума  
Непрочитано 18.09.2018, 10:16  
Eddy71
Почётный гражданин KAZUS.RU
 
Аватар для Eddy71
 
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,896
Сказал спасибо: 5,638
Сказали Спасибо 25,669 раз(а) в 5,759 сообщении(ях)
Eddy71 на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

Переходить на контроллер с более обширной памятью. Гляньте на старшие семейства.
__________________
«Совершенство — это не тогда, когда уже нечего больше добавить, а тогда, когда уже нечего отнять.»
/Эйнштейн/

моя домашняя страничка: http://www.eddy.com.ua/
Eddy71 вне форума  
Непрочитано 18.09.2018, 12:10  
Bill
Гражданин KAZUS.RU
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

Сообщение от Исбанни Посмотреть сообщение
8*17=136. И при его страничной памяти это выходит за размер банка. Непрерывный массив не может быть адресован с пропуском адресов.
8*12=96, как раз влазит в один банк. Но последние его 16 байт - общие для всех банков.
И массив вы создаете не в памяти программ, а в памяти ОЗУ.
PIC16F876 еще кому-то нужен?? Странно, почему ТС до сих пор не научился с ними работать
Вообще-то, массив объявлен как int, так что памяти требуется в два раза больше. Или нет?
Bill вне форума  
Непрочитано 18.09.2018, 18:33  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

int не имеет жесткой размерности и определяется настройками среды. В частности, для 8-битных МК int будет равен 1 байту, так же как и char. В 32-битной системе размерность int равна 4 байтам.
Но для рассматриваемого случая это вообще без разницы - при любой размерности int непрерывный массив в 136 элементов не поместится в один банк ОЗУ.
Выход - разбить на два массива по 4 * 17 элементов и разместить их в двух банках.
Исбанни вне форума  
Непрочитано 18.09.2018, 19:48  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

Переходить на указатели! У вас массив же двумерный. Одна цепочка не поместится, конечно.
Правда, вручную придется 17 массивов создавать ))) Но на то он и пик, чтобы больно было. Либо использовать malloc, но тогда еще больнее будет.
Easyrider83 вне форума  
Непрочитано 02.01.2019, 12:09  
OKF
Прописка
 
Регистрация: 17.11.2009
Сообщений: 134
Сказал спасибо: 15
Сказали Спасибо 30 раз(а) в 16 сообщении(ях)
OKF на пути к лучшему
По умолчанию Re: Памяти ещё много, а компилятору не хватает

Сообщение от Исбанни Посмотреть сообщение
В частности, для 8-битных МК int будет равен 1 байту, так же как и char.
А число Пи в военное время может достигать 3!
Начинающим то не пудрите мозги свой буйной фантазией.)

Последний раз редактировалось OKF; 02.01.2019 в 12:15.
OKF вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27
Linux-ваше мнение Tvenn Делимся опытом 6169 23.08.2015 08:57
Mathcad - не хватает памяти!!! Что делать??? aniza Proteus, KiCAD и другие ECAD 13 06.01.2011 13:55
[Решено] Так, рассказик :)) Я долго ржал :)) DK Отвлекитесь, эмбеддеры! 7 31.08.2007 22:33


Часовой пояс GMT +4, время: 23:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot