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

 
 
> Перемещение функции в памяти ..., Нужен совет
3.14
сообщение Mar 24 2005, 09:35
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Как в C коректнее скопировать функцию из одной области памяти в другую и затем вызвать из нового местоположения.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
3.14
сообщение Mar 24 2005, 11:20
Сообщение #2


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



2 max
Я правильно понял Ваш пример?
Копируемая функция source_f() переносится по адресу функции source_f_end(), вызов пересенной функции осуществляется через pointer() ?

Попробовал пример сунуть в VDSP4.0.
В дебуггере после memcpy() функция source_f_end() не меняет своего содержимого. В железе все то же виснет sad.gif


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
makc
сообщение Mar 24 2005, 11:53
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(3.14 @ Mar 24 2005, 14:20)
2 max
Я правильно понял Ваш пример?
Копируемая функция source_f() переносится по адресу функции source_f_end(), вызов пересенной функции осуществляется через pointer() ?

Попробовал пример сунуть в VDSP4.0.
В дебуггере после memcpy() функция source_f_end() не меняет своего содержимого. В железе все то же виснет sad.gif
*


Не совсем так. При решении этой задачи есть две проблемы:
1. Определение размеров копируемой функции.
2. Вызов функции из того места, куда она была скопирована.

1. Для решения этой проблемы вводится функция source_f_end(), которая будет лежать после копируемой функции, т.е. адрес source_f_end - это адрес следующего байта после тела копируемой функции. Таким образом, разность source_f_end - source_f нам даст размер копируемой функции.
2. Функцию копируем в объявленный буфер. Поэтому функция source_f_end и не должна изменить своего содержимого - это только маркер. Буфер для копирования лучше объявить не локальным, а глобальным, тогда будет меньше проблем, т.к. не все процессоры умеют исполнять код из стека. Вызов осуществляется через pointer, значение которого должно быть равно адресу начала буфера, куда была скопирована функция.

А что есть в самой копируемой функции? Ведь если там есть прямые вызовы других функций и обращение к глобальным переменным, то она работать не будет. Т.к. как правило их смещения вычисляются линкером при линковке и едут непредсказуемым образом при копировании функции. Может быть в этом проблема?


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 3.14   Перемещение функции в памяти ...   Mar 24 2005, 09:35
- - alex_k   Размышления вслух... Если после компиляции си-комп...   Mar 24 2005, 10:01
- - makc   Цитата(3.14 @ Mar 24 2005, 12:35)Как в C коре...   Mar 24 2005, 10:05
- - olefil   От части этот механизм представлен в оверлеях, ког...   Mar 24 2005, 11:18
|- - olefil   Компилятор в VDSP может не понимать того, что вы д...   Mar 24 2005, 11:24
- - 3.14   2 olefil Я по большому счету, пытаюсь перенести as...   Mar 24 2005, 11:25
|- - olefil   А вчем конкретная проблема? Может чем помогу?   Mar 24 2005, 11:27
|- - bve   Есть еще одна проблема, зависящая от компилятора и...   Mar 24 2005, 11:51
|- - makc   Цитата(bve @ Mar 24 2005, 14:51)Есть еще одна...   Mar 24 2005, 11:57
|- - olefil   Скорее это так, проблем с передачей параметров дей...   Mar 24 2005, 12:03
- - 3.14   2 maks <1. Для решения этой проблемы вводится ф...   Mar 24 2005, 13:06
|- - sweetin   Цитата(3.14 @ Mar 24 2005, 16:06)<Есть ста...   Mar 24 2005, 13:20
|- - olefil   У меня ща все платы в доработке не фига не попробо...   Mar 24 2005, 13:47
- - 3.14   2 olefil <А че показывает VDSP...> Листинг м...   Mar 24 2005, 13:58
|- - olefil   Если disasm показывает фигню, то функция паковки 4...   Mar 24 2005, 14:01
- - 3.14   Кстати, а как из С обратиться к PX регистру?   Mar 24 2005, 14:52
|- - olefil   Плату мне так и не подогнали. А на счет PX, глянул...   Mar 25 2005, 09:52
- - 3.14   Спасибо, разобрался, заменил DMA на самодельную пе...   Mar 25 2005, 10:09
|- - olefil   Хороший вопрос. Конечно можно провести поиск конца...   Mar 25 2005, 10:21
- - 3.14   <Если еще интресно почему DMA не пашет я гляну?...   Mar 25 2005, 10:40
- - olefil   Очень странно... потому как я их там только и держ...   Mar 25 2005, 10:51


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

 


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


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