18.09.2018, 07:31
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Памяти ещё много, а компилятору не хватает
Создаю простой пробный проект.
В нём один файл 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];
} |
|
|
|
|
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
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: Памяти ещё много, а компилятору не хватает
Так я именно в ОЗУ и хочу!
А в памяти программ беспрепятственно создаю массив
const int arr[10][26] = {...
и как же теперь быть?..
создавать два массива, одну половину в одном банке хранить, другую половину - в другом...
Последний раз редактировалось yellow87; 18.09.2018 в 09:29.
|
|
|
|
18.09.2018, 10:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,896
Сказал спасибо: 5,638
Сказали Спасибо 25,669 раз(а) в 5,759 сообщении(ях)
|
Re: Памяти ещё много, а компилятору не хватает
Переходить на контроллер с более обширной памятью. Гляньте на старшие семейства.
__________________
«Совершенство — это не тогда, когда уже нечего больше добавить, а тогда, когда уже нечего отнять.»
/Эйнштейн/
моя домашняя страничка: http://www.eddy.com.ua/
|
|
|
|
18.09.2018, 12:10
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Памяти ещё много, а компилятору не хватает
Сообщение от Исбанни
|
8*17=136. И при его страничной памяти это выходит за размер банка. Непрерывный массив не может быть адресован с пропуском адресов.
8*12=96, как раз влазит в один банк. Но последние его 16 байт - общие для всех банков.
И массив вы создаете не в памяти программ, а в памяти ОЗУ.
PIC16F876 еще кому-то нужен?? Странно, почему ТС до сих пор не научился с ними работать
|
Вообще-то, массив объявлен как int, так что памяти требуется в два раза больше. Или нет?
|
|
|
|
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
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Памяти ещё много, а компилятору не хватает
Переходить на указатели! У вас массив же двумерный. Одна цепочка не поместится, конечно.
Правда, вручную придется 17 массивов создавать ))) Но на то он и пик, чтобы больно было. Либо использовать malloc, но тогда еще больнее будет.
|
|
|
|
02.01.2019, 12:09
|
|
Прописка
Регистрация: 17.11.2009
Сообщений: 134
Сказал спасибо: 15
Сказали Спасибо 30 раз(а) в 16 сообщении(ях)
|
Re: Памяти ещё много, а компилятору не хватает
Сообщение от Исбанни
|
В частности, для 8-битных МК int будет равен 1 байту, так же как и char.
|
А число Пи в военное время может достигать 3!
Начинающим то не пудрите мозги свой буйной фантазией.)
Последний раз редактировалось OKF; 02.01.2019 в 12:15.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:01.
|
|