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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Загрузить константу в регистр
Rst7
сообщение Jul 10 2009, 07:25
Сообщение #16


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
В документации написано следующее:
...


Тут написано, что значение R15 "опережает" текущий адрес команды на 8 (или на 12). А цитату о невозможности write-back'а в R15 я привел выше.

Цитата
Значит как-то можно


Нельзя

Цитата
Что адреса всех переменных должны храниться в памяти команд?


Да. Именно так. Вот, например, обратите внимание на обращение к статическим переменным
CODE

\ In segment CODE, align 4, keep-with-next
336 void start_vibra(void)
337 {
\ start_vibra:
\ 00000000 10402DE9 PUSH {R4,LR}
338 extern const int VIBR_TYPE;
339 void stop_vibra(void);
340 if((Is_Vibra_Enabled)&&(!IsCalling()))
\ 00000004 ........ LDR R4,??DataTable29 ;; S_ICONS
\ 00000008 A40094E5 LDR R0,[R4, #+164]
\ 0000000C 000050E3 CMP R0,#+0
\ 00000010 1080BD08 POPEQ {R4,PC}
\ 00000014 6E0000EF SWI +110
\ 00000018 000050E3 CMP R0,#+0
\ 0000001C 1080BD18 POPNE {R4,PC}
341 {
342 extern const unsigned int vibraPower;
343 SetVibration(vibraPower);
\ 00000020 34009FE5 LDR R0,??start_vibra_0 ;; vibraPower
\ 00000024 000090E5 LDR R0,[R0, #+0]
\ 00000028 7C0000EF SWI +124
344 if(VIBR_TYPE)
\ 0000002C ........ LDR R1,??DataTable12 ;; VIBR_TYPE
\ 00000030 28209FE5 LDR R2,??start_vibra_0+0x4 ;; stop_vibra
\ 00000034 001091E5 LDR R1,[R1, #+0]
\ 00000038 DC0FA0E3 MOV R0,#+880
\ 0000003C 000051E3 CMP R1,#+0
\ 00000040 0100000A BEQ ??start_vibra_1
345 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra);
\ 00000044 3610A0E3 MOV R1,#+54
\ 00000048 000000EA B ??start_vibra_2
346 else
347 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra);
\ ??start_vibra_1:
\ 0000004C 6C10A0E3 MOV R1,#+108
\ ??start_vibra_2:
\ 00000050 040080E0 ADD R0,R0,R4
\ 00000054 4D0000EF SWI +77
348 }
349 }
\ 00000058 1080BDE8 POP {R4,PC} ;; return
\ ??start_vibra_0:
\ 0000005C ........ DC32 vibraPower
\ 00000060 ........ DC32 stop_vibra
350


Цитата
Не верится мне что разработчики АРМа не предусмотрели такой элементарной вещи как заргузка в регистр адреса переменной из памяти данных.


Даже более глобально - отсутствие прямой загрузки любого непосредственного операнда (который может являться адресом другой ячейки).


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
777777
сообщение Jul 10 2009, 08:50
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Rst7 @ Jul 10 2009, 11:25) *
Тут написано, что значение R15 "опережает" текущий адрес команды на 8 (или на 12). А цитату о невозможности write-back'а в R15 я привел выше.

Ну, значит в принципе можно? Только считываемую константу разместить не сразу после команды, а через две, с учетом конвейера.
Цитата(Rst7 @ Jul 10 2009, 11:25) *
Да. Именно так. Вот, например, обратите внимание на обращение к статическим переменным
...
Даже более глобально - отсутствие прямой загрузки любого непосредственного операнда (который может являться адресом другой ячейки).

Что же тогда хорошего в этом АРМе?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 10 2009, 09:15
Сообщение #18


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Ну, значит в принципе можно? Только считываемую константу разместить не сразу после команды, а через две, с учетом конвейера.


Вы не читаете, что я Вам пишу? Я же процитировал мануал от ARM'а - нельзя использовать R15 в режиме инкрементной/декрементной адресации.

Цитата
Что же тогда хорошего в этом АРМе?


biggrin.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 10 2009, 09:27
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Rst7 @ Jul 10 2009, 09:30) *
Случай-то частный, но отсутствие загрузки любых непосредственных операндов не позволяет, например, простыми средствами (без внутренних кешей) выполнять код из внешней SDRAM без дикой потери производительности. А вот AVR32 даже в инкарнации AT32UC3A0512 - вполне. Дует себе в burst-режиме и все пучком.

Дык я разве что другое писал? Тут даже и наличие кэшей не очень спасает - DCache будет забиваться кодом.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 10 2009, 09:32
Сообщение #20


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Дык я разве что другое писал?


Дык я ж против не имею. Просто привел еще один вариант дупы.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 18:22
Рейтинг@Mail.ru


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