RuWorker2 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 (изменено) · Жалоба Дальнейшее обсуждение считаю бессмысленным. Чего не знаю, того не существует - этот лозунг не для меня. Хорошо! Как мне (и другим желающим) смоделировать такую же ошибку при работе с ARMCC! Подскажите. Изменено 9 декабря, 2016 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Разрешите поинтересоваться, а как у вас получилось, что адрес стека оказался не выровнен? И в какой IDE вы работаете? У меня такого ни разу не было, ни в одном проекте. Eclipse + GCC, адрес стека был 0x2001FFFF, стал 0x20020000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Хорошо! Как мне (и другим желающим) смоделировать такую же ошибку при работе с ARMCC! Подскажите.Читайте доки на свой компилятор и линкер. http://infocenter.arm.com/help/index.jsp?t...474e/index.html В gcc - это элементарно. Для вас тоже это не должно составить труда - поправьте scatter files. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 (изменено) · Жалоба Читайте доки на свой компилятор и линкер. 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) } } Что в нем поправить? Изменено 9 декабря, 2016 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Ложку дай... Читайте доку! Я не страна советов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 (изменено) · Жалоба Ложку дай... Читайте доку! Я не страна советов. Сначала вы мне напомнили, что можно разрабатывать программы без IDE, затем посоветовали читать доку на предыдущую версию моего компилятора, а затем посоветовали поправить scatter-файл, ну я и подумал, что вы знаете, что там поправить в 14-ти строках включая комментарии. :rolleyes: Я вам scatter-файл, а вы "я не страна советов". Изменено 9 декабря, 2016 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Я бы подcказал, но пользуюсь gcc... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Я вам scatter-файл, а вы "я не страна советов". startup.s посмотрите, там есть чего наворотить при желании. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 (изменено) · Жалоба 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 при создании проекта и ошибок с выравниванием нет. Изменено 9 декабря, 2016 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Вообще и startup и scatter файл создаются IDE при создании проекта и ошибок с выравниванием нет.Пока вам не понадобится сделать что-то, под что создатели вашей IDE не предусмотрели соответствующей галочки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mister_DSP 0 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Вот начало моего стартапа с измененными базами/размерами стека и кучи: ;------------------------------------ 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....................... Думаю что вершину стека указать здесь не проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 9 декабря, 2016 Опубликовано 9 декабря, 2016 · Жалоба Как куда? В регистры. Да, действительно. Почему-то был уверен, что у printf работает только через стек (из-за переменного числа аргументов). Ан нет, всё отлично в регистры лезет, если аргументов немного. Век живи... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться