Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR ARM Assembler.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
misyachniy
Нужно "приклеить" заплатку на ассемблере.
По старинке решил объявить сегмент данных и вставить директиву типа
Код
.ORG 16334
  DCD  tasc_Status


Но на сколько я понял, IAR ARM Assembler поддерживает только директивы резервирования байт, полуслов, слов, строк.

Для размещения байт во флеш есть директива "LTORG" но она дает указание
ассемблеру разместить константы с текущего значения счетчика программ.

Есть ли директива принудительно указать ассемблеру переменную в конкретном месте ОЗУ?
KRS
ассемблер вообще не знает где озу где пзу...
ORG лучше вообще не использовать.
Надо размещать переменные в нужных секциях,а где какая секция указывать линкеру!
misyachniy
Цитата(KRS @ Mar 13 2016, 21:43) *
ассемблер вообще не знает где озу где пзу...
ORG лучше вообще не использовать.
Надо размещать переменные в нужных секциях,а где какая секция указывать линкеру!


Директивы ORG в IAR ARM assembler нет.
Утверждение о том, что ассемблер и не знает где озу где пзу сомнительно.
AVR ассемблер понимает DSEG, CSEG, ESEG

http://www.atmel.com/webdoc/avrassembler/a..._directives.ORG

Код
.DSEG; Start data segment
.ORG 0x120; Set SRAM address to hex 120
variable: .BYTE 1; Reserve a byte at SRAM adr. 0x120

.CSEG
.ORG 0x10; Set Program Counter to hex 10
mov r0,r1; Do something

KRS
Цитата(misyachniy @ Mar 14 2016, 19:26) *
AVR ассемблер понимает DSEG, CSEG, ESEG

Во 1ых
вопрос про ARM, причем тут AVR - у AVR другая архитектура адресации...
Во 2ых
Вопрос про IARовский ассемблер - он для AVR кстати не понимает DSEG, CSEG, ESEG
там все раньше шло через RSEG а теперь как и в АРМ через SECTION
misyachniy
Цитата(KRS @ Mar 14 2016, 21:08) *
Во 1ых
вопрос про ARM, причем тут AVR - у AVR другая архитектура адресации...
Во 2ых
Вопрос про IARовский ассемблер - он для AVR кстати не понимает DSEG, CSEG, ESEG
там все раньше шло через RSEG а теперь как и в АРМ через SECTION


В ответе было "ассемблер вообще не знает где озу где пзу...".
Как на мое мнение, слишком категоричное утверждение.

К тому же если директиву LTORG Объявить в ОЗУ, то ассемблер должен как то догадаться об этом и произвести инициализацию данных?
__ramfunc по моему еще не упразднили?
KRS
Цитата(misyachniy @ Mar 15 2016, 19:55) *
К тому же если директиву LTORG Объявить в ОЗУ, то ассемблер должен как то догадаться об этом и произвести инициализацию данных?
__ramfunc по моему еще не упразднили?

если брать микроконтроллеры то из флеши в озу __ramfunc копирует код инициализации в библиотеке или Ваш собственный.

LTORG - это вообще вспомогательная директива, она в 99% случаях не нужна.

Кроме того если секция кода во флеше - то Вы не сможете к ней сделать LTORG в ОЗУ - слишком большое расстояние wink.gif

Да и потом, раз вы знаете про __ramfunc посмотрите листинг от компилятора или даже лучше asm файл и linker map файл там и секции будут и что куда покладено...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.