Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Startup file для LPC2300/LPC2400
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
серый волк
Скажите пож-та,

существует ли какое-нибудь описание этого файла с более подробными объяснениями
чем комментарии , имеющимися в самом файле.

Спасибо
alexander55
Цитата(серый волк @ Sep 4 2007, 18:54) *
Скажите пож-та,

существует ли какое-нибудь описание этого файла с более подробными объяснениями
чем комментарии , имеющимися в самом файле.

Спасибо

Ну вроде и так все понятно.
Иницмализация МАМ (для LPC);
инициализация вершин стека для всех режимов ARM;
инициализация сопроцессора, если он есть;
можно чего-нибудь добавить свое, если приспичит;
переход на main.
Пройдите по шагам и все станет ясно. Главное, для Linker указать корректную информацию. Обратите внимание, как можно все поместить в RAM, чтобы не уменьшать ресурсы перепрограммирования Flash.
серый волк
спасибо



только тогда посоветуйте где взять информацию по описанию
ассемблерных вставок типа:
AREA HEAP, NOINIT, READWRITE, ALIGN=3

короче по синтаксису , используемому в этом файле
zltigo
Цитата(серый волк @ Sep 5 2007, 11:26) *
короче по синтаксису , используемому в этом файле

Как ни удивительно в описании Assembler smile.gif ибо все это совершенно обычный ASM исходник.
серый волк
извините конечно,

но может кто посоветовать конкретный файл, который
я могу считать и получить необходимую мне информацию?

спасибо
серый волк
Тема со Startup на ARMe для меня новая, прошу извинить за
такие вопросы....

например из док-ии по асму и компилятору не ясно:
1.что представляет запись Stack_Top(можно конечно догадываться, но точного описания я не нашел)
2.Тоже самое смысл записей в коде __heap_base и __heap_limit . Что это такое в описании правда имеется.

Спасибо


AREA STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size

Stack_Top


;// <h> Heap Configuration
;// <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF>
;// </h>

Heap_Size EQU 0x00000000

AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
bodja74
Все это или диррективы компиллятору или константы которыми оперируют эти же диррективы,но разве что только Stack_Top: - это метка (если двоетчие стоит) ,собственно к самому асму это отношение имеет слабое ,такие конструкции делаются в основном для некой автоматизации настроек (тоесть при тех или иных условиях ,добавить\убрать команды или изменить константы) тоесть типа для Визарда.
Лучше с этим не заморачиваться ,так как все уже "заточено" под готовый визард.
Максимум что править нужно,так это вектора,остальное в настройках визарда можно сделать.
zltigo
Цитата(bodja74 @ Sep 5 2007, 19:24) *
Все это или диррективы компиллятору

Компиляторы к асемблерному тексту никак не относятся и уж, как минимум, по этой причине ничего не требуют.
Цитата
собственно к самому асму это отношение имеет слабое

Отнюдь.
bodja74
Цитата(zltigo @ Sep 5 2007, 21:11) *
Компиляторы к асемблерному тексту никак не относятся и уж, как минимум, по этой причине ничего не требуют.

Здрасте ,а это как по вашему что,к примеру в том же стартапе.
Код
$IF (EXTMEM_MODE)
                LDR     R0, =PINSEL2
                LDR     R1, =PINSEL2_Val
                STR     R1, [R0]
$ENDIF


И как можно никак не относиться,не компиллировать код стартапа?
Цитата
Отнюдь.


Согласен,я имел ввиду ,что нужно для себя разделять собственно команды асма и директивы.
Сергей Борщ
Цитата(bodja74 @ Sep 5 2007, 22:02) *
Здрасте ,а это как по вашему что,к примеру в том же стартапе.
Вы свалили в кучу Ассемблер, Компилятор и Препроцессор. Ассемблер - это название программы, которая переводит исходный текст, написанный на языке ассемблера, т.е. на его языке в объектный код. Перед ассемблированием исходник проходит через препроцессор, который обрабатывает всякие $IF. А компилятор переводит в объектный код (реже в ассемблерный исходник) исходный текст с языка высокого уровня, коим язык ассемблера не является. Перед компилированием исходный текст также проходит через (возможно другой) препроцессор. Для краткости язык ассемблера называют ассемблером, как и программу.

P.S. после поста alexander55 поправлю - "Вы свалили в кучу понятия Ассемблера, Компилятора и Препроцессора, на что и указал (в своеобразной форме) zltigo"

А __heap_base, __heap_limit очень похожи на простые метки, которые скорее всего можно использовать в других файлах для получения адреса начала и конца кучи. То же и StackTop
alexander55
Цитата(Сергей Борщ @ Sep 6 2007, 08:47) *
Вы свалили в кучу Ассемблер

Согласен. Пусть кто-нибудь откроет тему типа Ассемблер ARM (топик в идеале должен быть типа FAQ по теме).
bodja74
Цитата(Сергей Борщ @ Sep 6 2007, 07:47) *
Вы свалили в кучу Ассемблер, Компилятор и Препроцессор.

Я неплохо знаю что такое Ассемблер, Компилятор и Препроцессор.Если вы считаете ,что я запутался и свалил все в кучу.Ответте тогда мне на тот же вопрос ,что в этих строчках относиться к Ассемблеру, Компилятору и Препроцессору.smile.gif Возможно я для себя узнаю что то новое.smile.gif
Код
$IF (EXTMEM_MODE)
                LDR     R0, =PINSEL2
                LDR     R1, =PINSEL2_Val
                STR     R1, [R0]
$ENDIF


Цитата
Ассемблер - это название программы, которая переводит исходный текст, написанный на языке ассемблера, т.е. на его языке в объектный код.

Начнем с того ,что Ассемблер- это язык программиирования,такой же язык как Си,Бейсик,Паскаль.
Если ктото написал программу и назвал ее Ассемблером - это уже его проблемы.Кстати я ни разу не видел обьектного кода Ассемблера - там нечему "обьектиться" smile.gif ,на Си ,Бейсике - видел.
Цитата
Перед ассемблированием исходник проходит через препроцессор, который обрабатывает всякие $IF. А компилятор переводит в объектный код (реже в ассемблерный исходник) исходный текст с языка высокого уровня, коим язык ассемблера не является.

Эсли это называется ассемблированием - пускай будет,это делается с языками высокого уровня ,хорошо.

Цитата
Перед компилированием исходный текст также проходит через (возможно другой) препроцессор.

Вот,высокий язык переводиться в асм или обьектный код и тогда ,за работу берется компиллятор(или его вторая половина smile.gif )

Теперь то,что я хотел донести.
С учетом того ,что стартап уже написан на асме - асемблировать там нечего, Вы совершенно верно заметили
"про возможно другой" препроцессор smile.gif,и если еще раскажете что в стартапе делает препроцессор ,а что делают директивы компиллятору,я думаю всем полезно будет почитать.
Цитата
Для краткости язык ассемблера называют ассемблером, как и программу.

Язык да, а вот программу называют - программа НА асме или исходники На асме,как правило smile.gif ,хотя есть и особо ленивые.
серый волк
Цитата(Сергей Борщ @ Sep 6 2007, 08:47) *
А __heap_base, __heap_limit очень похожи на простые метки, которые скорее всего можно использовать в других файлах для получения адреса начала и конца кучи. То же и StackTop



да но где они инициализируются адресом?
И смысл их написания в примере ?

спасибо
zltigo
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Теперь то,что я хотел донести.

Спасибо smile.gif "перлов" донесенных ранее, уже вполне достаточно sad.gif. Я конечно, понимаю, что таково Ваше видение мира (типа Земля плоская и покоится на трех китах), но на самом деле Авторы инструментов обустрили мир программированя иначе. Причем в отличие от неведомого Создателя свои мысли и поступки документировали.
Цитата
Кстати я ни разу не видел обьектного кода Ассемблера - там нечему "обьектиться"

Ну а с этоим могу помочь, этого у нас завались - не жалко. Cмотрите в приложении.
серый волк
Дискуссия очень быстро как я понял ушла от конкретного вопроса ,поставленного в теме.
Ну ладно...и на том спасибо sad.gif
zltigo
Цитата(серый волк @ Sep 6 2007, 15:36) *
Дискуссия очень...

Конкретные ответы найдете в описании конкретного Асемблера, но естественно, если хоть чуть-чуть ознакомитесь с архитектурой контроллера. На Ваши вопросы давать ответы и очень просто и очень сложно. Просто - потому, что они простые. Сложно - потому, что они, совершенно очевидно, преставляют только вершину айсберга незнания sad.gif.
alexander55
Цитата(серый волк @ Sep 6 2007, 12:08) *
да но где они инициализируются адресом?
И смысл их написания в примере ?

спасибо

Бывает, что дискуссия интереснее.
По Вашему вопросу: Opttions->Linker->Config, затем галка Override Default, кнопочка Edit и страничка Stack/Heap Sizes
Heap - это куча для динамического использования памяти.
Сергей Борщ
Цитата(серый волк @ Sep 6 2007, 11:08) *
да но где они инициализируются адресом?
Попробую объяснить как я бы это интуитивно понял (документацию на эту версию еще не читал, если ошибусь - пусть кто-нибудь поправит):

Как ассемблируется программа. Когда ассемблер встречает директиву начала сегмента, он устанавливает счетчик адреса в ноль и с этого места начинает размещать команды (загляните в любой листинг), присваивая им относительные адреса относительно начала этого кусочка сегмента:
Код
   RSEG CODE
Start
0000     MOV a, b
0001     MOV c, b
Label1
0002     JMP  label
0003     DB "Tipa stroka v oblasti koda"
001E     ....... и т.д.
В конкретном случае он адрес нарасчивает не на 1, а на размер команды, но это уже детали. В процессе линковки все участки сегмента с таким имененм собираются вместе и линкер, размещая их согласно заданной ему карте размещения сегментов присваивает этим относительным адресам физические. Допустим, метка Start попала на абсолютный адрес 100. Вас ведь не удивит, что метка Label1 будет иметь абсолютный адрес 103?

Точно также можно размещать данные в памяти данных. И точно также там можно определять метки, которым при линковке будут присвоены абсолютные адреса. Поэтому я предполагаю, что ваш код можно читать так:
Код
AREA STACK, NOINIT, READWRITE, ALIGN=3; // Отсюда начинается часть сегмента STACK, неинициализированная (т.е. не генерить код для этой области в прошивке?), возможны обращения на чтение и запись, при линковке начало этой части сегмента его начало выровнять на 2^3 = 8 байт

Stack_Mem SPACE USR_Stack_Size;Метка Stack_Mem будет иметь адрес этого места после линковки, зарезервировать USR_Stack_Size байт
__initial_sp SPACE ISR_Stack_Size; Метка __initial_sp будет иметь адрес этого места после линковки, зарезервировать ISR_Stack_Size байт

Stack_Top; А метка Stack_Top будет иметь адрес этого места, т.е. конца зарезервированной под стеки области.
Цитата
И смысл их написания в примере ?
Ну, во-первых показать как писать ассемблерные исходники. Во-ворых, наверное в начале программы в указатель стека заносится адрес __initial_sp, остальные метки тоже для чего-нибудь нужны, хотя бы чтобы отметить эти места в дизассемблерном листниге отладчика.
серый волк
ответ оказался очень прост:
метка является символьным именем для определённого адреса в секции и
использование двоеточия опционально.

Да придется асемб. матчасть после многих лет заново изучать.
Век живи век учись. wacko.gif

Всем спасибо

to С.Б. именно так я в конце концов и понял,помогло описание ас-ра для 166/167 проца. Большое спасибо.
Сергей Борщ
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Я неплохо знаю что такое Ассемблер, Компилятор и Препроцессор.
Вы можете обижаться, но пока вы демонстрируете обратное. Освежите знания хотя бы с помощью гугля. Попробуйте реабилитироваться - какая из упомянутых вами программ (или часть, если они объединены) удаляет комментарии из исходного текста?
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Ответте тогда мне на тот же вопрос ,что в этих строчках относиться к Ассемблеру, Компилятору и Препроцессору.smile.gif Возможно я для себя узнаю что то новое.smile.gif
Код
$IF (EXTMEM_MODE)
                LDR     R0, =PINSEL2
                LDR     R1, =PINSEL2_Val
                STR     R1, [R0]
$ENDIF
Коспектируйте: $IF (), $ENDIF - директивы препроцессора, указывают что в зависимости от значения EXTMEM_MODE (ноль/не ноль) находящиеся между ними строчки должны быть удалены из текста, передаваемого ассемблеру. LDR, STR - команды ассемблера.
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Начнем с того ,что Ассемблер- это язык программиирования,такой же язык как Си,Бейсик,Паскаль.
Еще раз повторяю - не знаете терминологии. Язык называется языком ассемблера.
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Если ктото написал программу и назвал ее Ассемблером - это уже его проблемы.
Вы работаете с AVR? Как называется программа avrasm2.exe? Вы работали с WinAVR? Как казывается программа avr-as.exe?
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Кстати я ни разу не видел обьектного кода Ассемблера - там нечему "обьектиться" smile.gif ,на Си ,Бейсике - видел.
Если ваше знакомство ограничено CodeVision и avrasm2 - то неудивительно. А в нормальных ассемблерах, поддерживающих раздельную компиляцию - это необходимая вещь. Смотрите пример zltigo.
Ошибочность остальных ваших рассуждений смотрите, например, здесь: язык ассемблера. Глоссарий.ру Если лень сходить по ссылке, то вот:
Цитата
Ассемблер
От англ.Assemble - собирать
Ассемблер - транслятор с языка ассемблера в машинные команды.
Заметьте, не компилятор, а транслятор. Поищите там же различие этих двух терминов.
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Вы совершенно верно заметили "про возможно другой" препроцессор smile.gif
Спасибо, что поддержали. Только вы опять неправильно поняли - например в gcc можно пропустить ассемблерный исходный текст через С/С++ препроцессор, и, соответственно, использовать в исходнике на языке ассемблера директивы С/С++ препроцессора (для этого файл должен иметь расширение не .s а .S).
Цитата(bodja74 @ Sep 6 2007, 10:30) *
Язык да, а вот программу называют - программа НА асме или исходники На асме,как правило smile.gif ,хотя есть и особо ленивые.
Глоссарий.ру, википедия, весь гугль в вашем распоряжении, раз вы не изучали этого по учебникам информатики.

Что удивляет - несложно же воспользоваться поиском в интернете, так нет же - с упорством пьяного...
bodja74
Цитата
Если ваше знакомство ограничено CodeVision и avrasm2 - то неудивительно. А в нормальных ассемблерах, поддерживающих раздельную компиляцию - это необходимая вещь. Смотрите пример zltigo.
Ошибочность остальных ваших рассуждений смотрите, например, здесь: язык ассемблера. Глоссарий.ру Если лень сходить по ссылке, то вот:


Не поленился ,сходил,теперь,Вы внимательно прочитайте ,что там написано вверху крупным жирным синим шрифтом и тогда поймете к каким словам идет коментарий снизу.

avrasm2- поддерживает обьектный код ,за это да,страшно извиняюсь, совершенно забыл ,так как никогда им не пользовался.

Теперь сходите вот по этой ссылке smile.gif
http://online.multilex.ru/dictionaries/art...rword/assembler

И тогда Вы поймете ,что значения одних и тех же терминов могут быть разными.

Цитата
Ассемблер
От англ.Assemble - собирать
Ассемблер - транслятор с языка ассемблера в машинные команды.
Заметьте, не компилятор, а транслятор. Поищите там же различие этих двух терминов.

Не приписывайте мне то ,что я не говорил smile.gif
Я говорил - что это язык программирования.

Кстати чуть ниже есть определение асемблирования - напомнить что вы про него говорили ?smile.gif

Цитата
Спасибо, что поддержали. Только вы опять неправильно поняли - например в gcc можно пропустить ассемблерный исходный текст через С/С++ препроцессор, и, соответственно, использовать в исходнике на языке ассемблера директивы С/С++ препроцессора (для этого файл должен иметь расширение не .s а .S).

У асемблера-компилятора-транслятора короче в avrasm2.exe и avrasm32.exe тоже есть такие директивы smile.gif типа $IF ,и он может их обработать и своим препроцессором.

Цитата
Что удивляет - несложно же воспользоваться поиском в интернете, так нет же - с упорством пьяного...

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