Урок 1. Создаём вибру : Патчестроение : Форум

Страница 1 из 2: [1] 2 »

 ZEN:
08.08.09, 16:52
 
Код: 
; это первый урок будут и другие



                 PUSH    {R0-R5,LR}
                 ;здесь устанавливаються параметры вибры: мощьность,время одного вибрика, время между вибриками
                 MOV     R0, 0x30
                 MOV     R1, 0x20
                 MOV     R2, 0x10
                 ;здесь вызываеться функция виры
                 LDR     R5, SWI_0x1BB_Vibra
                 BLX     R5
                
                 MOV     R0, 0x7F ;время  длительности всего этого процесса
                 LDR     R1, off_ ; переход на выключение вибры
                 
                 LDR     R5, SWI_0x129_Timer_Set
                 BLX     R5
                 POP     {R0-R5,PC}



 off:
 ;здесь сопсна говоря она и вырубаеться
                 PUSH    {R0-R3,LR}
                 MOV     R0, 0 
                 LDR     R3, SWI_0x248_Vibra_Off
                 BLX     R3
                 POP     {R0-R3,PC}
 ; ---------------------------------------------------------------------------
SWI_0x1BB_Vibra  DCD 0x45452EA4+1
off_    DCD off+1      
SWI_0x129_Timer_Set  DCD 0x45294D90+1
SWI_0x248_Vibra_Off  DCD 0x45452F7C+1
;дреса преведены для W810 R4DB005


[ Редактировано ZEN в 9.8.09 11:51 ]

 den_po:
08.08.09, 17:25
 устаревшие функции. вибру давно можно использовать без таймера.
http://supertrubka.org/wiki/doku.php?id=elflib:functions:audiocontrol_vibrate

 Va_st:
08.08.09, 18:35
 тогда так:
Код: 
        PUSH    {LR}
        BL    sub_AudioControl_Init
        CMP    R0, 0
        BNE    loc_
        BL    sub_GetAudioControlPtr
        LDR    R0, [R0]
loc_:
        MOV    R3, 0x30 ;totaltime
        MOV    R2, 0x10 ;pausetime
        MOV    R1, 0x20 ;vibratime
        BL    sub_AudioControl_Vibrate
        POP    {PC}
sub_AudioControl_Init:
        LDR    R3, off_AudioControl_Init
        BX    R3
off_AudioControl_Init    DCD AudioControl_Init+1
sub_GetAudioControlPtr:
        LDR    R3, dword_GetAudioControlPtr
        BX    R3
dword_GetAudioControlPtr    DCD 0x201806C4 ;for k790 r8bf003
sub_AudioControl_Vibrate:
        PUSH    {R3}
        LDR    R3, off_AudioControl_Vibrate
        MOV    R12, R3
        POP    {R3}
        BX    R12
        NOP
off_AudioControl_Vibrate    DCD AudioControl_Vibrate+1



Добавлено 8.8.09 20:39

или так:
Код: 
PUSH    {R0-R7,LR}
        MOV    R0, 0
        SUB    SP, SP,    4
        STR    R0, [SP]
        SUB    SP, SP,    0x88
        MOV    R0, SP
        LDR    R1, off_
        BLX    R1
        MOVL    R1, 0x3E8
        MOV    R2, 0x32
        ADD    R3, R1,    0
        LDR    R6, [R0]
        MOVL    R4, 0x168
        LDR    R6, [R6,R4]
        BLX    R6
        ADD    SP, SP,    0x8C
        POP    {R0-R7,PC}
        ALIGN 4
off_    DCD 0x4529D5D8+1;for k790 r8bf003


 jamesbond22:
08.08.09, 22:13
 example for phones A2:

Код: 
PUSH    {R0-R7,LR}
SUB    SP, SP, 4
MOV    R0, SP
LDR    R1, off_
BLX    R1
LDR    R0, [SP]
MOVL    R1, 0x3e8
MOV    R2, 0x32
ADD    R3, R1, 0
LDR    R6, [R0]
MOV    R4, 0xFF
ADD    R4, 0x89
LDR    R6, [R6,R4]
BLX    R6
ADD    SP, SP, 4
POP    {R0-R7,PC}
align 4
off_    DCD 0x10DC0070+1 ;for W595 r3ea037 LT


 Va_st:
08.08.09, 23:16
 jamesbond22, и в чем различие от последнего?? причем а2??
Код: 
push    {r0-r7,lr}
sub     sp, sp, 4
mov     r0, sp
ldr r1,.addr
blx r1
ldr r0,[sp]
movl r1, 0x3e8
mov r2, 0x32
add r3,r1,0
ldr r6,[r0]
movl r4, 0x194
ldr r6,[r6,r4]
blx r6
add sp,sp,4
pop {r0-r7,pc}
;for w910 sw-r1fa035


 CyberMaster:
09.08.09, 02:18
 Va_st писал:
Код:
sub_AudioControl_Vibrate:
PUSH {R3}
LDR R3, off_AudioControl_Vibrate
MOV R12, R3
POP {R3}
BX R12


это не правильно. поправь
Код:
sub_AudioControl_Vibrate:
ldr   r4, off_AudioControl_Vibrate
bx   r4


[ Редактировано CyberMaster в 9.8.09 02:41 ]

 den_po:
09.08.09, 03:48
 CyberMaster, как это неправильно?

 CyberMaster:
09.08.09, 04:51
 den_po, ну а смысл такое извращение делать если можно обойтись всего двумя строчками =)

 den_po:
09.08.09, 07:08
 CyberMaster, точно так же можно спросить "а смысл выносить в отдельную функцию?", это ж целая команда лишняя, да не просто команда, а 4байтная.
всё зависит от того, насколько интенсивно в твоей функции используются регистры. вот не будет тебе их хватать, тогда посмотрим, как ты двумя строчками обойдёшься.
в любом случае, его вариант не неправильный.



Добавлено 9.8.09 07:10

вопрос ко всем: вы отступы в исходниках принципиально не используете?


Добавлено 9.8.09 07:22

по поводу обёрток для вызова дальних функций маленькая подсказка =) да и вообще посыл посмотреть в сторону макросов. макросы могут упростить написание повторяющихся кусков кода.

Код: 
macro longf na
{
far_#na :
        push \{r3\}
        ldr r3,.1
        mov r12,r3
        pop \{r3\}
        bx r12
        align 4
.1:     dw na
}

макрос создаёт такую обёртку и даёт ей имя, прибавляя в начало имени аргумента "far_".
к примеру есть у нас константа debug_printf с некоторым адресом. ставим где-то в коде вызов макроса
longf debug_printf
после этого можно вызывать обёртку командой bl far_debug_printf.

и живой пример использования этого макроса
исходник патча: 


 Va_st:
09.08.09, 09:18
 CyberMaster, пойдет??? =)

Spoiler: 

Страница 1 из 2: [1] 2 »

URL этой темы:
https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4204

© 2005-2018 supertrubka.org