Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil, scatter
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Всем привет!

Вот такая ситуация.

Вводная - все тот же ARM968E-S

Что делаю:
1. Стартую с адреса внутренней флеш
2. Включаю TCM
3. Инициализация стеков
4. scatter_load должен мне все функции перенести в remap область, включая вектора

Что не получается:
0. Линкер ругается - L6286E
1. Вектора (которые exceptions) - слишком длинное расстояние PC+xx
2. Стеки, все-таки, инициализироваться должны после ремапа ПМСМ

Вот здесь Keil предлагает решение
http://www.keil.com/support/docs/3607.htm

все бы гут, но я тогда вылезу за слово на вектор

Вопросы:
1. Сам по себе ремап - после включения TCM она автоматом маппируется на адрес 0? не нашел этого нигде, ни в арме, ни в доке на проц
2. Как оно вообще нужно сделать првильно с векторами? Пока попробую сделать кусок кода уже в ремап области, чтобы вектора нормально попадали на исключения
3. Скаттер. Все ли в нем правильно?
Код
LR_IROM1 0x20000000 0x00010000        ; load region size_region
{
    RO_IROM1 0x20000000 0x00010000; RO/Exec data
    {
        *.o (RESET, +First)
        *(InRoot$$Sections)
        .ANY (+RO)
    }
    LR_VECTORS 0x00000000 0x8000; ITCM memory
    {
        *.o (MyVectors)
    }
    LR_ITCM_CODE_EXCEPTION +0
    {
        *.o (EXCEPTION)
    }
    LR_STACKS    +0
    {
        *.o (MyStacks)
        *.o (Heap)
        *.o (Stacks)
    }
    LR_ITCM +0
    {
        *.o (RAMFUNC)
    }
    LR_RAM2 0x00400000 0x8000; DTCM memory
    {
        .ANY (+RW, +ZI)
    }
}
toweroff
В общем почитал я ARM'овский "Developer Guide", проникся...

В результате имеем следующее:
1. Вектора, стеки, критические секции, обработчики прерываний и т.д. размещаем в отдельных секциях
2. В стартапе, фактически, остаются: а) Размещение стеков; б) Вектора; в) Начальная инициализация
3. В инициализации - а) включаем TCM, там же сразу ремап; б) инициализируем стеки; в) уходим на __main

Вектора самому копировать не надо, все сделает scatterload

Сам скаттер получился вот таким:
Код
LR_IROM1 0x20000000 0x00010000            ; load region size_region
{
    RO_IROM1 0x20000000 0x00010000    ; RO/Exec data
    {
        *.o (RESET, +First)
        *(InRoot$$Sections)
        * (+RO)
    }
    LR_ITCM 0x00000000         ; ITCM memory
    {
        *.o (EXCEPTION, +First)
    }
    LR_STACKS    +0    
    {
        *.o (MyStacks)
        *.o (Heap)
    }
    LR_RAMFUNC +0
    {
        *.o (RAMFUNC)
    }
    LR_DTCM 0x00400000 0x8000    ; DTCM memory
    {
        * (+RW, +ZI)
    }
}

toweroff
Один вопрос остался, и вот какого плана
Кто как что использует и есть ли в этом смысл
Поясню.
1. Полагаемся на scatterload и не заморачиваемся
2. Сами помещаем код из образа куда надо (ну хоть какой-то тормоз в разборе кода в плане атак на кристалл)

в пику первому варианту - использование стандартных библиотек, но оно все известно
в то же второго варианта - есть смысл?

Собственно, куда жить-то? sm.gif
зы. Или я гоню волну, которая уже давно успокоилась?
aaarrr
Цитата(toweroff @ Jun 28 2013, 04:55) *
хоть какой-то тормоз в разборе кода в плане атак на кристалл

А в чем смысл "тормоза"? Если у злоумышленника есть доступ к коду, то какая разница, что у него внутри?
toweroff
Цитата(aaarrr @ Jun 28 2013, 14:14) *
А в чем смысл "тормоза"? Если у злоумышленника есть доступ к коду, то какая разница, что у него внутри?

ну хоть как-то помучать больше, чем стандартная библиотека sm.gif
хотя, если серьезно, от лукавого это все... если есть код, штат сотрудников - ну +день-неделя, результат-то все равно будет тот же
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.