реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Startup file для LPC2300/LPC2400
zltigo
сообщение Sep 6 2007, 12:53
Сообщение #16


Гуру
******

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



Цитата(серый волк @ Sep 6 2007, 15:36) *
Дискуссия очень...

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Sep 6 2007, 13:06
Сообщение #17


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(серый волк @ Sep 6 2007, 12:08) *
да но где они инициализируются адресом?
И смысл их написания в примере ?

спасибо

Бывает, что дискуссия интереснее.
По Вашему вопросу: Opttions->Linker->Config, затем галка Override Default, кнопочка Edit и страничка Stack/Heap Sizes
Heap - это куча для динамического использования памяти.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 6 2007, 13:26
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
серый волк
сообщение Sep 6 2007, 13:33
Сообщение #19


Участник
*

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



ответ оказался очень прост:
метка является символьным именем для определённого адреса в секции и
использование двоеточия опционально.

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

Всем спасибо

to С.Б. именно так я в конце концов и понял,помогло описание ас-ра для 166/167 проца. Большое спасибо.

Сообщение отредактировал серый волк - Sep 6 2007, 13:41
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 6 2007, 13:53
Сообщение #20


Гуру
******

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



Цитата(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 ,хотя есть и особо ленивые.
Глоссарий.ру, википедия, весь гугль в вашем распоряжении, раз вы не изучали этого по учебникам информатики.

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
bodja74
сообщение Sep 6 2007, 18:03
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата
Если ваше знакомство ограничено 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
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 10:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016