2015-04-27 9 views
0

Пытается запустить мигающий образец для Atmel sam3s и проверять указатель стека ... SP имеет значение 0x20000238 в начале основной функции, которая равна также Рамба + RW + ZI для этого образца.Организация кучи-кукушки Cortex-M3 с использованием keil

Адрес ОЗУ база для этого чипа: 0x20000000 Общий объем оперативной памяти: 0x10000

Я ожидал, что зр быть инициализированы на 0x20010000 и сходящий. Может ли кто-нибудь объяснить, если я ошибаюсь или нет?

+1

Вы ошибаетесь, потому что компоновщик не считает размер ОЗУ в своей конфигурации по умолчанию, поэтому стек начинается с наименьшего возможного адреса. Секции просто размещаются один за другим. Если вы считаете, что это, вероятно, самый худший вариант, поскольку (небольшой) стек растет прямо в ваши данные RW, ну, вы правы. – Pait

+0

Да, это не разумное место для стека. – Taheri

ответ

0

Как сказал Пайт (он должен был ответить на вопрос, чтобы я мог принять его, я думаю), Я ошибался, полагая, что стек поместится в конце ОЗУ по умолчанию. Но я думаю, что было бы разумно сделать это там.

Это, как я делаю это для моей SAM3S микро-, путем изменения файла рассеивают

LR_IROM1 0x00400000 0x00080000 { ; load region size_region 
    ER_IROM1 0x00400000 0x00080000 { ; load address = execution address 
    *.o (RESET, +First) 
    *(InRoot$$Sections) 
    .ANY (+RO) 
    } 
    RW_IRAM1 0x20000000 0x00010000 { ; RW data 
    .ANY (+RW +ZI) 
    } 
    RW_STACK 0x2000C000 UNINIT 0x4000 { ; STACK data 
    *.o (STACK) 
    } 
} 

RAM база = 0x20000000

Total RAM = 64 кб

Предназначенный размер стека = 16 кб