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

 
 
> Получить адресс возврата на cortex
Dron_Gus
сообщение Apr 23 2010, 13:45
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Пилю менеджер кучи от zltigo. Решил добавить пару сервисных функций для отладки. В частности хочу знать, откуда был вызов на выделение памяти. Для этого как-то нужно выдернуть содержимое регистра LR. В асме не силен. Так что все потуги пока не увенчались успехом. Может кто подскажет обертку/функцию для получения LR?


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Apr 23 2010, 16:21
Сообщение #2


фанат дивана
******

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



Примерно вот так:
Код
inline __attribute__((__always_inline__)) uint32_t get_return_address()
{
    unsigned int ret;
    __asm__ __volatile__ ("mov %0, LR" : "=r"(ret) );
    return ret - 4;
}

void __attribute__((__noinline__)) print_calee(void)
{
    volatile uint32_t ret = get_return_address();
    uart << "called from \t"; uart.put_hex(ret);
}

void test1(void)
{
    print_calee();
}

void test2(void)
{
    print_calee();
}


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 13:00
Рейтинг@Mail.ru


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