Задача стоит следующая по I2C прошивать проц с помощью pic18f45k20.Прошивка представляет собой набор однабайтных чисел которые я храню в массиве. Загвоздка в том, что проект не компилируется, когда добавляю библиотечные функции типа I2C_init - пишет not enough RAM. Отдельно функции работают 100%!и без них проект компилируется.в вложении сишный файл. Помогите пожалуйста!!!
Да кстати, если скомпилировать проект без функций, то компилятор пишет что использовано RAM 1%, ROM 5%.
pic18f45k20 среда mikroC проблема с большим массивом
pic18f45k20 среда mikroC проблема с большим массивом
- Вложения
-
- текст программы.txt
- (11.69 КБ) 211 скачиваний
- Реклама
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: pic18f45k20 среда mikroC проблема с большим массивом
Простите, что мой совет не принесёт вам желанного решения, но прошу вас! Выкиньте вы к черту этот mikroC, худшего компилятора я в жизни не встречал.
Наличие модификатора const, отнюдь не означает, что данные будут расположенны во флеше. По стандарту С, переменная, пусть и константная распологается в ОЗУ, а ваш массив явно больше 1.5 КБайт SRAM'a. Разместите его во флеш. Места станет больше.
ЗЫ: если вы хотите спросить "а почему когда я компилирую без вызова, то озов только 1% занято?" то сразу отвечу, оптимизатор выбрасывает ваш массив из озу, как не используемый
tip62 писал(а):Прошивка представляет собой набор однабайтных чисел которые я храню в массиве. .
Код: Выделить всё
const unsigned short massive[]ЗЫ: если вы хотите спросить "а почему когда я компилирую без вызова, то озов только 1% занято?" то сразу отвечу, оптимизатор выбрасывает ваш массив из озу, как не используемый
Re: pic18f45k20 среда mikroC проблема с большим массивом
Shapa, спасибо, что откликнулись, как вы уже поняли в микроконтроллерах я не особо разбираюсь, подскажите как разместить массив во флэш?я честно говоря думал, что const мне поможет, но увы...
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: pic18f45k20 среда mikroC проблема с большим массивом
Все с чего-то начинали...tip62 писал(а):Shapa, спасибо, что откликнулись, как вы уже поняли в микроконтроллерах я не особо разбираюсь, подскажите как разместить массив во флэш?я честно говоря думал, что const мне поможет, но увы...
Пока что нашел только часть решения: в микро е есть библиотека работы с Флешем (Flash Memory Library). В ней реализованны функции чтения и записи во флеш. Это пол дела, ещё нужно сами данные разместить во флеше: выделить память и присвоить ей нужные значения. Так вот как это сдлеать я пока что не понимаю. Например в WinAVR это делается добавлением модификатора PROGMEM, который указывает компиляторы на необходимостть сохранения данных в памяти програм (флеше). По аналогии, что-то такое должно быть и в микроС
Кстати, вы не думали разместить ваш массив в EEPROM'e? может быть вам там хватит места
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: pic18f45k20 среда mikroC проблема с большим массивом
Для мсс18 было бы const rom unsigned short massive[]
Можно доработать файл линкера (но опять же для мсс18, другого не знаю).

Можно доработать файл линкера (но опять же для мсс18, другого не знаю).
- Реклама
-
TripleKill
- Вымогатель припоя
- Сообщения: 671
- Зарегистрирован: Вт июн 29, 2010 12:31:49
Re: pic18f45k20 среда mikroC проблема с большим массивом
Может попробовать оптимизировать?
Я засунул массив ТС в прогу, вот кусок этих данных, интерпретированный графически:

Весь массив:

Создаётся впечатление, что набор данных периодически повторяется. Если это так, то его можно урезать до одного периода, и циклически выбирать эти данные. Куча памяти сэкономится.
С другой стороны, если приведённый массив есть лишь пример, а данные могут в принципе быть любыми, то можно как вариант предложить SPI-память, типа 24LC08. Массив считывается оттуда и выплёвывается в I2C.
Я засунул массив ТС в прогу, вот кусок этих данных, интерпретированный графически:

Весь массив:

Создаётся впечатление, что набор данных периодически повторяется. Если это так, то его можно урезать до одного периода, и циклически выбирать эти данные. Куча памяти сэкономится.
С другой стороны, если приведённый массив есть лишь пример, а данные могут в принципе быть любыми, то можно как вариант предложить SPI-память, типа 24LC08. Массив считывается оттуда и выплёвывается в I2C.
Re: pic18f45k20 среда mikroC проблема с большим массивом
массив лишь пример к сожалению(
использование внешней памяти не катит, тк изначально пошивка загружалась из 24 серии, но потом решили, раз есть контролллер на плате, который, почти ничего не делает, загружать прошивку из него!
сспасибо за ответы, сегодня буду ещё мучиться)
использование внешней памяти не катит, тк изначально пошивка загружалась из 24 серии, но потом решили, раз есть контролллер на плате, который, почти ничего не делает, загружать прошивку из него!
сспасибо за ответы, сегодня буду ещё мучиться)


