Страница 1 из 1

Как объявить массив в CCS PIC

Добавлено: Сб сен 13, 2014 17:44:31
ZoomerJuk
В программе объявляю локально массив данных int8 data[], проблема в том, что объявление массива увеличивает прошивку на дохрена байт, но ведь массив хранится в RAM, и я его никак не инициализирую! но самое интересное - размер увеличения очень непонятно зависит от размера объявляемого массива.

int8 data[130]; - ROM 2632
int8 data[150]; - ROM 2864 (добавил 20 элементов, а прошивка увеличилась на 232!)
int8 data[180]; - ROM 2752 (добавил еще 30 - прошивка уменьшилась!)

Re: Как объявить массив в CCS PIC

Добавлено: Сб сен 13, 2014 19:23:07
Аlex
И ?

Re: Как объявить массив в CCS PIC

Добавлено: Сб сен 13, 2014 19:33:51
AlekseyEnergo
КомпилятоР? Провокатор.

Re: Как объявить массив в CCS PIC

Добавлено: Сб сен 13, 2014 19:58:07
ZoomerJuk
Аlex писал(а):И ?
Почему простое объявление локального массива (в RAM), без инициализации, нереально увеличивает размер флеша (ROM) и самое главное - почему увеличиваемый размер непропорционален и непонятно как связан с размером объявляемого массива?
КомпилятоР?
CCS PIC C Compoliler V5.025

Re: Как объявить массив в CCS PIC

Добавлено: Вс сен 14, 2014 13:41:02
dosikus
Массив инициализирует(обнуляет) компилятор. Полезно заглядывать в листинг ...

Re: Как объявить массив в CCS PIC

Добавлено: Вс сен 14, 2014 22:58:21
ZoomerJuk
Ладно, пусть компилятор обнуляет, это я видел в листинге. Но тогда почему при увеличении размера на 20 элементов прошивка увеличивается на 232 байта, а затем, если массив увеличить еще на 30 элементов, прошивка УМЕНЬШАЕТСЯ на 132 байта? Что за фигня, где логика? Может это как-то связано с ограничениями на размер массива в памяти, но тогда какого хрена такие странные цифры?

В листинг я смотрел. Я не могу понять, зачем компилятор это делает, ведь я не просил создавать проинициализированный блок данных, просто выделить под них память, может я не так объявляю или чего-то не знаю, потому и спрашиваю. В моём понимании компилятор должен найти в ОЗУ последний занятый байт, и с него выделить место под массив - сохранив указатель на начало и конец, что б размещать последующие данные в ОЗУ. Максимум такое объявление должно занимать пару десятков строк листинга, но не пару сотен флеш-памяти!

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 07:59:26
dosikus
Уйти на XC8 ?

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 10:57:01
Аlex
MCC :
Спойлер
MCC_1.png
(24.9 КБ) 167 скачиваний
MCC_2.png
(24.87 КБ) 134 скачивания
MCC_3.png
(24.83 КБ) 139 скачиваний
MCC_4.png
(24.85 КБ) 133 скачивания
XC8 :
Спойлер
XC_1.png
(24.1 КБ) 146 скачиваний
XC_2.png
(24.45 КБ) 127 скачиваний
XC_3.png
(24.48 КБ) 132 скачивания
XC_4.png
(24.46 КБ) 143 скачивания
Комментарии излишни...

Не знаю, что у Вас там и чего много занимает...

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 11:08:08
HHIMERA
ZoomerJuk писал(а):я не просил создавать проинициализированный блок данных, просто выделить под них память, может я не так объявляю или чего-то не знаю
Ну так и грызните доку компилятора... на предмет неинициализированных данных... ключи, галочки в настройках...

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 11:13:55
ARV
глобальные массивы инициализируются по умолчанию. локальные - нет. объявляйте локально и радуйтесь (если стека хватит) :)))

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 11:16:47
dosikus
ARV писал(а): если стека хватит
пЫк однако . :)))

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 11:32:47
HHIMERA
ARV писал(а):глобальные массивы инициализируются по умолчанию. локальные - нет. объявляйте локально и радуйтесь (если стека хватит) :)))
Опять про стандарты... и ни о чём??? :)))
В младших ПИКах хардварный стек...

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 12:03:25
ZoomerJuk
Переходить на другой проект не вариант, проект уже почти готов, но главное - я не могу разобраться с граблями используемого компилятора, который использую уже долгое время, что тогда говорить о новом?

Справку читал, но ничего толком по объявлению массив не нашел.

Массив у меня локальный.

PIC18-й.

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 12:12:48
dosikus
Предлагаешь и нам погадать ? :)))
Для решения этих граблей нужен сам проект а не картинко ...

Re: Как объявить массив в CCS PIC

Добавлено: Пн сен 15, 2014 14:24:16
ARV
HHIMERA писал(а):Опять про стандарты... и ни о чём??? :)))
В младших ПИКах хардварный стек...
90% проблем из-за того, что кто-то не соблюдает стандарты. причем все равно кто: программист или компилятор - и то и другое плохо. остальные 10% проблем заключаются в том, что кто-то чего-то не понимает: то ли программист не понимает стандарт языка, то ли помощник не понимает вопроса, либо вопрошающий не понимает, как сформулировать проблему, что бы с ней помогли разобраться.

несоответствие компилятора стандату заставляет программиста держать в голове огромное количество совершенно лишней информации об особенностях и нюансах той или иной версии того или иного компилятора... кто-то гордится этим мусором в своей памяти, я не из их числа.

а по поводу "возраста" пика ни слова сказано не было.

Re: Как объявить массив в CCS PIC

Добавлено: Вт сен 16, 2014 10:06:44
ZoomerJuk
Пока отложил решение проблемы, доведу проект до конца, а потом, если памяти не хватит, возобновлю разборку.
Но вот что заметил, "глюк" появляется при достаточно большом объеме программы - если создать пустой проект, то всё работает как надо, а когда начинаешь увеличивать код, в какой-то момент компилятор начинает чудить.

Re: Как объявить массив в CCS PIC

Добавлено: Вт сен 16, 2014 13:09:34
HHIMERA
А может сделать глобапьным... и не маяться???

Re: Как объявить массив в CCS PIC

Добавлено: Вт сен 16, 2014 16:03:08
ZoomerJuk
Это ничего не меняет.