Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: выполнение программы в RAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
tolik_zp
Добрый день!
Как пнуть иар, чтобы стартап переписал внешнюю функцию, написанную на асме, в озу?
zltigo
Цитата(tolik_zp @ Jul 2 2007, 15:53) *
Как пнуть иар, чтобы стартап переписал внешнюю функцию, написанную на асме, в озу?

А чего его 'пинать' - скажите, что она помещается в сегменте с зарезервированным для таких нужд именем CODE_I. Все.
KRS
Цитата(zltigo @ Jul 2 2007, 18:04) *
А чего его 'пинать' - скажите, что она помещается в сегменте с зарезервированным для таких нужд именем CODE_I. Все.

Но если нет описаний __ramfunc в .с файлах работать не будет надо еще в .asm файл добавить несколько директив
Код
        PUBWEAK ?init?tab?CODE_I
        PUBWEAK `?*?CODE_ID`
        RSEG CODE_ID:CODE:NOROOT(2)
`?*?CODE_ID`:

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?CODE_I:
        DCD      sfe(CODE_I) - sfb(CODE_I), sfb(CODE_I), sfb(CODE_ID)
tolik_zp
Цитата(KRS @ Jul 2 2007, 17:51) *
Но если нет описаний __ramfunc в .с файлах работать не будет надо еще в .asm файл добавить несколько директив
Код
        PUBWEAK ?init?tab?CODE_I
        PUBWEAK `?*?CODE_ID`
        RSEG CODE_ID:CODE:NOROOT(2)
`?*?CODE_ID`:

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?CODE_I:
        DCD      sfe(CODE_I) - sfb(CODE_I), sfb(CODE_I), sfb(CODE_ID)


пора переносить ветку к начинающим wink.gif

в с-файле есть такая строчка:
__ramfunc extern void video_out(void);

далее в асме пишу RSEG CODE_I, отладчик ИАРа при этом нормально переходит на адреса ram при выполнении функции, но в железе ничего не происходит. более того, пробовал Ваш код, но компилятор ругается на синтаксис последней строки Вашего примера, хотя в мануале так и написано
tolik_zp
кстати, я в стартапе не нашел ничего, похожего на копирование из code_id в code_i, хотя синшые функции нормально работают в озу. я совсем запутался
Leen
Когда разбирался с этим вопросом в RVCC, там стартап копировал сишные функции, слинкованные в озу, из флэша, где-то в районе от __user_initial_stackheap до __main. Естественно, при этом все было залито во флэшку, а в раму кидалось после старта (холодного или горячего, с отладчиком и без).
tolik_zp
а киньте в меня кто-нибудь стартапом, там где есть код копирования в рам
SpiritDance
Под иаром код копирования в RAM располагается в функции __segment_init, исходник в ировской папке src/lib

http://electronix.ru/forum/index.php?showtopic=33718
tolik_zp
чего-то у меня __segment_init копирует в очень большие адреса, хотя в мапе как положено - video_out лежит с 0х40000000
объясните пожалуйста чайнику, что тут к чему?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.