Полная версия этой страницы:
ARM
Zelepuk
Nov 11 2010, 13:58
Есть цель: научится писать простые приложения (управление ЖК, использование АЦП, вывод через UART строки) для ARM (at91SAM9260 в частности)
Знания: базовые навыки Си-программировния.
В связи с отсутствием "разжёванной" информации для ARM, я начал практиковаться с AVR (ну для этих то инфы просто море!!!!)
Есть первые результаты. По сути ничего сложного.
Но!
Объясните чем отличается программа на AVR от программы для ARM.
Вот для AVR ожно расписать так:
Выставляем нужные биты в регистры -> используя интринсики разрешаем прерывания -> и вперёд в главный цикл ногами дрыгать!!!!
А в ARM как?
Насколько я понял нужно учесть кучу параметров, так как ARM стартует на низкой частоте, да ещё и внешнюю SD-RAM инициализировать надо и... да мало ли чего ещё.
Кто-нибудь может просто по шагам расписать принцип дрыгания ногами для ARM. Нужно учесть что прога лежит в Dataflash, потом должна запускаться из внешней SD-RAM. Ну Частота тактовая должна быть нормальная (Мегагерцы). Может я чего упустил....
Заранее спасибо.
DRUID3
Nov 11 2010, 17:31

Цитата(Zelepuk @ Nov 11 2010, 15:58)

А в ARM как?
Насколько я понял нужно учесть кучу параметров, так как ARM стартует на низкой частоте, да ещё и внешнюю SD-RAM инициализировать надо и... да мало ли чего ещё.
... да-да-да... А еще добавить немножечко воды и ...ммм... пукнуть туды

)))
Начнем с такого вопроса -
какой у Вас ARM?
AlexandrY
Nov 11 2010, 18:46
Цитата(Zelepuk @ Nov 11 2010, 15:58)

Кто-нибудь может просто по шагам расписать принцип дрыгания ногами для ARM. Нужно учесть что прога лежит в Dataflash, потом должна запускаться из внешней SD-RAM. Ну Частота тактовая должна быть нормальная (Мегагерцы). Может я чего упустил....
Как пример вот:
http://eewiki.ru/wiki/Example_PinToggle_for_ARMGS10Инициализация периферии в ARM-ах действительно сложное дело.
Еще более оно усложняется тем что не всегда хорошо описана в документации.
Большинство производителей чипов просто создают библиотеки подпрограмм для работы с их периферией.
Как правило у разных производителей эти библиотеки абсолютно разные по составу и стилю.
Кроме этого собственные библиотеки идут с компиляторами под ARM.
Поэтому выбор конкретного ARM-а очень критичен.
DpInRock
Nov 11 2010, 22:52
АРМ - это всего лишь система команд. Архитектура процессорного ядра.
Так как пишем на Си, то наплевать на систему команд. И на архитектуру.
Не наплевать станет несколько позже.
Основной проблемой является частное устройство конкретной модели. Т.е. набор периферии, как обычной (таймеры, USB,UART), так и специфичной - PLL, MMU, DMA...
Выход простой. Купить семок мешок и читать даташиты, пока этот мешок не сгрызешь.
Zelepuk
Nov 12 2010, 05:18
Цитата(DRUID3 @ Nov 11 2010, 20:31)


... да-да-да... А еще добавить немножечко воды и ...ммм... пукнуть туды

)))
Начнем с такого вопроса -
какой у Вас ARM?
бред какой-то....
В старте написано какой АРМ у меня.
segment
Nov 12 2010, 08:31
Помойму сейчас уже нет разницы под что писать. Тем более на Си/Си++. Что мешает открыть доку на проц и посмотреть примеры?
DRUID3
Nov 12 2010, 15:13
Цитата(Zelepuk @ Nov 12 2010, 07:18)

бред какой-то....
В старте написано какой АРМ у меня.
Я конечно не самый внимательный в мире человек, но что-то сомневаюсь что я мог пропустить прямое указание на
at91SAM9260. Вы его
потом приписали

... Обманывать - нехорошо, непедагогично...
Zelepuk
Nov 12 2010, 15:52
Цитата(DRUID3 @ Nov 12 2010, 18:13)

Я конечно не самый внимательный в мире человек, но что-то сомневаюсь что я мог пропустить прямое указание на
at91SAM9260. Вы его
потом приписали

... Обманывать - нехорошо, непедагогично...

DRUID3 вы ИМХО самый странный участник форума.... что за чушь!
Там же не написано что я редактировал сообщение.
Если вы серьёзно (а то хрен вас разберёт)))
AlexandrY
Nov 12 2010, 19:10
Цитата(Сега @ Nov 12 2010, 10:31)

Помойму сейчас уже нет разницы под что писать. Тем более на Си/Си++. Что мешает открыть доку на проц и посмотреть примеры?
Потому что доки как для PIC-ов больше не пишут.
Чипы сложнее в 10 раз и клепают их в пару раз быстрее. Производителям уже не до доки.
А на борьбу с недокументированными возможностями ARM-ов могут уйти многие месяцы.
Берясь за ARM-ы сразу резервируйте время на исследования и не надейтесь на доку.
Цитата(AlexandrY @ Nov 13 2010, 01:10)

Потому что доки как для PIC-ов больше не пишут.
Чипы сложнее в 10 раз и клепают их в пару раз быстрее. Производителям уже не до доки.
А на борьбу с недокументированными возможностями ARM-ов могут уйти многие месяцы.
Берясь за ARM-ы сразу резервируйте время на исследования и не надейтесь на доку.
Тоска какая-то
Неужели нет каких-нибудь новых быстрых контроллеров, которые были бы так же хорошо документированы и просты в применении, как старички AVR, например?
Я как начал с AVR так на них и застрял. Армы SAM7s оказались слишком сложны
demiurg_spb
Nov 15 2010, 08:58
MSP430, AVR32, DSPIC...
но всё это сильно в сторону от ARM mainstream'а, так что думайте сами, решайте сами
Lmx2315
Nov 15 2010, 08:59
..посмотрите в сторону STM32 ..сам я не программировал , но вроде как ходят слухи

что для данного проца наделано куча библиотек с исходниками , и подёргать ножками и может даже что посложнее там - нет проблем, какая вам переферия нужна - берёте из библиотек модуль соответствующий и работаете.
(STM32 тоже ARM . )
MrYuran
Nov 15 2010, 09:17
Цитата(Lmx2315 @ Nov 15 2010, 11:59)

..сам я не программировал , но вроде как ходят слухи

что для данного проца наделано куча библиотек с исходниками
Библиотек с исходниками у всех полно, только вот качество их - того...
На уровне студентов старших курсов
DpInRock
Nov 15 2010, 10:35
Что за ерунда.
Рекомендую. Поизучайте какой-нибудь Пентюк на предмет ембеденья (примерно час).
После этого документация на АРМ7 покажется краткой и ясной.
Кстати, атмеловские (да и филипсовские) армы даже по-проще АВРов будут. Ибо после подачи питания - сразу работают (загрузчик чего-нибудь вам да и скажет). А в АвРах фузы жечь - не приведи ошибиться.
Периферии больше - да. Но никто не мешает ее не использовать.
Единственное отличие от АВР - это надо настроить частоту на которой собрался работать. И все.
Все остальное - по ходу дела.
---
А вот современные АРМы для планшетов - это да. Это круто. Но они - нафик не нужны. Себе для развлечения восьмислойную плату городить - проще уж купить готовое.
MrYuran
Nov 15 2010, 10:58
Цитата(DpInRock @ Nov 15 2010, 13:35)

А вот современные АРМы для планшетов - это да. Это круто. Но они - нафик не нужны. Себе для развлечения восьмислойную плату городить - проще уж купить готовое.
Производители планшетов тоже так считают.
Сегодня вычитал на планшетном форуме про начинку SmartQ - плата Telechips TCC8900 Demo Board
А я всё удивлялся - что это китайские планшеты похожи друг на друга, как близнецы
radistka
Nov 15 2010, 12:22
возвращаясь к первому сообщению, кто-нибудь может объяснить толково как правильно залить программу в Dataflash чтобы она потом запустилась из внешней SDRAM?
1. если использую flashloader, то программа как-будто пишется, но не стартует при подаче питания - SDRAM что ли не инициализировалась....не понятно
2. написала загрузчик, который с нужного адреса Dataflash копирует программу в SDRAM и перехожу на начало программы в SDRAM - без прерываний работают простенькие проги, с прерываниями - нет. В чем подвох может быть?
DpInRock
Nov 15 2010, 14:56
1. Главу Boot Program пересказывать не имеет смысла. Ее надо читать.
2. Вектора находятся в SRAM
Zelepuk
Nov 15 2010, 17:33
Сложновато-сложновато, всё равно((
Например подёргать ногами на AVR можно просто (напримере IAR)
DDRC = 255;
PORTC = 255;
сколько не искал подобные констркукции для ARM... не нашёл((
Как осуществляется доступ к PA0... PA31, PB0... PB31 и т.д.
(здаётся мне их настроить их на вывод тоже непрсото - одной строчкой необойтись)
P.S. Наверное нужно и впрям запастись мешком семечек и курить даташит....
radistka
Nov 15 2010, 18:20
Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь )
Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально
Zelepuk
Nov 15 2010, 18:40
Цитата(radistka @ Nov 15 2010, 21:20)

Boot Program читан, FlashLoaderGuide перечитан, все легко и просто - прописал путь до загрузчика, подцепил mac файл, где инициализируется SDRAM и все должно работать... Но ведь не работает! В надежде, что не я первая стою на этих граблях, надеюсь на помощь )
Что касается векторов прерываний, то они как были в SRAM, так и лежат там себе... Первое прерывание (работаю с touch screen) обрабатывается, но из него не выходит программа, то есть прерывание не сбрасывается? но при загрузке проги напрямую в SDRAM обработка прерываний идет нормально
присоединяюсь... только про mac-файл бы узнать подробнее)
DpInRock
Nov 15 2010, 20:20
Если читан и перечитан, то какие могут быть "вроде"?
Научитесь для начала в SRAM программы запускать.
Потом, если надо будет SDRAM -
Программа из датафлэш грузится в SRAM, переписывает настоящую программу, написанную и откомпилированную для
SDRAM (предварительно инициализировав оную).
Переписывает вектора прерываний на нужное место (на самом деле проще всего всунуть в стартап команду выборки прямо из AIC адреса - тогда вектора подойдут от отстатков загузчика) .
После чего уже джамп на начало SDRAM.
Естественно, никакой инициализации SDRAM после этого. И вообще - никакой инициализации. Все - в первоначальном загрузчике делать.
---
По жизни вот так делать.
1. Пишем программы для SRAM и тренируемся их запускать.
2. Компилируем программу для SDRAM и с помощью одной из уже написанный программок засовываем ея в датафлэш куда-нибудь в серединку.
3. После чего грузим в SDRAM программку, которая токо и умеет, что инициализировать PLL+SDRAM? копировать программу из п.2 в SDRAM и запускать оную
4. После удачи, программку из пункта 3 обзываем загрузчиком и запихиваем ее в датафлэш уже с нулевого адреса.
Все.
andrewlekar
Nov 16 2010, 05:30
В пункте 3 следует читать: 3. После чего грузим в SRAM программку...
radistka
Nov 16 2010, 06:08
ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов
Zelepuk, дергайте же уже ногами =)
AT91C_BASE_PIOA->PIO_PER = (AT91C_PIO_PA28); //PIO Enable Register
AT91C_BASE_PIOA->PIO_PPUDR = (AT91C_PIO_PA28); //Pull-up Disable Register
AT91C_BASE_PIOA->PIO_SODR = (1 << 28); //Set Output Data Register
AT91C_BASE_PIOA->PIO_OER = (AT91C_PIO_PA28); //Output Enable Register
AT91C_BASE_PIOA->PIO_SODR = (1 << 28); // 1
AT91C_BASE_PIOA->PIO_CODR = (1 << 28); // 0
Цитата(DpInRock @ Nov 15 2010, 23:20)

Переписывает вектора прерываний на нужное место (на самом деле проще всего всунуть в стартап команду выборки прямо из AIC адреса - тогда вектора подойдут от отстатков загузчика) .
а не могли бы вы подробнее рассказать про всовывание команды выборки из AIC в стартап? как совать? )
заранее благодарю!
DpInRock
Nov 16 2010, 06:17
Кэт, программка может виснуть по сотне причин.
Тут уже вступает в силу такое правило: посмотрите стартап файл и разберитесь - а за каким чертом он нужен.
ldr PC, [PC,# -0xF20] ;AIC direct
Вот такая строчка должна быть для IRQ вектора. (ОНа может быть и другая, но вот такая - будет работать с SDRAM без дополнительных телодвижений) (Это кстати подробнейшим образом описывается в разделе про аик в даташите.)
(В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах).
Далее.
Для работы просто необходимо сделать общение с компом по 232.
dimka76
Nov 16 2010, 13:57
Цитата(DpInRock @ Nov 16 2010, 09:17)

(В этом случае вы оформляете прерывание как __arm __irq и его адрес пишете напрямую в аик -- Процедура обработки будет вызываться сразу, минуя все промежуточные этапы, которые любят использовать в примерах).
В примерах это делается для организации вложенных прерываний.
Если вложенность не требуется, то тогда как вы говорите реакция на прерывание действительно будет быстрее.
Блин, почему книжки никто не читает. Тревор Мартин не плохо все это описывает.
DpInRock
Nov 16 2010, 14:30
Цитата
В примерах это делается для организации вложенных прерываний
Вовсе нет.
Организация вложенности делается совершенно по-другому.
Хуже того, насколько я помню, в примерах вложенные прерывания нигде не применяются.
Для вложенности требуется во первых разрешать прерывания изнутри обработчика. Это как минимум. (Я не говорю о манипуляциях с аик (просто точно не помню, а лезть неохота).
А для этого применяют волшебное слово __nested
sergeeff
Nov 16 2010, 16:24
Цитата(radistka @ Nov 16 2010, 10:08)

ну черт знает, так и делаю, но когда в SDRAMном проекте есть прерывания, программа зависает. А так - я тоже домозговала до этих 4 пунктов
Надеюсь вы не забыли сделать remap памяти, чтобы ваша sram читалась/писалась с нулевого адреса? А потом уже туда копировать таблицу векторов прерываний.
DpInRock
Nov 16 2010, 22:23
Вообще, лучше проверять местонахождение программы и выполнять или не выполнять ремап.
Ибо при загрузке из флэша ремап выполняется автоматически. А вот при старте кода самбой о ремапе должна думать программа.
sergeeff
Nov 17 2010, 07:15
Цитата(DpInRock @ Nov 17 2010, 02:23)

Ибо при загрузке из флэша ремап выполняется автоматически. А вот при старте кода самбой о ремапе должна думать программа.
При загрузке какой программы? Чего там происходит автоматически?
DpInRock
Nov 17 2010, 11:22
Прочитайте раздел даташита о последовательности действий загрузчика при поиске программ на допустимых носителях.
А чуть ниже будет описана система команд самбы. Там также все однозначно указано.
sergeeff
Nov 17 2010, 14:08
Ну взяла бы уважаемая радистка и сделала в своей программе dump первых 64 байт sram с 0-го адреса. По крайней мере многое прояснится.
Цитата(Zelepuk @ Nov 15 2010, 20:33)

Сложновато-сложновато, всё равно((
Например подёргать ногами на AVR можно просто (напримере IAR)
DDRC = 255;
PORTC = 255;
сколько не искал подобные констркукции для ARM... не нашёл((
Как осуществляется доступ к PA0... PA31, PB0... PB31 и т.д.
(здаётся мне их настроить их на вывод тоже непрсото - одной строчкой необойтись)
P.S. Наверное нужно и впрям запастись мешком семечек и курить даташит....
В общем-то, там ничего сложного нет, просто в АРМе сложней первоначальная настройка, и в неё лучше вникнуть, а не копипастить откуда-то, не очень понимая точный смысл. Я использую AT91SAM9261, никаких трудностей не возникало, за исключением того, что первый раз, инициализируя DBGU, забыл отдать ему соответствующие ноги портов -- естественно, передача данных при этом не работала.
ADD. Ну а если конкретно про дрыганье ногами, то имеется два варианта.
1. Для установки неких разрядов какого-либо порта записываются 1 в соответствующие разряды регистра PIO_SODR этого порта (те разряды, в которые записывается 0, не будут менять своё состояние). Для сброса разрядов производится запись единиц в соответствующие позиции регистра PIO_CODR.
2. Сброс-установка разрядов путём записи необходимых значений в порт PIO_ODSR. Именно этот режим эквивалентен изменению ног в AVRках, но нередко удобнее бывает способ 1: если в какие-то биты порта записывается 0, то соответствующие ноги просто не меняются, поэтому установить или сбросить конкретные ноги проще (не надо предварительно считывать состояние порта и проводить логические операции, чтобы установить-сбросить определённые биты).
Zelepuk
Nov 18 2010, 10:12
Цитата(SII @ Nov 17 2010, 21:18)

В общем-то, там ничего сложного нет, просто в АРМе сложней первоначальная настройка, и в неё лучше вникнуть, а не копипастить откуда-то, не очень понимая точный смысл. Я использую AT91SAM9261, никаких трудностей не возникало, за исключением того, что первый раз, инициализируя DBGU, забыл отдать ему соответствующие ноги портов -- естественно, передача данных при этом не работала.
ADD. Ну а если конкретно про дрыганье ногами, то имеется два варианта.
1. Для установки неких разрядов какого-либо порта записываются 1 в соответствующие разряды регистра PIO_SODR этого порта (те разряды, в которые записывается 0, не будут менять своё состояние). Для сброса разрядов производится запись единиц в соответствующие позиции регистра PIO_CODR.
2. Сброс-установка разрядов путём записи необходимых значений в порт PIO_ODSR. Именно этот режим эквивалентен изменению ног в AVRках, но нередко удобнее бывает способ 1: если в какие-то биты порта записывается 0, то соответствующие ноги просто не меняются, поэтому установить или сбросить конкретные ноги проще (не надо предварительно считывать состояние порта и проводить логические операции, чтобы установить-сбросить определённые биты).
спасибо!
tturist
Nov 19 2010, 14:45
Я тут сильно извиняюсь...
По моему скромному мнению изучение АРМ9 нужно начинать не с вопроса "как ножками потрыгать" а с вопроса "какую операционную систему на этот чип поставить". Тогда не будет лишних вопросов как что грузить и как память инициализировать. Нужно придумать очень экзотическую задачу чтобы имело смысл лудить такую железку без ОС. У меня вот фантазии не хватает. Не надо ничего изобретать и приделывать к велосипеду квадратные колеса.
У вас простая задача - берите 8-ми битную архитектуру.
Что-то посложнее - АРМ7 и можно подумать о какой-нибудь риал-тайм ОС.
А если вам захотелось АРМ9 с ММУ залудить - без операционной системы не обойтись. Он для этого и придуман. Идете на сайт производителя с вопросом "какую ОС вы мне можете предложить для этого железа".
esaulenka
Nov 19 2010, 17:03
tturist, тренируйте фантазию

У нас есть железка с WinCE на ARM9, там загрузчик полностью переписан и обвешан блекджеками и шл... излишествами.
Цель - на производстве (да и у пользователя тоже) убедиться, что всё железо работает нормально.
Ногодрыг там используется вовсю.
Хотя основное применение железки, конечно, другое - крутить задачку под WinCE.
sergeeff
Nov 19 2010, 17:48
Цитата(tturist @ Nov 19 2010, 17:45)

Я тут сильно извиняюсь...
По моему скромному мнению изучение АРМ9 нужно начинать не с вопроса "как ножками потрыгать" а с вопроса "какую операционную систему на этот чип поставить".
Вы в этом вопросе идете на поводу у сторонников теории "главное побыстрее чего-нибудь сляпать, а потом...". Вы, к примеру, не смотрели как в Linux'e через стандартную драйверную обвязку сделано "ногодрыгание"? Вы посмотрите, может свое мнение и несколько поменяете.
DpInRock
Nov 19 2010, 19:35
Цитата
а с вопроса "какую операционную систему на этот чип поставить"
Когда хоть одну железку своими руками (а не руками производителей китов) сделаете, ваше мнение изменится.
TigerSHARC
Nov 20 2010, 11:55
Цитата(tturist @ Nov 19 2010, 17:45)

Я тут сильно извиняюсь...
По моему скромному мнению изучение АРМ9 нужно начинать не с вопроса "как ножками потрыгать" а с вопроса "какую операционную систему на этот чип поставить". Тогда не будет лишних вопросов как что грузить и как память инициализировать. Нужно придумать очень экзотическую задачу чтобы имело смысл лудить такую железку без ОС. У меня вот фантазии не хватает. Не надо ничего изобретать и приделывать к велосипеду квадратные колеса.
У вас простая задача - берите 8-ми битную архитектуру.
Что-то посложнее - АРМ7 и можно подумать о какой-нибудь риал-тайм ОС.
А если вам захотелось АРМ9 с ММУ залудить - без операционной системы не обойтись. Он для этого и придуман. Идете на сайт производителя с вопросом "какую ОС вы мне можете предложить для этого железа".
Линукс реалтаймовский - не проблема?
sergeeff
Nov 20 2010, 13:52
Цитата
А если вам захотелось АРМ9 с ММУ залудить - без операционной системы не обойтись.
Совсем уж неясное утверждение. Что-то такого фантастического нужно для инициализации D- и I- кешей, к примеру, что не катит без ОС?
NIKOLASIUS
Nov 22 2010, 09:07
Доброго времени суток!
Может быть кто-нибудь сталкивался с ECC (Error Corrected Code Controller) в MCU AT91SAM9G45.
Суть проблемы токова: в очищенный блок NAND FLASH пишу одну страницу и содержимое регистров ECC, а вот при чтении получаю мультибитовую ошибку.
radistka
Nov 24 2010, 06:54
Значит так, стала запускаться моя программа с помощью написанного загрузчика.
Беда была вот какая - основная программа была скомпилирована для SDRAM, но чатсь функций была помещена в SRAM, сделано это было помещением конкретной функции в секцию, расположенную в ОЗУ. При прошивке программы непосредственно в SDRAM под IARом все работало корректно, однако при загрузке программы из флэш в SDRAM (с помощью написанного загрузчика) ОЗУшные функции, судя по всему, не помещались в нужные секции. Подскажите, может в IARе где-то чего-то указать дополнительно нужно или еще чего...Или функции в ОЗУ можно поместить только ручками, прописав их в стартапе?
sergeeff
Nov 24 2010, 07:33
Цитата(radistka @ Nov 24 2010, 09:54)

Значит так, стала запускаться моя программа с помощью написанного загрузчика.
Странное дело. Вы ведь сами написали загрузчик из flash в sdram? Что же вы тогда спрашиваете?
radistka
Nov 24 2010, 09:02
спрашиваю, потому что не понимаю, что в него еще нужно приписать. На сегодняшний день загрузчик инициализирует SDRAM, копирует код программы из флеш в SDRAM и переходит на адрес этой программы в SDRAM, но как дело обстоит с функциями основной программы, помещенными в SRAM, не понятно.
sergeeff
Nov 24 2010, 16:47
Цитата(radistka @ Nov 24 2010, 12:02)

спрашиваю, потому что не понимаю, что в него еще нужно приписать. На сегодняшний день загрузчик инициализирует SDRAM, копирует код программы из флеш в SDRAM и переходит на адрес этой программы в SDRAM, но как дело обстоит с функциями основной программы, помещенными в SRAM, не понятно.
Во flash у вас лежит, скорее всего, линейный bin-файл. Вы же должны знать, хотя бы, границы bss сегмента (чтобы его обнулить). Таким же образом, вы, по идее, должны знать границы вашего нестандартного (sram) сегмента, и, соответсвенно ручками скопировать этот сегмент по нужным адресам. Детали всего этого сильно зависят от вашего компилятора/линкера.
DpInRock
Nov 24 2010, 18:27
Все функции __ramfunc перекачиваются в SRAM в процессе инициализации main (это делает за вас компилятор).
Но для этого у вас должно быть верное определение SRAM в линкерном файле.
Если там все нормально, то проверьте, на месте ли находится SRAM.
Т.е. хто делает ремап и делает ли вообще. Сам компилятор этого делать не станет.
sergeeff
Nov 25 2010, 09:55
Цитата(DpInRock @ Nov 24 2010, 21:27)

Все функции __ramfunc перекачиваются в SRAM в процессе инициализации main (это делает за вас компилятор).
В процессе инициализации... Этот момент не поясните ли? До main еще какая-то функция вызывается, или это какая-то функция, первая в main?
Прошу прощения, может вы мне ответите на вопрос, который я задал в теме:
Мигание светодиодом на AT91SAM7S256?
Может нужно как-то настроить IAR, может прога не правильная. Мой микропроцессор
AT91SAM9260 расположен на плате
MMNET1001.
P.S.Если можно в той теме, за ранее спасибо.
toweroff
Nov 30 2010, 10:34
Цитата(sergeeff @ Nov 25 2010, 12:55)

В процессе инициализации... Этот момент не поясните ли? До main еще какая-то функция вызывается, или это какая-то функция, первая в main?
поищите __main
radistka
Dec 1 2010, 06:24
sergeeff, попробовала копировать свой нестандартный sram сегмент по нужным адресам при работе из flash - не завелось ((
DpInRock, что с ремапом, что без него...а он работает с 0 адреса? то есть на sram, расположенную с 0x30000 не должен влиять?
я вот посмотрела проекты, сделанные под sam-ba , так там в *.lds файлах указываются _efixed, _sprerelocate, _eprerelocate и _spostrelocate, _epostrelocate, а потом в board_cstartup.c в resetHandler эти сегменты инициализируются, а в IAR'овских проектах этот механизм в каком месте осуществляется? сегменты описываются в *.icf, но в каком месте IAR их инициализирует и цепляет?
Цитата(radistka @ Dec 1 2010, 09:24)

я вот посмотрела проекты, сделанные под sam-ba , так там в *.lds файлах указываются _efixed, _sprerelocate, _eprerelocate и _spostrelocate, _epostrelocate, а потом в board_cstartup.c в resetHandler эти сегменты инициализируются, а в IAR'овских проектах этот механизм в каком месте осуществляется? сегменты описываются в *.icf, но в каком месте IAR их инициализирует и цепляет?
Вы хотели сказать, что посмотрели проекты сделанные под gcc (а не под sam-ba)...
Сдаётся мне, что в IAR для этого надо поставить "__ramfunc" перед функцией
и возможно добавить в .icf "initialize by copy { rw, section MYCODE };" (а возможно и не надо если устроит, что функции лягут в дефолтную секцию.)
Правда поймёт ли IAR, что от него требуют чтобы он разместил часть функций (с "__ramfunc") в SRAM, при условии что остальной проект находится в SDRAM - это уже вопрос к Гуру.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.