|
|
  |
Получить адресс возврата на cortex |
|
|
|
Apr 23 2010, 16:56
|

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

|
Цитата(Dron_Gus @ Apr 23 2010, 16:00)  Пилю менеджер кучи от zltigo. Вообще-то проще и уж точно удобнее для отладки, передавать уже готовый указатель на владельца, что и сделано через void *owner в функции void *malloc_z( heap_t *heap, size_t size, int type, void *owner ); При этом у меня владельцем обычно является указатель на TCB задачи. Хотя естественно, можно и хоть указатель на имя подставлять, хоть явно адрес вызывающей подпрограммы , а не вытаскивать его постфактум.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 23 2010, 17:57
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(AHTOXA @ Apr 23 2010, 22:36)  Примерно вот так:... Вот так лучше: Код inline __attribute__((__always_inline__)) uint32_t get_return_address() { unsigned int ret; __asm__ __volatile__ ("sub %0, LR, #4" : "=r"(ret) ); return ret; } Цитата(zltigo @ Apr 23 2010, 23:11)  Вообще-то проще и уж точно удобнее для отладки, передавать уже готовый указатель на владельца Если есть такая возможность, то конечно лучше так. Потому что адрес возврата может испортиться по ходу выполнения malloc (потому приходится его извлекать в самом начале), а параметр уж никуда не денется.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 24 2010, 00:45
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131

|
Если компилятор от Keil/ARM, то есть интринсик __return_address().
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|