Форум: "Прочее";
Текущий архив: 2014.08.24;
Скачать: [xml.tar.bz2];
Внизcase(switch) под ARM Найти похожие ветки
← →
DevilDevil © (2014-01-22 23:56) [0]Ребят, посмотрите пожалуйста в дебагере как под ARM осуществляется case(switch). Например такой код:
function Test(const X: integer): integer;
begin
case X of
0: Result := 0;
1: Result := 5;
2: Result := -5;
3: Result := 500;
4: Result := 100;
5: Result := 100500;
else
Result := -100500;
end;
end;
Мне интересно как там принято организовывать таблицу указателей. Если в опциях компилятора есть варианты оптимизации по скорости/размеру - то посмотреть результат в обоих случаях.
← →
DevilDevil © (2014-01-23 00:00) [1]В частности меня интересует, приняты ли такие команды как TBB, TBH
← →
Eraser © (2014-01-23 04:36) [2]
> DevilDevil © (22.01.14 23:56)
а самому что мешает глянуть то? )
← →
картман © (2014-01-23 09:01) [3]
> а самому что мешает глянуть то? )
время компиляции и размер экзешника))
← →
DevilDevil © (2014-01-23 09:28) [4]Ну у меня нет XE5
А для того чтобы его скачать и установить на работе - придётся пройти ряд бюрократических этапов. Дома комп слабый, боюсь XE5 не встанет :)
Ну и время компиляции с размером экзешника естественно тоже являются преградами ))
← →
jumping jack (2014-01-23 10:04) [5]> боюсь XE5 не встанет
у егорки одни отговорки
бояться не стыдно, стыдно так и не попробовать
и напрягать людей по пустякам ("в беде" люди всегда помочь рады, а так...)
← →
DevilDevil © (2014-01-23 10:08) [6]Удалено модератором
← →
clickmaker © (2014-01-23 10:11) [7]так стыдно же признаваться, что ХЕ 5 до сих пор нету...
← →
DevilDevil © (2014-01-23 10:21) [8]Удалено модератором
← →
DevilDevil © (2014-01-23 10:23) [9]Удалено модератором
← →
jumping jack (2014-01-23 10:45) [10]Удалено модератором
← →
DevilDevil © (2014-01-23 10:54) [11]Удалено модератором
← →
jumping jack (2014-01-23 11:10) [12]Удалено модератором
← →
Rouse_ © (2014-01-23 18:39) [13]Для истории...
Для кода:int test(int X)
{
switch (X) {
case 0:
return 0;
case 1:
return 5;
case 2:
return -5;
case 3:
return 500;
case 4:
return 100;
case 5:
return 100500;
default:
return -100500;
}
}
генерируется:.text:00000000 EXPORT test
.text:00000000 test
.text:00000000 CMP R0, #5
.text:00000004 LDRLS R3, =CSWTCH.3
.text:00000008 LDRLS R0, [R3,R0,LSL#2]
.text:0000000C LDRHI R0, =0xFFFE776C
.text:00000010 BX LR
.text:00000010 ; End of function test
.text:00000010
.text:00000010 ; ---------------------------------------------------------------------------
.text:00000014 off_14 DCD CSWTCH.3 ; DATA XREF: test+4r
.text:00000018 dword_18 DCD 0xFFFE776C ; DATA XREF: test+Cr
.text:00000018 ; .text ends
+ таблица:.rodata:0000003C ; ===========================================================================
.rodata:0000003C
.rodata:0000003C ; Segment type: Pure data
.rodata:0000003C AREA .rodata, DATA, READONLY
.rodata:0000003C ; ORG 0x3C
.rodata:0000003C CSWTCH.3 DCB 0, 0, 0, 0, 5, 0, 0, 0, 0xFB, 0xFF, 0xFF, 0xFF, 0xF4
.rodata:0000003C ; DATA XREF: .text:off_14o
.rodata:0000003C ; .text.startup:off_34o
.rodata:0000003C DCB 1, 0, 0, 0x64, 0, 0, 0, 0x94, 0x88, 1, 0
.rodata:0000003C ; .rodata ends
.rodata:0000003C
.rodata:0000003C END
Для кода:int test(int* X, int* Y)
{
switch (*X) {
case 0:
{*X = *X+1; return 0;}
case 1:
{*Y = *Y-1; return 5;}
case 2:
{*X = *X+*Y; return -5;}
case 3:
{*Y = *Y+*X; return 500;}
case 4:
{*X = (*X)*(*Y); return 100;}
case 5:
{*Y = *Y / *X; return 100500;}
default:
return -100500;
}
}
Вот это:.text:00000000
.text:00000000 EXPORT test
.text:00000000 test ; CODE XREF: main+Cp
.text:00000000 LDR R3, [R0]
.text:00000004 STMFD SP!, {R4,LR}
.text:00000008 MOV R4, R1
.text:0000000C CMP R3, #5 ; switch 6 cases
.text:00000010 LDRLS PC, [PC,R3,LSL#2] ; switch jump
.text:00000014 B loc_A8 ; default
.text:00000014 ; ---------------------------------------------------------------------------
.text:00000018 DCD loc_30 ; jump table for switch statement
.text:00000018 DCD loc_40
.text:00000018 DCD loc_54
.text:00000018 DCD loc_68
.text:00000018 DCD loc_7C
.text:00000018 DCD loc_90
.text:00000030 ; ---------------------------------------------------------------------------
.text:00000030
.text:00000030 loc_30 ; CODE XREF: test+10j
.text:00000030 ; DATA XREF: test+18o
.text:00000030 MOV R3, #1 ; jumptable 00000010 case 0
.text:00000034 STR R3, [R0]
.text:00000038 MOV R0, #0
.text:0000003C B loc_AC
.text:00000040 ; ---------------------------------------------------------------------------
.text:00000040
.text:00000040 loc_40 ; CODE XREF: test+10j
.text:00000040 ; DATA XREF: test+18o
.text:00000040 LDR R3, [R1] ; jumptable 00000010 case 1
.text:00000044 SUB R3, R3, #1
.text:00000048 STR R3, [R1]
.text:0000004C MOV R0, #5
.text:00000050 B loc_AC
.text:00000054 ; ---------------------------------------------------------------------------
.text:00000054
.text:00000054 loc_54 ; CODE XREF: test+10j
.text:00000054 ; DATA XREF: test+18o
.text:00000054 LDR R3, [R1] ; jumptable 00000010 case 2
.text:00000058 ADD R3, R3, #2
.text:0000005C STR R3, [R0]
.text:00000060 MOVL R0, 0xFFFFFFFB
.text:00000064 B loc_AC
.text:00000068 ; ---------------------------------------------------------------------------
.text:00000068
.text:00000068 loc_68 ; CODE XREF: test+10j
.text:00000068 ; DATA XREF: test+18o
.text:00000068 LDR R3, [R1] ; jumptable 00000010 case 3
.text:0000006C ADD R3, R3, #3
.text:00000070 STR R3, [R1]
.text:00000074 MOV R0, #0x1F4
.text:00000078 B loc_AC
.text:0000007C ; ---------------------------------------------------------------------------
.text:0000007C
.text:0000007C loc_7C ; CODE XREF: test+10j
.text:0000007C ; DATA XREF: test+18o
.text:0000007C LDR R3, [R1] ; jumptable 00000010 case 4
.text:00000080 MOV R3, R3,LSL#2
.text:00000084 STR R3, [R0]
.text:00000088 MOV R0, #0x64 ; "d"
.text:0000008C B loc_AC
.text:00000090 ; ---------------------------------------------------------------------------
.text:00000090
.text:00000090 loc_90 ; CODE XREF: test+10j
.text:00000090 ; DATA XREF: test+18o
.text:00000090 LDR R0, [R1] ; jumptable 00000010 case 5
.text:00000094 MOV R1, #5
.text:00000098 BL __aeabi_idiv
.text:0000009C STR R0, [R4]
.text:000000A0 LDR R0, =0x18894
.text:000000A4 B loc_AC
.text:000000A8 ; ---------------------------------------------------------------------------
.text:000000A8
.text:000000A8 loc_A8 ; CODE XREF: test+14j
.text:000000A8 LDR R0, =0xFFFE776C ; default
.text:000000AC
.text:000000AC loc_AC ; CODE XREF: test+3Cj
.text:000000AC ; test+50j ...
.text:000000AC LDMFD SP!, {R4,LR}
.text:000000B0 BX LR
.text:000000B0 ; End of function test
.text:000000B0
.text:000000B0 ; ---------------------------------------------------------------------------
.text:000000B4 dword_B4 DCD 0x18894 ; DATA XREF: test+A0r
.text:000000B8 dword_B8 DCD 0xFFFE776C ; DATA XREF: test:loc_A8r
.text:000000B8 ; .text ends
.text:000000B8
В обоих случаях оптимизация на размер, компилятор YAGARTO
← →
DevilDevil © (2014-01-24 11:50) [14]Да, сколько нервов нужно, чтобы работать в XE5
Может конечно комп слишком слабый (i3), может касперыч всё затормаживает... Но это просто ужас
Нашёл одну Lite-сборку, попробовал установить - всё прошло нормально, видимо отделался малой кровью
Теперь объясните мне (пожалуйста) как запускать и отлаживать под ведроидом. Я даже не буду говорить, сколько мегабайт он занимает и сколько времени компилится. Накидал кнопку и лейбл на форму, запускаю - в эмуляторе всё чёрное. Ставлю брейкпоинт на OnCreate - не останавливается. Чё за фигня то ?
← →
Kerk © (2014-01-24 11:54) [15]Отлаживай на реальном устройстве. В интернетах есть смельчаки, заставившие работать эмулятор или прикрутившие другой эмулятор - Гугл даст тебе полный поименный список - но таких мало.
По своему опыту могу сказать, что если у тебя XE5 тормозит, то про эмулятор лучше забудь.
← →
Kerk © (2014-01-24 11:57) [16]А черный экран ты видел просто потому, что не дождался запуска.
← →
DevilDevil © (2014-01-24 11:58) [17]> Kerk © (24.01.14 11:54) [15]
А что если "реального устройства" нет, а нужно посмотреть асм-код, который генерируется ?
← →
Kerk © (2014-01-24 12:07) [18]Кнопка Build работает и без устройства. Можно попробовать смотреть получившийся .so-файл каким-нибудь дизассемблером. Не знаю насколько тебе такой вариант подойдет, но я не вижу как еще можно...
← →
DevilDevil © (2014-01-24 12:30) [19]Дьявол создал XE5... Но я к этому не причастен
Эмулятор до сих пор не загрузился
← →
Eraser © (2014-01-24 12:31) [20]
> DevilDevil © (24.01.14 11:50) [14]
> Нашёл одну Lite-сборку, попробовал установить - всё прошло
> нормально, видимо отделался малой кровью
>
зачем? скачай триал, когда закончится, зарегай еще, так можно делать бесконечно.
> Теперь объясните мне (пожалуйста) как запускать и отлаживать
> под ведроидом.
в справке все написано.
> в эмуляторе всё чёрное
тоже есть описание на сайте почему, да и я тут выкладывал как починить со скриншотом.
в целом заниматься разработкой под андроид на эмуляторе почти не реально. не из-за того, что Делфи плохая, а из-за паршивого эмулятора. поучились бы лучше у эппл, как эмуляторы делать. так что покупай смартфон, благо сейчас копейки стоит.
> Я даже не буду говорить, сколько мегабайт он занимает и
> сколько времени компилится
привыкли, что на делфи все мгновенно билдится, вот теперь получайте, как у остального мира всегда было )
← →
DevilDevil © (2014-01-24 12:41) [21]видимо буду покупать дивайс с ведроидом
← →
DevilDevil © (2014-01-24 14:28) [22]Прошёл ещё час, а эмулятор так и не запустился. В общем компьютер перезагрузил, больше дебажить андроид через эмулятор не буду :)
Ребят, пока я не купил девайс, может посмотрите в дебагере такой код:function Test(var X: integer): integer;
begin
case X of
0: Result := 0;
1: begin
Inc(X);
Result := 5;
end;
2: begin
Dec(X);
Result := -5;
end;
3: begin
X := X*X;
Result := 500;
end;
4: begin
X := X shl 2;
Result := 100;
end;
5: begin
X := X shr 3;
Result := 100500;
end;
else
Result := -100500;
end;
end;
← →
Inovet © (2014-01-24 14:46) [23]> [22] DevilDevil © (24.01.14 14:28)
> Прошёл ещё час, а эмулятор так и не запустился.
А вот это действительно долго. Но, думается, что-то там не то с запуском. Уж i3 должен и не такое тянуть. А, может, ОЗУ совсем мало? А то ведь сейчас на мобильниках уже гигабайтами измеряется.
← →
DevilDevil © (2014-01-24 15:13) [24]2 гига
← →
Eraser © (2014-01-24 17:58) [25]
> DevilDevil © (24.01.14 12:41) [21]
даже если ты запустишь эмулятор (кстати, не понимаю в чем там проблемы, у меня запустился "из коробки"), от этого легче не станет, уж поверь. так что в магазин )
← →
Плохиш © (2014-01-24 18:56) [26]Ну у меня эмулятор запускается, толку-то ноль. Всё равно проект в нём не запускается :-(
Т.ч. у меня всегда живой девайс подключён.
PS. Я эту xe5 уже боюсь 8-O То сама завалится, то ошибок внутренних навываливает, то свои модули в дезайне не узнаёт/находит. А приложения для андроид, вообще песня. Такое чувство, что на тестировании сильно съэкономили. Мастер-деталь неработает почти совсем, при попытке переместиться по мастеру, приложение просто закрывается :-(
← →
Eraser © (2014-01-25 00:15) [27]да уж.. одни писатели тут, как я погляжу )
http://docwiki.embarcadero.com/RADStudio/XE5/en/Running_Your_Android_Application_on_an_Android_Emulator
← →
Пит (2014-01-25 15:07) [28]
> Отлаживай на реальном устройстве. В интернетах есть смельчаки,
> заставившие работать эмулятор или прикрутившие другой эмулятор
то есть, пошаговая отладка в принципе невозможна?!
В XE5 включили эмулятор, которое подавляющее большинство людей не смогли заставить работать? А как так...
← →
Kerk © (2014-01-25 15:23) [29]
> Пит (25.01.14 15:07) [28]
>
> > Отлаживай на реальном устройстве. В интернетах есть смельчаки,
> > заставившие работать эмулятор или прикрутившие другой эмулятор
>
> то есть, пошаговая отладка в принципе невозможна?!
Каким образом ты пришел к такому выводу? На реальном устройстве отлаживай как хочешь. Отладка по USB - это абсолютно штатная функция андроида.
> В XE5 включили эмулятор, которое подавляющее большинство
> людей не смогли заставить работать?
В XE5 не включали никаких эмуляторов. Эмулятор - это часть гуглового Android SDK, который нужно установить, если ты в XE5 хочешь работать с андроидом. Есть и какие-то другие эмуляторы, но особо я в эту тему не вдавался.
← →
Пит (2014-01-25 15:38) [30]
> Каким образом ты пришел к такому выводу?
Да я вообще в этом не понимаю. Поэтому только догадываюсь...
Ну вот смотри, есть delphi-код. А есть некий .so я так понимаю, то, что хавает андроид (хотя я вроде слышал про apk...).
Я запускаю на адроид-устройстве написанную программу, и как при этом её отлаживать построчно в дельфи-среде на компьютере?
> Эмулятор - это часть гуглового Android SDK
и при этом он ни у кого не работает? не понимаю...
← →
Kerk © (2014-01-25 16:27) [31]Абсолютно так же отлаживать, как обычно. Жмешь Run, приложение компилируется и запускается на планшете. Дальше ставишь брекпоинты и наслаждаешься.
Эмулятор у кого-то наверно работает. Я говорю исключительно о том, что вижу вокруг себя лично. Например, мои знакомые ксамаринщики этим эмулятором тоже не пользуются. Они взяли эмулятор, который эмулирует андроид на интеловском процессоре. Но Делфи пока не умеет компилить приложения под интел.
← →
DevilDevil © (2014-01-25 17:05) [32]Надеюсь у меня на работе получится отладка по USB
Потому что там тысяча сетевых политик доступа по USB
p.s. ведроид девайс купил :)
← →
Пит (2014-01-25 17:12) [33]
> Жмешь Run, приложение компилируется и запускается на планшете
То есть, оно компилируется на компьютер, каким-то образом сразу устанавливается на устройство и запускается удаленная отладка?
← →
Inovet © (2014-01-25 17:17) [34]> [33] Пит (25.01.14 17:12)
Наверное, устройственная часть отладчика бдит.
← →
Kerk © (2014-01-25 18:05) [35]Да, каким-то образом через usb-кабель приложение попадает на устройство и запускается удаленная отладка.
← →
Пит (2014-01-25 19:00) [36]
> Да, каким-то образом через usb-кабель приложение попадает
> на устройство и запускается удаленная отладка.
прикалываешься надо мной? Не стоит, я правда ничего не понимаю...
Попробую сформулировать по другому, можно все настроить так, что нажимаешь F9 - и "новая" версия программы через некоторое время запускается на железке с возможностью BP в среде delphi на компе?
Или процесс более ручной?
P.S. А можешь вкратце объяснить, что такое .so и его отношение к .apk?
← →
Kerk © (2014-01-25 19:32) [37]
> Пит (25.01.14 19:00) [36]
>
> > Да, каким-то образом через usb-кабель приложение попадает
> > на устройство и запускается удаленная отладка.
>
> прикалываешься надо мной? Не стоит, я правда ничего не понимаю.
Не прикалываюсь, так и работает.
> Попробую сформулировать по другому, можно все настроить
> так, что нажимаешь F9 - и "новая" версия программы через
> некоторое время запускается на железке с возможностью BP
> в среде delphi на компе?
Именно так. Работает все довольно прозрачно. Подключаешь планшет к компьютеру, он появляется в списке доступных устройств в Delphi, выбираешь его и дальше все работает так как ты описал.
> А можешь вкратце объяснить, что такое .so и его отношение
> к .apk?
.so - это сам бинарник, результат работы компилятора.
.apk - это пакет, внутри которого лежит этот бинарник, файл манифеста, сертификаты, иконки и какие-то еще нужные для запуска штуки. Насколько я понимаю, с точки зрения формата файла APK - это всего-лишь ZIP-архив.
← →
DevilDevil © (2014-01-26 01:22) [38]кстати RAD Studio пол ARM сохранил Little Endian доступ или нет?
я просто к другому порядку байт пока не привык
если нужно почитать что-нибудь толковое по сему поводу - скажите
← →
Eraser © (2014-01-26 02:33) [39]
> Пит (25.01.14 19:00) [36]
открой для себя дивный новый мир )
https://www.google.ru/search?q=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0&oq=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0&aqs=chrome..69i57j0l5.2758j0j7&sourceid=chrome&espv=210&es_sm=119&ie=UTF-8#q=%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0+%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&safe=off
← →
Eraser © (2014-01-26 02:36) [40]а под iOS все куда веселее ) там на mac устанавливается Делфевский PAServer, который запускает удаленную отладку через XCode и по сети взаимодействует с самой Делфи (которая конечно на машине с виндой).
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2014.08.24;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.003 c