[Решено] Почему результаты Freeram не постоянно меняются?

Human890209
Пт 17 августа 2018 г. 15:22
Привет,
Я сделал тест Freeram с Bluepill и ядро ​​Роджера. Результаты не меняются непрерывно! Почему это произошло?
Результат не меняется примерно в течение сотен случаев, а затем внезапно уменьшится на 4 КБ.
И я попробовал ядро ​​STM322EREN, результат непрерывно уменьшался на увеличение числа экземпляров.
Могу ли я получить постоянный результат от ядра Роджера?

И результат arm's getFreeram не восстановится с помощью delete () или free (). Я помню, как использовал arduino, что это произошло. И STM32Duino кажется таким же.
Есть ли способ сделать результат getFreeram восстановленным с помощью delete () или free ()?
GPIOA->regs->ODR

Хейсан
Пт 17 августа 2018 г. 16:07
Ядро Роджера использует libc malloc/free. free () просто возвращает память в пул распределения LIBC. Он фактически выпущен только в ОС, когда LIBC делает хвост.

Я предполагаю, но похоже, что STM32Generic использует GCC Builtin_malloc (), который должен более агрессивно освободить.

Хейсан
Пт 17 августа 2018 г., 17:16
Вы можете добавить это, чтобы получить количество бесплатной оперативной памяти, которая удерживается LIBC (сначала из этого пула будет выделена новая память, прежде чем получить больше кучи с Brk ()).
/* * GPIO devices */ gpio_dev gpioa = { .regs = GPIOA_BASE, .clk_id = RCC_GPIOA, .exti_port = AFIO_EXTI_PA, }; /** GPIO port A device. */ gpio_dev* const GPIOA = &gpioa; gpio_dev gpiob = { .regs = GPIOB_BASE, .clk_id = RCC_GPIOB, .exti_port = AFIO_EXTI_PB, }; /** GPIO port B device. */ gpio_dev* const GPIOB = &gpiob; gpio_dev gpioc = { .regs = GPIOC_BASE, .clk_id = RCC_GPIOC, .exti_port = AFIO_EXTI_PC, };

fpistm
Пт 17 августа 2018 г., 18:10
К вашему сведению, вы можете использовать этот пример для отображения некоторых Info:

https: // github.com/stm32duino/stm32exam ... Истики.Ино

Хейсан
Пт 17 августа 2018 г., 18:44
Я царапал в STM32Generic, чтобы попытаться выяснить, как они выключают Libc Malloc, но не могут понять это... Кто -нибудь еще знает?

Рик Кимбалл
Пт 17 августа 2018 г., 20:56
STM32Generic, кажется, использует Nano.Спецификации, которые дадут вам Newlib с оптимизированными размерами функциями.

Хейсан
Пт 17 августа 2018 г., 21:18
[Рик Кимбалл - Пт 17 августа 2018 г. 20:56] - STM32Generic, кажется, использует Nano.Спецификации, которые дадут вам Newlib с оптимизированными размерами функциями.
Спасибо - эта маленькая настройка уходит 7 кб от вспышки, и 2.5 КБ от использования барана. Ничего не сломано (пока), и нет очевидной потери производительности.

РЕДАКТИРОВАТЬ: Это также «исправляет» оригинальную проблему RAM Human890209. Весь оперативная память бесплатна () сразу же с этой опцией.

Рик Кимбалл
Пт 17 августа 2018 г., 21:33
[Хейсан - Пт 17 августа 2018 г., 21:18] - Спасибо - эта маленькая настройка уходит 7 кб от вспышки, и 2.5 КБ от использования барана. Ничего не сломано (пока), и нет очевидной потери производительности.
Попробуйте напечатать некоторые плавучие материалы (dtoStrf () printf (), sprintf () и т. Д.)

ViewTopic.PHP?t = 1241&начало = 20#p38392

Хейсан
Пт 17 августа 2018 г., 21:43
[Рик Кимбалл - Пт 17 августа 2018 г., 21:33] -
[Хейсан - Пт 17 августа 2018 г., 21:18] - Спасибо - эта маленькая настройка уходит 7 кб от вспышки, и 2.5 КБ от использования барана. Ничего не сломано (пока), и нет очевидной потери производительности.
Попробуйте напечатать некоторые плавучие материалы (dtoStrf () printf (), sprintf () и т. Д.)

ViewTopic.PHP?t = 1241&начало = 20#p38392
Интересно - эта дополнительная опция (-u _printf_float) сделала полученную бинарную двоичную на 2 кб больше, чем стандартные варианты сборки...

Human890209
Сб 18 августа 2018 г., 3:04
Привет,
Спасибо за совет.
Я исправляю только платформу.TXT [## объединить GC-сечения, архивы и объекты].
Я ищу 'spects = nano.Слова спецификаций в пластине STM32GENERIERIERERERENERENERIER.TXT и доски.текст. Это только добавляет это к платформе.текст
Итак, я добавляю '-specs = nosys.спецификации -Specs = nano.Spects -u _printf_float 'там.

Серийный отпечаток эскиза теперь постоянно меняется!
Но Freeram после delete () и free () по -прежнему так же, как и созданный. Переработанная оперативная память помещена в LIBC.
Я этого не понимаю. Весь оперативная память бесплатна () сразу же с этой опцией. void setup() { // put your setup code here, to run once: GPIOA->regs->CRL = 0b01000100010001000100010001000011; } void loop() { // put your main code here, to run repeatedly: GPIOA->regs->ODR = 0b00000000000000000000000000000001; GPIOA->regs->ODR = 0b00000000000000000000000000000000; }

Human890209
Сб 18 августа 2018 г., 5:11 утра
Чтобы получить реальную общую сумму бесплатной оперативной памяти
Мне нужно суммировать {(int) (&Верх - Reinterpret_Cast<char*>(sbrk (0)));} и {mi.fordblks}.

Я отменил '-specs = nano.спецификации ' GPIOA_Control_low = (uint32_t *)0x40010800; //assign start address to point to

Хейсан
Сб 18 августа 2018 г. 8:39 утра
1) Вам не нужно использовать '-u _printf_float' ', если вы не используете printf и хотите, чтобы он правильно отображал поплавки.

2) Может быть что -то не так со спецификациями.Нано внедрение Mallinfo (), так как он не должен показывать растущее число блоков, когда бесплатная оперативная память также увеличивается...

Серийная скорость USB ?