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

 
 
> программа на ассемблере
dimka76
сообщение Jun 4 2008, 11:23
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Добрового времени суток :-)

Хочу написать на ассемблере программку и что-бы она размещалась во внутренней SRAM.
Достаточно ли для этого в начале программы прописать .ORG <адресс SRAM> (естественно после всего того что нужно прописать в стартапе) ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dimka76
сообщение Jun 4 2008, 12:22
Сообщение #2


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



а разве на Си не достаточно перед именем функции написать __famfunc ?
Директива .ORG как раз и говорит линкеру куда размещать следующий за ней код или я не прав?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 5 2008, 10:13
Сообщение #3


Гуру
******

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



Цитата(dimka76 @ Jun 4 2008, 15:22) *
а разве на Си не достаточно перед именем функции написать __famfunc ?
Директива .ORG как раз и говорит линкеру куда размещать следующий за ней код или я не прав?
Рассуждать бессмысленно не зная ни типа процессора ни используемого компилятора/ассемблера/линкера. Обычно директива .ORG задает смещение в текущей секции (а не абсолютный адрес). Адреса начала секций указываются линкеру в его скрипте. __ramfunc, если речь идет об IAR для ARM, указывает линковать код в секцию CODE_I. Скрипт линкера заставляет размещать содержимое секции CODE_I в секцию CODE_ID. Копирование из CODE_ID в CODE_I производит startup-код.

Давайте вы для начала признаетесь, о каком компиляторе/ассемблере идет речь и для какого процессора, а еще уточните, как ваша ассемблерная программа будет попадать в ОЗУ.


--------------------
На любой вопрос даю любой ответ
"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
dimka76
сообщение Jun 5 2008, 12:58
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Сергей Борщ @ Jun 5 2008, 13:13) *
Давайте вы для начала признаетесь, о каком компиляторе/ассемблере идет речь и для какого процессора, а еще уточните, как ваша ассемблерная программа будет попадать в ОЗУ.


компилятор IAR C/C++ Compiler for ARM 4.41A Kickstart (4.41.1.301)

процессор LPC2103

При функции написании на Си с указанием __ramfunc функция размещается в ОЗУ, а попадает туда при вкл. питания автоматически копируясь из FLASH. По крайней мере я так понял разбираясь с этим типом контроллеров. Кстати, если писать такие фукции на Си( __ramfunc) -> зашиваю контроллер -> работает (дергает ножкой) -> выключаю питание -> включаю питание -> опять работает -> значит образ функции исполняемой из ОЗУ изначально хранится во FLASH и копируется в ОЗУ при вкл. питания.

Вот я хочу получить такую же функцию на ассемблере, используя IAR.

По поводу директивы .ORG - она задает абсолютный адрес, проверено на практике. И директивы ассемблера, как правило, одинаковы для всех ассемблеров и контроллеров/процессоров. Вот.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:48
Рейтинг@Mail.ru


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