|
получение "чистого" кода функции, вопрос новичка |
|
|
|
Dec 18 2007, 05:07
|
Группа: Новичок
Сообщений: 5
Регистрация: 13-08-07
Пользователь №: 29 733

|
Допустим, я написал программу на C++, скомпилил, прошил. Теперь мне понадобилось дописать в ROM ещё одну функцию, написанную также на C++. Цель - скажем, допрошил 30-40 файлов-функций в ROM и пользуешься ими из основной программы. Вопрос: 1) Возможно ли настроить среду (EWARM или любую другую) так, чтобы она выдала мне файл с "чистым" кодом функции, т.е. без кода инициализации процессора и т.п.? 2) Существуют ли стандарты файлов, предназначенных не для включения в проект, а для непостедственной прошивки в устройство?
|
|
|
|
|
 |
Ответов
|
Dec 18 2007, 10:04
|
Группа: Новичок
Сообщений: 5
Регистрация: 13-08-07
Пользователь №: 29 733

|
Мои соображения.
Если я всё правильно понимаю(в чём я сильно сомневаюсь) то стандартный исполняемый файл с пустым main, сгенерённый ewarm, имеет след. структуру: ------------------------------------ таблица векторов прерываний сstartup cmain cexit ------------------------------------ Если структура верна, то, видимо, при отключении первых двух пунктов получается работоспособный код, который можно вызвать из основной программы без потери работоспособности обоих. Поправьте если не прав
Сообщение отредактировал der Spomer - Dec 18 2007, 10:08
|
|
|
|
|
Dec 18 2007, 10:22
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 23-08-05
Пользователь №: 7 902

|
Цитата(der Spomer @ Dec 18 2007, 13:04)  Мои соображения.
Если я всё правильно понимаю(в чём я сильно сомневаюсь) то стандартный исполняемый файл с пустым main, сгенерённый ewarm, имеет след. структуру: ------------------------------------ таблица векторов прерываний сstartup cmain cexit ------------------------------------ Если структура верна, то меня, видимо, при отключении первых двух пунктов получается работоспособный код, который можно вызвать из основной программы без потери работоспособности обоих. Поправьте если не прав еще есть секция инициализации переменных, стека и т.д. также надо разделить области ОЗУ ядра и приложения при использовании глобальных переменных Более правильный путь - компиляция obj. Она позволит отключить все ненужные в данном случае секции и получить код с заданного адреса. Надо проверить идею: разбираем map файл ядра, генерим из него файлик с указанием адресов всех использованных функций. Подключая полученый файл к новому проекту имеем все нужные адреса. Еслм функции в ядре нет, указываем линкеру, что ее надо подключать в пользовательскую область. Вызов пользовательских функций делаем через функцию-транслятор( если их много) или по жестким адресам (если мало). Функция -транслятор включается в пользовательский проект. По идее должно работать
|
|
|
|
|
Dec 18 2007, 10:47
|
Группа: Новичок
Сообщений: 5
Регистрация: 13-08-07
Пользователь №: 29 733

|
Цитата(Shuuura @ Dec 18 2007, 16:22)  компиляция obj Так и сделал. Плюс к глобальным переменным дописал __no_init. Работает. Спасибо.
|
|
|
|
Сообщений в этой теме
der Spomer получение "чистого" кода функции Dec 18 2007, 05:07 MALLOY2 Цитата(der Spomer @ Dec 18 2007, 09:07) Д... Dec 18 2007, 07:25 der Spomer ЦитатаЗАЧЕМ это может понадобитьсяЦитатачтобы поль... Dec 18 2007, 09:15  Shuuura Цитата(der Spomer @ Dec 18 2007, 12:15) М... Dec 18 2007, 09:34 _dem 1) ROM = Read Only Memory
2) сразу на будущее озна... Dec 18 2007, 07:38 MALLOY2 Цитатасразу на будущее ознакомьтесь с понятием тра... Dec 18 2007, 07:46 sergik_vrn Цитата(MALLOY2 @ Dec 18 2007, 10:46) А эт... Dec 18 2007, 08:13 MALLOY2 Цитатав результате работы компилятора получаются ... Dec 18 2007, 08:17 sergik_vrn Цитата(MALLOY2 @ Dec 18 2007, 11:17) Може... Dec 18 2007, 08:51 Shuuura Попробуйте заранее расположить 30-40 по фиксирова... Dec 18 2007, 08:31 alexander55 Цитата(Shuuura @ Dec 18 2007, 11:31) Попр... Dec 18 2007, 08:38  Shuuura Цитата(alexander55 @ Dec 18 2007, 11:38) ... Dec 18 2007, 08:41   alexander55 Цитата(Shuuura @ Dec 18 2007, 11:41) Я та... Dec 18 2007, 08:59 Shuuura Как указать линкеру, что используемая функция уже ... Dec 18 2007, 11:39 IgorKossak Голую main можно получить если исключить startup и... Dec 18 2007, 11:55 Shuuura Цитата(IgorKossak @ Dec 18 2007, 14:49) И... Dec 18 2007, 11:55  Сергей Борщ Цитата(Shuuura @ Dec 18 2007, 13:55) Как ... Dec 18 2007, 14:03 _dem В общих чертах -
Выполняемый (загружаемый) код д... Dec 18 2007, 12:12 Shuuura Как-то сложно и слишком по ПКшному получается. А е... Dec 18 2007, 12:36 _dem Да, IAR не предусматривает динамической загрузки к... Dec 18 2007, 12:45 Shuuura А как быть с системными функциями С? (те которые я... Dec 18 2007, 13:13 MALLOY2 ЦитатаКак заставить IAR-ий линкер НЕ ПИСАТЬ по дан... Dec 18 2007, 13:50 _dem в общем, направление траншеи ясно, а как именно, ч... Dec 18 2007, 13:58 MALLOY2 ЦитатаМне, например, хочется красивую динамическую... Dec 18 2007, 14:04 _dem Текущий проект - SAM7X, IAR 4.41a, uCOS/II, активн... Dec 18 2007, 14:14 Shuuura Цитата(_dem @ Dec 18 2007, 17:14) библиот... Dec 18 2007, 16:22 MALLOY2 Я когда то делал один проэкт в котором было много ... Dec 18 2007, 14:17 _dem мне кажется, о защите речь не заходила
тем более п... Dec 18 2007, 14:30 Сергей Борщ Цитата(_dem @ Dec 18 2007, 16:30) На сим ... Dec 18 2007, 15:48 _dem ЦитатаПоддержка операций с плавающей точкой займет... Dec 19 2007, 07:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|