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

 
 
> Менеджер динамической памяти в IAR, как подменить на свой?
Andy Mozzhevilov
сообщение Apr 21 2009, 14:58
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Функции malloc, free, realloc, calloc реализованы в стандартной библиотеке, чтобы ими пользоваться включаем stdlib.h:
Код
#include <stdlib.h>

void main (void)
{
    void * pSlon;

    pSlon = malloc(1000);
}

Вопрос: как, не внося изменения в системный stdlib.h, объяснить IAR-у чтобы он использовал мою реализацию функий malloc, free, realloc, calloc взамен библиотечных? То есть чтобы исходник выглядел так же, как и выше, но реализация функций была заменена?
Есть какой-то кошерный способ это сделать?


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
HARMHARM
сообщение Apr 21 2009, 15:36
Сообщение #2


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Я вообще-то не очень разбирался, но есть два метода:
1) Наглый:
#include <stdlib.h>

void *myMalloc(size_t size) {
// log
return malloc(size);
}

void myFree(void *ptr) {
// log
free(ptr);
}

#define malloc(size) myMalloc(size)
#define free(ptr) myFree(ptr)

2) Правильный:
Можно почитать в главе "Overriding library modules" в ARM® IAR C/C++ Compiler Reference Guide. Суть в подключении своих функций, они должны в командной строке линкера быть перед библиотечными. Вы же cstartup стандартный заменяете?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 22 2009, 05:59
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(HARMHARM @ Apr 21 2009, 18:36) *
есть два метода:
1) Наглый:
#define malloc(size) myMalloc(size)
#define free(ptr) myFree(ptr)


Пользуюсь без зазрения совести именно таким методом. Для облагораживания добавлены варнинги про то, что мол куча самописная.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 12:27
Рейтинг@Mail.ru


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