|
Startup file для LPC2300/LPC2400 |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Sep 5 2007, 05:42
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(серый волк @ Sep 4 2007, 18:54)  Скажите пож-та,
существует ли какое-нибудь описание этого файла с более подробными объяснениями чем комментарии , имеющимися в самом файле.
Спасибо Ну вроде и так все понятно. Иницмализация МАМ (для LPC); инициализация вершин стека для всех режимов ARM; инициализация сопроцессора, если он есть; можно чего-нибудь добавить свое, если приспичит; переход на main. Пройдите по шагам и все станет ясно. Главное, для Linker указать корректную информацию. Обратите внимание, как можно все поместить в RAM, чтобы не уменьшать ресурсы перепрограммирования Flash.
|
|
|
|
|
Sep 5 2007, 18:11
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(bodja74 @ Sep 5 2007, 19:24)  Все это или диррективы компиллятору Компиляторы к асемблерному тексту никак не относятся и уж, как минимум, по этой причине ничего не требуют. Цитата собственно к самому асму это отношение имеет слабое Отнюдь.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 5 2007, 19:02
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(zltigo @ Sep 5 2007, 21:11)  Компиляторы к асемблерному тексту никак не относятся и уж, как минимум, по этой причине ничего не требуют. Здрасте ,а это как по вашему что,к примеру в том же стартапе. Код $IF (EXTMEM_MODE) LDR R0, =PINSEL2 LDR R1, =PINSEL2_Val STR R1, [R0] $ENDIF И как можно никак не относиться,не компиллировать код стартапа? Цитата Отнюдь. Согласен,я имел ввиду ,что нужно для себя разделять собственно команды асма и директивы.
|
|
|
|
|
Sep 6 2007, 04:47
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(bodja74 @ Sep 5 2007, 22:02)  Здрасте ,а это как по вашему что,к примеру в том же стартапе. Вы свалили в кучу Ассемблер, Компилятор и Препроцессор. Ассемблер - это название программы, которая переводит исходный текст, написанный на языке ассемблера, т.е. на его языке в объектный код. Перед ассемблированием исходник проходит через препроцессор, который обрабатывает всякие $IF. А компилятор переводит в объектный код (реже в ассемблерный исходник) исходный текст с языка высокого уровня, коим язык ассемблера не является. Перед компилированием исходный текст также проходит через (возможно другой) препроцессор. Для краткости язык ассемблера называют ассемблером, как и программу. P.S. после поста alexander55 поправлю - "Вы свалили в кучу понятия Ассемблера, Компилятора и Препроцессора, на что и указал (в своеобразной форме) zltigo" А __heap_base, __heap_limit очень похожи на простые метки, которые скорее всего можно использовать в других файлах для получения адреса начала и конца кучи. То же и StackTop
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 6 2007, 07:30
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(Сергей Борщ @ Sep 6 2007, 07:47)  Вы свалили в кучу Ассемблер, Компилятор и Препроцессор. Я неплохо знаю что такое Ассемблер, Компилятор и Препроцессор.Если вы считаете ,что я запутался и свалил все в кучу.Ответте тогда мне на тот же вопрос ,что в этих строчках относиться к Ассемблеру, Компилятору и Препроцессору.  Возможно я для себя узнаю что то новое.  Код $IF (EXTMEM_MODE) LDR R0, =PINSEL2 LDR R1, =PINSEL2_Val STR R1, [R0] $ENDIF Цитата Ассемблер - это название программы, которая переводит исходный текст, написанный на языке ассемблера, т.е. на его языке в объектный код. Начнем с того ,что Ассемблер- это язык программиирования,такой же язык как Си,Бейсик,Паскаль. Если ктото написал программу и назвал ее Ассемблером - это уже его проблемы.Кстати я ни разу не видел обьектного кода Ассемблера - там нечему "обьектиться"  ,на Си ,Бейсике - видел. Цитата Перед ассемблированием исходник проходит через препроцессор, который обрабатывает всякие $IF. А компилятор переводит в объектный код (реже в ассемблерный исходник) исходный текст с языка высокого уровня, коим язык ассемблера не является. Эсли это называется ассемблированием - пускай будет,это делается с языками высокого уровня ,хорошо. Цитата Перед компилированием исходный текст также проходит через (возможно другой) препроцессор. Вот,высокий язык переводиться в асм или обьектный код и тогда ,за работу берется компиллятор(или его вторая половина  ) Теперь то,что я хотел донести. С учетом того ,что стартап уже написан на асме - асемблировать там нечего, Вы совершенно верно заметили "про возможно другой" препроцессор  ,и если еще раскажете что в стартапе делает препроцессор ,а что делают директивы компиллятору,я думаю всем полезно будет почитать. Цитата Для краткости язык ассемблера называют ассемблером, как и программу. Язык да, а вот программу называют - программа НА асме или исходники На асме,как правило  ,хотя есть и особо ленивые.
|
|
|
|
|
Sep 6 2007, 08:08
|

Участник

Группа: Новичок
Сообщений: 32
Регистрация: 29-08-07
Пользователь №: 30 125

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

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(bodja74 @ Sep 6 2007, 10:30)  Теперь то,что я хотел донести. Спасибо  "перлов" донесенных ранее, уже вполне достаточно  . Я конечно, понимаю, что таково Ваше видение мира (типа Земля плоская и покоится на трех китах), но на самом деле Авторы инструментов обустрили мир программированя иначе. Причем в отличие от неведомого Создателя свои мысли и поступки документировали. Цитата Кстати я ни разу не видел обьектного кода Ассемблера - там нечему "обьектиться" Ну а с этоим могу помочь, этого у нас завались - не жалко. Cмотрите в приложении.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2007, 12:53
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(серый волк @ Sep 6 2007, 15:36)  Дискуссия очень... Конкретные ответы найдете в описании конкретного Асемблера, но естественно, если хоть чуть-чуть ознакомитесь с архитектурой контроллера. На Ваши вопросы давать ответы и очень просто и очень сложно. Просто - потому, что они простые. Сложно - потому, что они, совершенно очевидно, преставляют только вершину айсберга незнания  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 6 2007, 13:06
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

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

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(серый волк @ 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, остальные метки тоже для чего-нибудь нужны, хотя бы чтобы отметить эти места в дизассемблерном листниге отладчика.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 6 2007, 13:33
|

Участник

Группа: Новичок
Сообщений: 32
Регистрация: 29-08-07
Пользователь №: 30 125

|
ответ оказался очень прост: метка является символьным именем для определённого адреса в секции и использование двоеточия опционально. Да придется асемб. матчасть после многих лет заново изучать. Век живи век учись.  Всем спасибо to С.Б. именно так я в конце концов и понял,помогло описание ас-ра для 166/167 проца. Большое спасибо.
Сообщение отредактировал серый волк - Sep 6 2007, 13:41
|
|
|
|
|
Sep 6 2007, 13:53
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(bodja74 @ Sep 6 2007, 10:30)  Я неплохо знаю что такое Ассемблер, Компилятор и Препроцессор. Вы можете обижаться, но пока вы демонстрируете обратное. Освежите знания хотя бы с помощью гугля. Попробуйте реабилитироваться - какая из упомянутых вами программ (или часть, если они объединены) удаляет комментарии из исходного текста? Цитата(bodja74 @ Sep 6 2007, 10:30)  Ответте тогда мне на тот же вопрос ,что в этих строчках относиться к Ассемблеру, Компилятору и Препроцессору.  Возможно я для себя узнаю что то новое.  Код $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)  Кстати я ни разу не видел обьектного кода Ассемблера - там нечему "обьектиться"  ,на Си ,Бейсике - видел. Если ваше знакомство ограничено CodeVision и avrasm2 - то неудивительно. А в нормальных ассемблерах, поддерживающих раздельную компиляцию - это необходимая вещь. Смотрите пример zltigo. Ошибочность остальных ваших рассуждений смотрите, например, здесь: язык ассемблера. Глоссарий.ру Если лень сходить по ссылке, то вот: Цитата Ассемблер От англ.Assemble - собирать Ассемблер - транслятор с языка ассемблера в машинные команды. Заметьте, не компилятор, а транслятор. Поищите там же различие этих двух терминов. Цитата(bodja74 @ Sep 6 2007, 10:30)  Вы совершенно верно заметили "про возможно другой" препроцессор  Спасибо, что поддержали. Только вы опять неправильно поняли - например в gcc можно пропустить ассемблерный исходный текст через С/С++ препроцессор, и, соответственно, использовать в исходнике на языке ассемблера директивы С/С++ препроцессора (для этого файл должен иметь расширение не .s а .S). Цитата(bodja74 @ Sep 6 2007, 10:30)  Язык да, а вот программу называют - программа НА асме или исходники На асме,как правило  ,хотя есть и особо ленивые. Глоссарий.ру, википедия, весь гугль в вашем распоряжении, раз вы не изучали этого по учебникам информатики. Что удивляет - несложно же воспользоваться поиском в интернете, так нет же - с упорством пьяного...
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 6 2007, 18:03
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата Если ваше знакомство ограничено CodeVision и avrasm2 - то неудивительно. А в нормальных ассемблерах, поддерживающих раздельную компиляцию - это необходимая вещь. Смотрите пример zltigo. Ошибочность остальных ваших рассуждений смотрите, например, здесь: язык ассемблера. Глоссарий.ру Если лень сходить по ссылке, то вот: Не поленился ,сходил,теперь,Вы внимательно прочитайте ,что там написано вверху крупным жирным синим шрифтом и тогда поймете к каким словам идет коментарий снизу. avrasm2- поддерживает обьектный код ,за это да,страшно извиняюсь, совершенно забыл ,так как никогда им не пользовался. Теперь сходите вот по этой ссылке http://online.multilex.ru/dictionaries/art...rword/assemblerИ тогда Вы поймете ,что значения одних и тех же терминов могут быть разными. Цитата Ассемблер От англ.Assemble - собирать Ассемблер - транслятор с языка ассемблера в машинные команды. Заметьте, не компилятор, а транслятор. Поищите там же различие этих двух терминов. Не приписывайте мне то ,что я не говорил  Я говорил - что это язык программирования. Кстати чуть ниже есть определение асемблирования - напомнить что вы про него говорили ?  Цитата Спасибо, что поддержали. Только вы опять неправильно поняли - например в gcc можно пропустить ассемблерный исходный текст через С/С++ препроцессор, и, соответственно, использовать в исходнике на языке ассемблера директивы С/С++ препроцессора (для этого файл должен иметь расширение не .s а .S). У асемблера-компилятора-транслятора короче в avrasm2.exe и avrasm32.exe тоже есть такие директивы  типа $IF ,и он может их обработать и своим препроцессором. Цитата Что удивляет - несложно же воспользоваться поиском в интернете, так нет же - с упорством пьяного... Несложно остаться каждому при своих терминах ,и не придираться к словам ,и несложно ради одного термина раздуть целую дискуссию,который в принципе может быть по разному определяться. Сложно тратить на это все время
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|