Перейти к содержанию
    

Дальнейшее обсуждение считаю бессмысленным.

Чего не знаю, того не существует - этот лозунг не для меня.

Хорошо! Как мне (и другим желающим) смоделировать такую же ошибку при работе с ARMCC! Подскажите.

Изменено пользователем Pridnya

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разрешите поинтересоваться, а как у вас получилось, что адрес стека оказался не выровнен? И в какой IDE вы работаете? У меня такого ни разу не было, ни в одном проекте.

Eclipse + GCC, адрес стека был 0x2001FFFF, стал 0x20020000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо! Как мне (и другим желающим) смоделировать такую же ошибку при работе с ARMCC! Подскажите.
Читайте доки на свой компилятор и линкер.

http://infocenter.arm.com/help/index.jsp?t...474e/index.html

 

В gcc - это элементарно.

Для вас тоже это не должно составить труда - поправьте scatter files.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читайте доки на свой компилятор и линкер.

http://infocenter.arm.com/help/index.jsp?t...474e/index.html

 

В gcc - это элементарно.

Для вас тоже это не должно составить труда - поправьте scatter files.

Пока ждал вашего ответа. Уже успел по вашей ссылке сходить, понравились регистраторы. Cortex A8 MCU, на Linux что ли (судя по объему ОЗУ на Linux)? Только что-то описания не нашел и в таблице про синхронизацию времени ни слова. :rolleyes:

Вот мой scatter-файл (создается IDE при создании проекта) для проекта с симулятором, я в этом проекте всякие мелочи:

; *************************************************************

; *** Scatter-Loading Description File generated by uVision ***

; *************************************************************

 

LR_IROM1 0x08000000 0x00100000 { ; load region size_region

ER_IROM1 0x08000000 0x00100000 { ; load address = execution address

*.o (RESET, +First)

*(InRoot$$Sections)

.ANY (+RO)

}

RW_IRAM1 0x20000000 0x00020000 { ; RW data

.ANY (+RW +ZI)

}

}

Что в нем поправить?

Изменено пользователем Pridnya

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ложку дай...

Читайте доку! Я не страна советов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ложку дай...

Читайте доку! Я не страна советов.

Сначала вы мне напомнили, что можно разрабатывать программы без IDE, затем посоветовали читать доку на предыдущую версию моего компилятора, а затем посоветовали поправить scatter-файл, ну я и подумал, что вы знаете, что там поправить в 14-ти строках включая комментарии. :rolleyes:

Я вам scatter-файл, а вы "я не страна советов".

Изменено пользователем Pridnya

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вам scatter-файл, а вы "я не страна советов".

startup.s посмотрите, там есть чего наворотить при желании.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

startup.s посмотрите, там есть чего наворотить при желании.

Да, в этом файле если накосячить, то в HardFaultHandler улетает. :rolleyes:

;   
<o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x000003FF; 0x00000400 да хоть вот так

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

Понятно, откуда у товарища ошибка появилась.

Вообще и startup и scatter файл создаются IDE при создании проекта и ошибок с выравниванием нет.

Изменено пользователем Pridnya

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще и startup и scatter файл создаются IDE при создании проекта и ошибок с выравниванием нет.
Пока вам не понадобится сделать что-то, под что создатели вашей IDE не предусмотрели соответствующей галочки.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот начало моего стартапа с измененными базами/размерами стека и кучи:

;------------------------------------ 4kB STACK
Stack_Mem         EQU     0x1000F000
Stack_Size        EQU     0x00001000
__initial_sp      EQU     Stack_Mem+Stack_Size
;------------------------------------

;------------------------------------ 60kB HEAP
Heap_Mem      EQU     0x10000000
Heap_Size     EQU     0x0000F000
__heap_base   EQU     Heap_Mem
__heap_limit  EQU     Heap_Mem+Heap_Size
;------------------------------------

                PRESERVE8
                THUMB.......................

 

Думаю что вершину стека указать здесь не проблема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как куда? В регистры.

Да, действительно.

Почему-то был уверен, что у printf работает только через стек (из-за переменного числа аргументов). Ан нет, всё отлично в регистры лезет, если аргументов немного. Век живи...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...