📄 button.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\button.o --depend=.\Obj\button.d --device=DARMSTM --apcs=interwork -O0 -Otime -I..\..\Libraries\CMSIS\Core\CM3 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Source\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\Source\src\button.c]
THUMB
AREA ||i.DetectButton||, CODE, READONLY, ALIGN=1
DetectButton PROC
;;;192 */
;;;193 static void DetectButton(BUTTON_T *_pBtn)
000000 b510 PUSH {r4,lr}
;;;194 {
000002 4604 MOV r4,r0
;;;195 /* 如果没有初始化按键函数,则报错
;;;196 if (_pBtn->IsKeyDownFunc == 0)
;;;197 {
;;;198 printf("Fault : DetectButton(), _pBtn->IsKeyDownFunc undefine");
;;;199 }
;;;200 */
;;;201
;;;202 if (_pBtn->IsKeyDownFunc())
000004 6820 LDR r0,[r4,#0]
000006 4780 BLX r0
000008 b358 CBZ r0,|L1.98|
;;;203 {
;;;204 if (_pBtn->Count < _pBtn->FilterTime)
00000a 7920 LDRB r0,[r4,#4]
00000c 7961 LDRB r1,[r4,#5]
00000e 4288 CMP r0,r1
000010 da02 BGE |L1.24|
;;;205 {
;;;206 _pBtn->Count = _pBtn->FilterTime;
000012 7960 LDRB r0,[r4,#5]
000014 7120 STRB r0,[r4,#4]
000016 e03e B |L1.150|
|L1.24|
;;;207 }
;;;208 else if(_pBtn->Count < 2 * _pBtn->FilterTime)
000018 7920 LDRB r0,[r4,#4]
00001a 7961 LDRB r1,[r4,#5]
00001c 0049 LSLS r1,r1,#1
00001e 4288 CMP r0,r1
000020 da03 BGE |L1.42|
;;;209 {
;;;210 _pBtn->Count++;
000022 7920 LDRB r0,[r4,#4]
000024 1c40 ADDS r0,r0,#1
000026 7120 STRB r0,[r4,#4]
000028 e035 B |L1.150|
|L1.42|
;;;211 }
;;;212 else
;;;213 {
;;;214 if (_pBtn->State == 0)
00002a 7aa0 LDRB r0,[r4,#0xa]
00002c b938 CBNZ r0,|L1.62|
;;;215 {
;;;216 _pBtn->State = 1;
00002e 2001 MOVS r0,#1
000030 72a0 STRB r0,[r4,#0xa]
;;;217
;;;218 /* 发送按钮按下的消息 */
;;;219 if (_pBtn->KeyCodeDown > 0)
000032 7b20 LDRB r0,[r4,#0xc]
000034 2800 CMP r0,#0
000036 dd02 BLE |L1.62|
;;;220 {
;;;221 /* 键值放入按键FIFO */
;;;222 PutKey(_pBtn->KeyCodeDown);
000038 7b20 LDRB r0,[r4,#0xc]
00003a f7fffffe BL PutKey
|L1.62|
;;;223 }
;;;224 }
;;;225
;;;226 if (_pBtn->LongTime > 0)
00003e 8920 LDRH r0,[r4,#8]
000040 2800 CMP r0,#0
000042 dd28 BLE |L1.150|
;;;227 {
;;;228 if (_pBtn->LongCount < _pBtn->LongTime)
000044 88e0 LDRH r0,[r4,#6]
000046 8921 LDRH r1,[r4,#8]
000048 4288 CMP r0,r1
00004a da24 BGE |L1.150|
;;;229 {
;;;230 /* 发送按钮持续按下的消息 */
;;;231 if (++_pBtn->LongCount == _pBtn->LongTime)
00004c 88e0 LDRH r0,[r4,#6]
00004e 1c40 ADDS r0,r0,#1
000050 b280 UXTH r0,r0
000052 80e0 STRH r0,[r4,#6]
000054 8921 LDRH r1,[r4,#8]
000056 4288 CMP r0,r1
000058 d11d BNE |L1.150|
;;;232 {
;;;233 /* 键值放入按键FIFO */
;;;234 PutKey(_pBtn->KeyCodeLong);
00005a 7b60 LDRB r0,[r4,#0xd]
00005c f7fffffe BL PutKey
000060 e019 B |L1.150|
|L1.98|
;;;235 }
;;;236 }
;;;237 }
;;;238 }
;;;239 }
;;;240 else
;;;241 {
;;;242 if(_pBtn->Count > _pBtn->FilterTime)
000062 7920 LDRB r0,[r4,#4]
000064 7961 LDRB r1,[r4,#5]
000066 4288 CMP r0,r1
000068 dd02 BLE |L1.112|
;;;243 {
;;;244 _pBtn->Count = _pBtn->FilterTime;
00006a 7960 LDRB r0,[r4,#5]
00006c 7120 STRB r0,[r4,#4]
00006e e010 B |L1.146|
|L1.112|
;;;245 }
;;;246 else if(_pBtn->Count != 0)
000070 7920 LDRB r0,[r4,#4]
000072 b118 CBZ r0,|L1.124|
;;;247 {
;;;248 _pBtn->Count--;
000074 7920 LDRB r0,[r4,#4]
000076 1e40 SUBS r0,r0,#1
000078 7120 STRB r0,[r4,#4]
00007a e00a B |L1.146|
|L1.124|
;;;249 }
;;;250 else
;;;251 {
;;;252 if (_pBtn->State == 1)
00007c 7aa0 LDRB r0,[r4,#0xa]
00007e 2801 CMP r0,#1
000080 d107 BNE |L1.146|
;;;253 {
;;;254 _pBtn->State = 0;
000082 2000 MOVS r0,#0
000084 72a0 STRB r0,[r4,#0xa]
;;;255
;;;256 /* 发送按钮弹起的消息 */
;;;257 if (_pBtn->KeyCodeUp > 0)
000086 7ae0 LDRB r0,[r4,#0xb]
000088 2800 CMP r0,#0
00008a dd02 BLE |L1.146|
;;;258 {
;;;259 /* 键值放入按键FIFO */
;;;260 PutKey(_pBtn->KeyCodeUp);
00008c 7ae0 LDRB r0,[r4,#0xb]
00008e f7fffffe BL PutKey
|L1.146|
;;;261 }
;;;262 }
;;;263 }
;;;264
;;;265 _pBtn->LongCount = 0;
000092 2000 MOVS r0,#0
000094 80e0 STRH r0,[r4,#6]
|L1.150|
;;;266 }
;;;267 }
000096 bd10 POP {r4,pc}
;;;268
ENDP
AREA ||i.GetKey||, CODE, READONLY, ALIGN=2
GetKey PROC
;;;166 */
;;;167 uint8_t GetKey(void)
000000 480b LDR r0,|L2.48|
;;;168 {
;;;169 uint8_t ret;
;;;170
;;;171 if (s_Key.Read == s_Key.Write)
000002 7d00 LDRB r0,[r0,#0x14] ; s_Key
000004 4a0a LDR r2,|L2.48|
000006 7d52 LDRB r2,[r2,#0x15] ; s_Key
000008 4290 CMP r0,r2
00000a d101 BNE |L2.16|
;;;172 {
;;;173 return KEY_NONE;
00000c 2000 MOVS r0,#0
|L2.14|
;;;174 }
;;;175 else
;;;176 {
;;;177 ret = s_Key.Buf[s_Key.Read];
;;;178
;;;179 if (++s_Key.Read >= KEY_FIFO_SIZE)
;;;180 {
;;;181 s_Key.Read = 0;
;;;182 }
;;;183 return ret;
;;;184 }
;;;185 }
00000e 4770 BX lr
|L2.16|
000010 4807 LDR r0,|L2.48|
000012 7d00 LDRB r0,[r0,#0x14] ;177 ; s_Key
000014 4a06 LDR r2,|L2.48|
000016 5c11 LDRB r1,[r2,r0] ;177
000018 4610 MOV r0,r2 ;179
00001a 7d00 LDRB r0,[r0,#0x14] ;179 ; s_Key
00001c 1c40 ADDS r0,r0,#1 ;179
00001e b2c0 UXTB r0,r0 ;179
000020 7510 STRB r0,[r2,#0x14] ;179
000022 2814 CMP r0,#0x14 ;179
000024 db01 BLT |L2.42|
000026 2000 MOVS r0,#0 ;181
000028 7510 STRB r0,[r2,#0x14] ;181
|L2.42|
00002a 4608 MOV r0,r1 ;183
00002c e7ef B |L2.14|
;;;186
ENDP
00002e 0000 DCW 0x0000
|L2.48|
DCD ||.bss||+0x80
AREA ||i.InitButtonVar||, CODE, READONLY, ALIGN=2
InitButtonVar PROC
;;;57 */
;;;58 void InitButtonVar(void)
000000 2000 MOVS r0,#0
;;;59 {
;;;60 /* 对按键FIFO读写指针清零 */
;;;61 s_Key.Read = 0;
000002 4957 LDR r1,|L3.352|
000004 7508 STRB r0,[r1,#0x14]
;;;62 s_Key.Write = 0;
000006 7548 STRB r0,[r1,#0x15]
;;;63
;;;64 /* 初始化USER按键变量 */
;;;65 s_BtnUser.IsKeyDownFunc = IsKeyDownUser; /* 判断按键按下的函数 */
000008 4856 LDR r0,|L3.356|
00000a 3980 SUBS r1,r1,#0x80
00000c 6008 STR r0,[r1,#0] ; s_BtnUser
;;;66 s_BtnUser.FilterTime = BUTTON_FILTER_TIME; /* 按键滤波时间 */
00000e 2005 MOVS r0,#5
000010 7148 STRB r0,[r1,#5]
;;;67 s_BtnUser.LongTime = BUTTON_LONG_TIME; /* 长按时间 */
000012 2064 MOVS r0,#0x64
000014 8108 STRH r0,[r1,#8]
;;;68 s_BtnUser.Count = s_BtnUser.FilterTime / 2; /* 计数器设置为滤波时间的一半 */
000016 7948 LDRB r0,[r1,#5] ; s_BtnUser
000018 eb0071d0 ADD r1,r0,r0,LSR #31
00001c 1049 ASRS r1,r1,#1
00001e 4a50 LDR r2,|L3.352|
000020 3a80 SUBS r2,r2,#0x80
000022 7111 STRB r1,[r2,#4]
;;;69 s_BtnUser.State = 0; /* 按键缺省状态,0为未按下 */
000024 2000 MOVS r0,#0
000026 4611 MOV r1,r2
000028 7288 STRB r0,[r1,#0xa]
;;;70 s_BtnUser.KeyCodeDown = KEY_DOWN_USER; /* 按键按下的键值代码 */
00002a 2001 MOVS r0,#1
00002c 7308 STRB r0,[r1,#0xc]
;;;71 s_BtnUser.KeyCodeUp = KEY_UP_USER; /* 按键弹起的键值代码 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -