|
|
  |
Не лезет в память, как это исправить? |
|
|
|
Oct 16 2015, 11:17
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Пишу прогу для СС3200 - у этого проца всего 256 Кбайт памяти, из которой 64 кБайт используется как память для хранения констант и прочего остается ~192 кБайтпод код стек и др. Я изменил скрипт линкера, так как мне нужна очень большая куча - под нее я выделил 128 кБайт - это место для RTOS, буферов для скидывания на SD и прочего 2048 под стек, осталное на код. Пока работал с портом, все хватало - начал дописывать функции для работы с WiFi и сокетами - выскакивает ошибка, что мол не лезет в flash Я компилирую при отключеной оптимизации, если включаю ее - начинает влезать. но мне это не очень нравится, так как эта оптимизация может отключить некоторые куски кода, которые я неверно или в чем то неправильно написал ошибки конечно исправляются, но как сделать с отключенной оптимизацией и вообще, почему такая ошибка возникает ведь суммарно объем кода получается меньше чем место под код в моем СС3200?
|
|
|
|
|
Oct 16 2015, 11:29
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
Цитата(inventor @ Oct 16 2015, 17:17)  почему такая ошибка возникает ведь суммарно объем кода получается меньше чем место под код в моем СС3200? Из вашего сообщения ничего не понятно. Вы не могли бы написать нормально? Приложить скрипт линкера и текст ошибки. Линкер IAR вполне конкретно говорит, сколько именно места не хватило и в какой секции. Если у Вас действительно не хватило памяти (а похоже на то, раз Вы говорите про оптимизацию), то что тут поделаешь? Жмите код, юзайте оптимизацию по размеру.
Сообщение отредактировал drozel - Oct 16 2015, 11:32
|
|
|
|
|
Oct 18 2015, 08:22
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(inventor @ Oct 16 2015, 14:17)  Я компилирую при отключеной оптимизации, если включаю ее - начинает влезать. но мне это не очень нравится.. Увы, это жизнь. Большинство моих проектов тоже не помещаются без оптимизации, и это неудобно. Вариантов много - учиться писать код с меньшим количеством ошибок, исключать одни куски кода/функциональности на время отладки других. Но в целом это предупреждение, что ресурсов выбранной платформы может не хватить для реализации желаемой функциональности, поэтому следует все внимательно взвесить. Да, конечно, размер выделенных областей памяти удивляет. Какое-то обоснование существует?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Oct 18 2015, 09:39
|

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

|
QUOTE (Dog Pawlowa @ Oct 18 2015, 11:22)  Какое-то обоснование существует? Из написанного совершенно ясно следует, что нималейших обоснований не существует. А из того, что на какой-то неведомо для чего нужный стек, при одновременном поминании RTOS, выделяется 2K и того, что хипу отдается не вся остающаяся память, а тоже чего-то там "выделяется", совершенно ясно, что и не будет никаких обоснований  . "Не лезет во Flash" это вообще прикол для устройства без пользовательского Flash на борту. Про отключение оптимизации вообще помолчу. QUOTE (Dog Pawlowa @ Oct 18 2015, 11:22)  Вариантов много - учиться писать код с меньшим количеством ошибок,... Вариант ОДИН - учиться писать и перед тем, как начинать писать, думать, что и в какой последовательности. Это фундамент.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 18 2015, 10:43
|
Знающий
   
Группа: Свой
Сообщений: 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 кГц) размер буфера может меняться
|
|
|
|
|
Oct 18 2015, 15:22
|

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

|
QUOTE (inventor @ Oct 18 2015, 13:43)  опытным путем установлено : что таракан с оторваными ногами, если постучать по столу, никуда не побежит. Вывод - таракан слышит ногами. QUOTE какие бы SD карты не были, какого класса - чем реже на них происходит запись, тем меньше сбоев... , если работа с SD картой написана так, что Автор боится даже включать опимизацию  , очевидно, не говоря уже об аккуратной работе с буферами карты, обработке ошибок и состояний карты. Цикл работы SD карты привязан к размерам ее внутрених блоков и от того, что Вы что-то у себя будете накапливать, ей ни холодно ни жарко.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 18 2015, 15:33
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Цитата(zltigo @ Oct 18 2015, 18:22)  , если работа с SD картой написана так, что Автор боится даже включать опимизацию  , очевидно, не говоря уже об аккуратной работе с буферами карты, обработке ошибок и состояний карты. Цикл работы SD карты привязан к размерам ее внутрених блоков и от того, что Вы что-то у себя будете накапливать, ей ни холодно ни жарко. вот только для карты большая разница писать в нее 10 раз в секунду и 1 раз за 10 секунд. и без разницы на ее внутренние цыклы и блоки
|
|
|
|
|
Oct 18 2015, 21:19
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

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

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 19 2015, 06: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кБ. И ещё много его свободного осталось.
|
|
|
|
|
Oct 19 2015, 06:48
|

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

|
QUOTE (inventor @ Oct 19 2015, 07:23)  ага..и при подходе следущего буфера предыдущий просто потеряется Максимальное время задержки операции записи детерминировано, вот исходя из него размер буфера и СЧИТАЕТСЯ. Считается, а не берется с потолка, "подкрепляется" "аргументом", что чем реже писать, тем меньше глюков, и после этого спрашивается на форуме куда подевалась память.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 19 2015, 07:07
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

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

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

|
QUOTE (inventor @ Oct 19 2015, 10:07)  херня. ничем не подкрепленая SD карты затыкались на время до секунды. У Вас порядок предложений перепунан. Правильно так: "SD карты затыкались на время до секунды. херня. ничем не подкрепленая" "Успехов" в стучании головой в стену да еще и находящуюся в противоположном направлении движения. Счастливо оставаться!
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|