реклама на сайте
подробности

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Не лезет в память, как это исправить?
inventor
сообщение Oct 16 2015, 11:17
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Пишу прогу для СС3200 - у этого проца всего 256 Кбайт памяти,
из которой 64 кБайт используется как память для хранения констант и прочего
остается ~192 кБайтпод код стек и др.
Я изменил скрипт линкера, так как мне нужна очень большая куча -
под нее я выделил 128 кБайт - это место для RTOS, буферов
для скидывания на SD и прочего 2048 под стек, осталное на код.
Пока работал с портом, все хватало - начал дописывать функции
для работы с WiFi и сокетами - выскакивает ошибка, что мол не лезет в flash
Я компилирую при отключеной оптимизации,
если включаю ее - начинает влезать.
но мне это не очень нравится, так как эта оптимизация может отключить
некоторые куски кода, которые я неверно или в чем то неправильно написал
ошибки конечно исправляются, но как сделать с отключенной оптимизацией
и вообще, почему такая ошибка возникает ведь суммарно объем кода
получается меньше чем место под код в моем СС3200?
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 16 2015, 11:29
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(inventor @ Oct 16 2015, 17:17) *
почему такая ошибка возникает ведь суммарно объем кода
получается меньше чем место под код в моем СС3200?

Из вашего сообщения ничего не понятно. Вы не могли бы написать нормально? Приложить скрипт линкера и текст ошибки.
Линкер IAR вполне конкретно говорит, сколько именно места не хватило и в какой секции.
Если у Вас действительно не хватило памяти (а похоже на то, раз Вы говорите про оптимизацию), то что тут поделаешь? Жмите код, юзайте оптимизацию по размеру.

Сообщение отредактировал drozel - Oct 16 2015, 11:32
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 18 2015, 08:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(inventor @ Oct 16 2015, 14:17) *
Я компилирую при отключеной оптимизации,
если включаю ее - начинает влезать.
но мне это не очень нравится..

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

Да, конечно, размер выделенных областей памяти удивляет.
Какое-то обоснование существует?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 09:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Dog Pawlowa @ Oct 18 2015, 11:22) *
Какое-то обоснование существует?

Из написанного совершенно ясно следует, что нималейших обоснований не существует.
А из того, что на какой-то неведомо для чего нужный стек, при одновременном поминании RTOS, выделяется 2K и того, что хипу отдается не вся остающаяся память, а тоже чего-то там "выделяется", совершенно ясно, что и не будет никаких обоснований sad.gif. "Не лезет во Flash" это вообще прикол для устройства без пользовательского Flash на борту.
Про отключение оптимизации вообще помолчу.
QUOTE (Dog Pawlowa @ Oct 18 2015, 11:22) *
Вариантов много - учиться писать код с меньшим количеством ошибок,...

Вариант ОДИН - учиться писать и перед тем, как начинать писать, думать, что и в какой последовательности. Это фундамент.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Oct 18 2015, 10:43
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(Dog Pawlowa @ Oct 18 2015, 11:22) *
Да, конечно, размер выделенных областей памяти удивляет.
Какое-то обоснование существует?


Для сбрасывания на SD карту нужны большие блоки.
увы..опытным путем установлено : какие бы SD карты не были,
какого класса - чем реже на них происходит запись,
тем меньше сбоев.
у меня 4-8 АЦП с частотой дискретизации 1 кГц накапливаются
буферы, которые я поочередно сбрасываю на SD карту.

1кГц 12 байт/пакете 3 сек на 1 буфер: 3000 отсч. и 36000 байт в пинге или понге
сответсвенно для разных частот (до 4 кГц) размер буфера может меняться
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 15:22
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (inventor @ Oct 18 2015, 13:43) *
опытным путем установлено :

что таракан с оторваными ногами, если постучать по столу, никуда не побежит. Вывод - таракан слышит ногами.
QUOTE
какие бы SD карты не были,
какого класса - чем реже на них происходит запись,
тем меньше сбоев...

, если работа с SD картой написана так, что Автор боится даже включать опимизацию sad.gif, очевидно, не говоря уже об аккуратной работе с буферами карты, обработке ошибок и состояний карты. Цикл работы SD карты привязан к размерам ее внутрених блоков и от того, что Вы что-то у себя будете накапливать, ей ни холодно ни жарко.







--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Oct 18 2015, 15:33
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(zltigo @ Oct 18 2015, 18:22) *
, если работа с SD картой написана так, что Автор боится даже включать опимизацию sad.gif, очевидно, не говоря уже об аккуратной работе с буферами карты, обработке ошибок и состояний карты. Цикл работы SD карты привязан к размерам ее внутрених блоков и от того, что Вы что-то у себя будете накапливать, ей ни холодно ни жарко.


вот только для карты
большая разница писать в нее 10 раз в секунду и 1 раз за 10 секунд.
и без разницы на
ее внутренние цыклы и блоки
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 19:24
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (inventor @ Oct 18 2015, 18:33) *
большая разница писать в нее 10 раз в секунду и 1 раз за 10 секунд.

Читайте по буквам - никакой. Забрасывается в карточку, типично, 512 байт и записываются. Всякие перекуры по 10 секунд, создаваемые Вами, ей по барабану.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Oct 18 2015, 21:19
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(zltigo @ Oct 18 2015, 22:24) *
Читайте по буквам - никакой. Забрасывается в карточку, типично, 512 байт и записываются. Всякие перекуры по 10 секунд, создаваемые Вами, ей по барабану.

нет не по барабану.
у нее есть параметр связанный с поиском клевого сектора взамен сбойного
и время этого поиска будет больше чем время записи 512 байтного сектора
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 22:12
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (inventor @ Oct 19 2015, 00:19) *
нет не по барабану.
у нее есть параметр связанный с поиском клевого сектора взамен сбойного
и время этого поиска будет больше чем время записи 512 байтного сектора

1) Это время будет по любому и совершенно без разницы, получите эту задержку при попытке записать многокилобайтный буфер или нет. Таймауты записи, кроме всего прочего, тактируются SPI/SDIO и совершенно детерминированы и если Вы можете позволить себе еще и дикие многосекундные паузы, то времени ДЛЯ ЗАПИСИ у Вас просто неменяно.
2) Пы пытаетесь морочить голову ТЕПЕРЬ задержками, хотя разговор начали с:
QUOTE
какие бы SD карты не были,
какого класса - чем реже на них происходит запись,
тем меньше сбоев.

На что и получили мои возражения.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Oct 19 2015, 04:23
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(zltigo @ Oct 19 2015, 01:12) *
1) Это время будет по любому и совершенно без разницы, получите эту задержку при попытке записать многокилобайтный буфер или нет. Таймауты записи, кроме всего прочего, тактируются SPI/SDIO и совершенно детерминированы и если Вы можете позволить себе еще и дикие многосекундные паузы, то времени ДЛЯ ЗАПИСИ у Вас просто неменяно.

ага..и при подходе следущего буфера предыдущий просто потеряется
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 19 2015, 06:12
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(inventor @ Oct 19 2015, 10:23) *
ага..и при подходе следущего буфера предыдущий просто потеряется

Что-то теряться может только из-за кривизны Вашего ПО.
Ни SD-карта ни малый объём ОЗУ тут не помеха.
12 байт с частотой 4кГц это всего == 48000 Б/сек - это просто ни о чём, при размере блока SD ==512байт, это частота записи блоков меньше 100Гц - ни о чём.
Для записи на SD-карту достаточно буфера в 512 байт. Если боитесь каких-то мифических задержек поиска, создайте очередь из неск. блоков, максимум - десятка. Это будет никак не 128кБ.
В моём текущем проекте я пишу поток данных с АЦП во флешь (правда не SD, а 2шт. SPI-Flash) со скоростью минимум 114000 б/сек (и выше), при этом по этому SPI-каналу этот поток проходит трижды:
запись во FRAM, чтение из FRAM, запись в 2-е FLASH с чередованием. При этом в SPI-канале ещё остаётся время для фоновых транзакций других процессов с FRAM и FLASH.
Пишущий этот поток процесс обходится буфером размером 256 байт (одна страница SPI-flash) + ещё 2-3 десятка байт на накопление.
Загрузка процессора (Tiva CM4 120МГц) процессом записи потока - менее 10%.
Естественно - никаких переполнений/потерь и т.п. ни в каком случае не случается - ни с оптимизацией ни без.

Если Ваш код перестаёт работать при включении оптимизации, совет один - ищите баги! А не замазывайте их отключением оптимизации. Включение оптимизации и проверка с ней - это кстати хороший тест на наличие багов.

ЗЫ: И кстати - отлаживаю этот свой проект я сейчас в ОЗУ (флешь МК не использую, код и данные в ОЗУ) размер которого как раз ==256кБ. И ещё много его свободного осталось.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 06:48
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (inventor @ Oct 19 2015, 07:23) *
ага..и при подходе следущего буфера предыдущий просто потеряется

Максимальное время задержки операции записи детерминировано, вот исходя из него размер буфера и СЧИТАЕТСЯ.
Считается, а не берется с потолка, "подкрепляется" "аргументом", что чем реже писать, тем меньше глюков, и после этого спрашивается на форуме куда подевалась память.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
inventor
сообщение Oct 19 2015, 07:07
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(jcxz @ Oct 19 2015, 09:12) *
Для записи на SD-карту достаточно буфера в 512 байт. Если боитесь каких-то мифических задержек поиска, создайте очередь из неск. блоков, максимум - десятка. Это будет никак не 128кБ.


херня. ничем не подкрепленая
SD карты затыкались на время до секунды.
и если нет буфера на это время и больше - будет потеря.
все остальное на уровне болтовни
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 07:36
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (inventor @ Oct 19 2015, 10:07) *
херня. ничем не подкрепленая
SD карты затыкались на время до секунды.

У Вас порядок предложений перепунан. Правильно так:

"SD карты затыкались на время до секунды.
херня. ничем не подкрепленая"

"Успехов" в стучании головой в стену да еще и находящуюся в противоположном направлении движения.
Счастливо оставаться!






--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016