Страница 1 из 1
pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Чт май 03, 2012 09:22:57
tip62
Задача стоит следующая по I2C прошивать проц с помощью pic18f45k20.Прошивка представляет собой набор однабайтных чисел которые я храню в массиве. Загвоздка в том, что проект не компилируется, когда добавляю библиотечные функции типа I2C_init - пишет not enough RAM. Отдельно функции работают 100%!и без них проект компилируется.в вложении сишный файл. Помогите пожалуйста!!!
Да кстати, если скомпилировать проект без функций, то компилятор пишет что использовано RAM 1%, ROM 5%.
Re: pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Чт май 03, 2012 11:15:51
Shapa
Простите, что мой совет не принесёт вам желанного решения, но прошу вас! Выкиньте вы к черту этот mikroC, худшего компилятора я в жизни не встречал.
tip62 писал(а):Прошивка представляет собой набор однабайтных чисел которые я храню в массиве. .
Наличие модификатора const, отнюдь не означает, что данные будут расположенны во флеше. По стандарту С, переменная, пусть и константная распологается в ОЗУ, а ваш массив явно больше 1.5 КБайт SRAM'a. Разместите его во флеш. Места станет больше.
ЗЫ: если вы хотите спросить "а почему когда я компилирую без вызова, то озов только 1% занято?" то сразу отвечу, оптимизатор выбрасывает ваш массив из озу, как не используемый
Re: pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Чт май 03, 2012 11:30:33
tip62
Shapa, спасибо, что откликнулись, как вы уже поняли в микроконтроллерах я не особо разбираюсь, подскажите как разместить массив во флэш?я честно говоря думал, что const мне поможет, но увы...
Re: pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Чт май 03, 2012 13:47:36
Shapa
tip62 писал(а):Shapa, спасибо, что откликнулись, как вы уже поняли в микроконтроллерах я не особо разбираюсь, подскажите как разместить массив во флэш?я честно говоря думал, что const мне поможет, но увы...
Все с чего-то начинали...
Пока что нашел только часть решения: в микро е есть библиотека работы с Флешем (Flash Memory Library). В ней реализованны функции чтения и записи во флеш. Это пол дела, ещё нужно сами данные разместить во флеше: выделить память и присвоить ей нужные значения. Так вот как это сдлеать я пока что не понимаю. Например в WinAVR это делается добавлением модификатора PROGMEM, который указывает компиляторы на необходимостть сохранения данных в памяти програм (флеше). По аналогии, что-то такое должно быть и в микроС
Кстати, вы не думали разместить ваш массив в EEPROM'e? может быть вам там хватит места
Re: pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Чт май 03, 2012 16:18:51
urry
Для мсс18 было бы const rom unsigned short massive[]
Можно доработать файл линкера (но опять же для мсс18, другого не знаю).

Re: pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Чт май 03, 2012 19:35:16
TripleKill
Может попробовать оптимизировать?
Я засунул массив ТС в прогу, вот кусок этих данных, интерпретированный графически:
Весь массив:
Создаётся впечатление, что набор данных периодически повторяется. Если это так, то его можно урезать до одного периода, и циклически выбирать эти данные. Куча памяти сэкономится.
С другой стороны, если приведённый массив есть лишь пример, а данные могут в принципе быть любыми, то можно как вариант предложить SPI-память, типа 24LC08. Массив считывается оттуда и выплёвывается в I2C.
Re: pic18f45k20 среда mikroC проблема с большим массивом
Добавлено: Пт май 04, 2012 09:31:11
tip62
массив лишь пример к сожалению(
использование внешней памяти не катит, тк изначально пошивка загружалась из 24 серии, но потом решили, раз есть контролллер на плате, который, почти ничего не делает, загружать прошивку из него!
сспасибо за ответы, сегодня буду ещё мучиться)