Страница 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 :
Спойлер
XC8 :
Спойлер
Комментарии излишни...
Не знаю, что у Вас там и чего много занимает...
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
Это ничего не меняет.