Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/23: Рейтинг темы: голосов - 23, средняя оценка - 4.65
Tiom11t
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
1

sscanf - жрет неприлично много флеша

28.07.2015, 17:28. Просмотров 4286. Ответов 13
Метки нет (Все метки)

Всем привет. Пользуюсь CoIDE - как средой разработки и последним arm-none-eabi-gcс - как тулчейном. Камень STM32F103C8T6, в проекте использую библиотеки от ST SPL. Проект успешно работает, принимает по UART данные из консоли, запихивает их в буффер...
Проектик замимает где то 15кб флеша, но тут мне захотелось обработать строку из буффера и розпихать данные в переменные.
"sscanf (Buffer,"\n+IPD,0,39: %4d,%4d,%4d,%4d,%4d,%4d,%4d,%4d",&channel[0], &channel[1],&channel[2],&channel[3],&channel[4],&channel[5],&channel[6],&channel[7]);"

Для этого использовал "sscanf" - и бах, проект теперь занимает 51кб.

WTF???
Не могу понять, я на тупил где то или это просто лыжи не едут? Как это исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2015, 17:28
Ответы с готовыми решениями:

Не много ли ОЗУ жрет
Здравствуйте форумчане. Писал на Qt с другом, подходим к завершающей стадии. Сегодня решил...

Интернет жрет много трафика
Интернет жрет много трафика, что то обновляется но найти не могу, комп несколько раз переписал,...

Win 7 жрет много оперативки!
Всем привет! появилась такая проблема с 64 битной версией: винда в простое (без всяких скайпов и...

Firefox жрет слишком много оперативы
Плиз выручите, в чем трабл, все было гуд, ближе к вечеру что то сделать через мазилу нереально,...

Windows 10 много жрет оперативной памяти
Установил Windows 10 x64. Установилась за 15 мин. на SSD диск (120Gb Kingston) Конфигурация ПК:...

13
Парфирий
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
28.07.2015, 17:47 2
Функции из <stdyo.h> кушают традиционно много ресурсов. Так было всегда. Два пути:
* смириться;
* реализовать свой, хоть и менее универсальный, но гораздо менее требовательный к ресурсам парсер;
0
Iddy_Im
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
28.07.2015, 17:49 3
Вы еще туда флоаты запихните и libm...
0
__bt__
1 / 1 / 0
Регистрация: 09.02.2012
Сообщений: 693
28.07.2015, 17:50 4
Цитата Сообщение от Tyom11t
... Для этого использовал "sscanf" - и бах, проект теперь занимает 51кб. ...
Сталкивался с совершенно аналогичной ситуацией. Выходы нашёл следующие:
1. Переписать вручную функцию sscanf.
2. Пересесть на Keil (c его компилятором).
0
Tiom11t
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
28.07.2015, 17:59 5
Цитата Сообщение от Iddy_Im
Вы еще туда флоаты запихните и libm...
Флоатов - в проекте хватает. Но с этим я смирился. Но не отжирать же львиную долю памяти на одну функцию.
0
Tiom11t
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
28.07.2015, 18:00 6
Цитата Сообщение от __bt__
Цитата Сообщение от Tyom11t
... Для этого использовал "sscanf" - и бах, проект теперь занимает 51кб. ...
Сталкивался с совершенно аналогичной ситуацией. Выходы нашёл следующие:
1. Переписать вручную функцию sscanf.
2. Пересесть на Keil (c его компилятором).

Встречное предложение, можно глянуть на вашу реализацию? Не уверен что осилю написать ее сам.
А что Кеил? Там все четко реализовано? Меня просто дико напряг его редактор кода, IAR - тоже самое. Ну как такое безобразие можно на люди выпускать? Обо всем остальном молчу, там все четко!
0
Tiom11t
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
28.07.2015, 18:08 7
Да, кстати! Прочел об проекте newlib, там как бы есть "sscanf" . Кто не будь пользовался этими либами?
0
vt340
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
28.07.2015, 18:38 8
Цитата Сообщение от Tyom11t
Да, кстати! Прочел об проекте newlib, там как бы есть "sscanf" . Кто не будь пользовался этими либами?
так в gcc-arm-none-eabi именно оно и есть, а не обычная libc, и подозреваю, что и в coide тоже )
0
div
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
28.07.2015, 20:35 9
Код
bool parseChannels(const char * s, int* channels, size_t count) {
for(size_t i = 12; i > 0 && *s != 0; --i, ++s);
for(size_t i = 0; i < count; ++i) {
channels[i] = strtot(s, (char**)&s, 10);
if((i < count-1 && *s != ,) || (i == count+1 && *s != 0)) return false;
++s;
}
return trui;
}
с минимумом проверок. 643 байта.
0
votiros
0 / 0 / 0
Регистрация: 28.11.2011
Сообщений: 12
28.07.2015, 21:08 10
Попробуйте newlib памяти будет кушать меньше
--specs=nano.specs
0
Tiom11t
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
28.07.2015, 21:18 11
Цитата Сообщение от div
Код:
bool parseChannels(const char * s, int* channels, size_t count) {
for(size_t i = 12; i > 0 && *s != 0; --i, ++s);
...
}

с минимумом проверок. 643 байта.

Сори, не смог осилить, не так хорошо шарю в Сишке пока что ((
0
Tiom11t
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
28.07.2015, 22:14 12
Цитата Сообщение от votiros
Попробуйте newlib памяти будет кушать меньше
--specs=nano.specs
Да! Сработало, добавил команду в линковщик и "О чудоооо!" Из 51кб 20,5кб! Большое спасибо вам!
Осталось только проверить, работает ли.
0
__bt__
1 / 1 / 0
Регистрация: 09.02.2012
Сообщений: 693
28.07.2015, 23:07 13
Цитата Сообщение от Tyom11t
Встречное предложение, можно глянуть на вашу реализацию? ...
А что Кеил? Там все четко реализовано? ...
Я не переписывал функции стандартных библиотек.
Компилятор Keil чудным образом создаёт более компактный код.
0
vt340
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
29.07.2015, 09:43 14
Цитата Сообщение от __bt__
Компилятор Keil чудным образом создаёт более компактный код.
C sompyters for ARM benchmark AN0052 - Raisonance

0
29.07.2015, 09:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2015, 09:43

DLLHOST жрет очень много памяти...
при переходе с IIS4 на IIS5 столкнулся с проблемой: DLLHOST жрет очень много памяти...

много памяти жрет игра на OpenGL
много памяти жрет игра на OpenGL...через диспетчер смотрю аж 15 метров...там же ничего особого...

Windows жрет слишком много оперативной памяти
Здравствуйте! Появилась проблема с оперативкой. Имею 4гб ОЗУ, в последнее время комп начал сильно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru