Как объявить массив в CCS PIC
Как объявить массив в CCS PIC
В программе объявляю локально массив данных int8 data[], проблема в том, что объявление массива увеличивает прошивку на дохрена байт, но ведь массив хранится в RAM, и я его никак не инициализирую! но самое интересное - размер увеличения очень непонятно зависит от размера объявляемого массива.
int8 data[130]; - ROM 2632
int8 data[150]; - ROM 2864 (добавил 20 элементов, а прошивка увеличилась на 232!)
int8 data[180]; - ROM 2752 (добавил еще 30 - прошивка уменьшилась!)
int8 data[130]; - ROM 2632
int8 data[150]; - ROM 2864 (добавил 20 элементов, а прошивка увеличилась на 232!)
int8 data[180]; - ROM 2752 (добавил еще 30 - прошивка уменьшилась!)
- Реклама
- AlekseyEnergo
- Модератор
- Сообщения: 2117
- Зарегистрирован: Пт янв 11, 2013 19:19:26
- Откуда: Санкт-Петербург
Re: Как объявить массив в CCS PIC
КомпилятоР? Провокатор.
Re: Как объявить массив в CCS PIC
Почему простое объявление локального массива (в RAM), без инициализации, нереально увеличивает размер флеша (ROM) и самое главное - почему увеличиваемый размер непропорционален и непонятно как связан с размером объявляемого массива?Аlex писал(а):И ?
CCS PIC C Compoliler V5.025КомпилятоР?
Re: Как объявить массив в CCS PIC
Массив инициализирует(обнуляет) компилятор. Полезно заглядывать в листинг ...
- Реклама
Re: Как объявить массив в CCS PIC
Ладно, пусть компилятор обнуляет, это я видел в листинге. Но тогда почему при увеличении размера на 20 элементов прошивка увеличивается на 232 байта, а затем, если массив увеличить еще на 30 элементов, прошивка УМЕНЬШАЕТСЯ на 132 байта? Что за фигня, где логика? Может это как-то связано с ограничениями на размер массива в памяти, но тогда какого хрена такие странные цифры?
В листинг я смотрел. Я не могу понять, зачем компилятор это делает, ведь я не просил создавать проинициализированный блок данных, просто выделить под них память, может я не так объявляю или чего-то не знаю, потому и спрашиваю. В моём понимании компилятор должен найти в ОЗУ последний занятый байт, и с него выделить место под массив - сохранив указатель на начало и конец, что б размещать последующие данные в ОЗУ. Максимум такое объявление должно занимать пару десятков строк листинга, но не пару сотен флеш-памяти!
В листинг я смотрел. Я не могу понять, зачем компилятор это делает, ведь я не просил создавать проинициализированный блок данных, просто выделить под них память, может я не так объявляю или чего-то не знаю, потому и спрашиваю. В моём понимании компилятор должен найти в ОЗУ последний занятый байт, и с него выделить место под массив - сохранив указатель на начало и конец, что б размещать последующие данные в ОЗУ. Максимум такое объявление должно занимать пару десятков строк листинга, но не пару сотен флеш-памяти!
Re: Как объявить массив в CCS PIC
Уйти на XC8 ?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Как объявить массив в CCS PIC
MCC :XC8 :Комментарии излишни...
Не знаю, что у Вас там и чего много занимает...
Спойлер
Спойлер
Не знаю, что у Вас там и чего много занимает...
Re: Как объявить массив в CCS PIC
Ну так и грызните доку компилятора... на предмет неинициализированных данных... ключи, галочки в настройках...ZoomerJuk писал(а):я не просил создавать проинициализированный блок данных, просто выделить под них память, может я не так объявляю или чего-то не знаю
"Я не даю готовых решений, я заставляю думать!"(С)
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Как объявить массив в CCS PIC
глобальные массивы инициализируются по умолчанию. локальные - нет. объявляйте локально и радуйтесь (если стека хватит) 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Как объявить массив в CCS PIC
пЫк однако .ARV писал(а): если стека хватит
Re: Как объявить массив в CCS PIC
Опять про стандарты... и ни о чём???ARV писал(а):глобальные массивы инициализируются по умолчанию. локальные - нет. объявляйте локально и радуйтесь (если стека хватит)
В младших ПИКах хардварный стек...
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Как объявить массив в CCS PIC
Переходить на другой проект не вариант, проект уже почти готов, но главное - я не могу разобраться с граблями используемого компилятора, который использую уже долгое время, что тогда говорить о новом?
Справку читал, но ничего толком по объявлению массив не нашел.
Массив у меня локальный.
PIC18-й.
Справку читал, но ничего толком по объявлению массив не нашел.
Массив у меня локальный.
PIC18-й.
- Вложения
-
- mas.png
- (29.2 КБ) 411 скачиваний
Re: Как объявить массив в CCS PIC
Предлагаешь и нам погадать ?
Для решения этих граблей нужен сам проект а не картинко ...
Для решения этих граблей нужен сам проект а не картинко ...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Как объявить массив в CCS PIC
90% проблем из-за того, что кто-то не соблюдает стандарты. причем все равно кто: программист или компилятор - и то и другое плохо. остальные 10% проблем заключаются в том, что кто-то чего-то не понимает: то ли программист не понимает стандарт языка, то ли помощник не понимает вопроса, либо вопрошающий не понимает, как сформулировать проблему, что бы с ней помогли разобраться.HHIMERA писал(а):Опять про стандарты... и ни о чём???![]()
В младших ПИКах хардварный стек...
несоответствие компилятора стандату заставляет программиста держать в голове огромное количество совершенно лишней информации об особенностях и нюансах той или иной версии того или иного компилятора... кто-то гордится этим мусором в своей памяти, я не из их числа.
а по поводу "возраста" пика ни слова сказано не было.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Как объявить массив в CCS PIC
Пока отложил решение проблемы, доведу проект до конца, а потом, если памяти не хватит, возобновлю разборку.
Но вот что заметил, "глюк" появляется при достаточно большом объеме программы - если создать пустой проект, то всё работает как надо, а когда начинаешь увеличивать код, в какой-то момент компилятор начинает чудить.
Но вот что заметил, "глюк" появляется при достаточно большом объеме программы - если создать пустой проект, то всё работает как надо, а когда начинаешь увеличивать код, в какой-то момент компилятор начинает чудить.
Re: Как объявить массив в CCS PIC
А может сделать глобапьным... и не маяться???
"Я не даю готовых решений, я заставляю думать!"(С)
Re: Как объявить массив в CCS PIC
Это ничего не меняет.


