?? u-boot在44b0x開發板上的移植以及代碼分析.mht
字號:
BR>=CA=B5=CF=D6=C1=CB=D1=D3=CA=B1=BA=AF=CA=FDudelay=A1=A3<BR>=D5=E2=C0=EF=
=B5=C4get_timer=20
=
=D3=C9=D3=DA=C3=BB=D3=D0=CA=B9=D3=C3=D6=D0=B6=CF=A3=AC=CA=C7=CA=B9=D3=C3=C8=
=AB=BE=D6=B1=E4=C1=BF=C0=B4=C0=DB=BC=D3=B5=C4=A1=A3<BR>void udelay =
(unsigned long usec)<BR>{<BR>ulong=20
tmo;<BR><BR>tmo =3D usec / 1000;<BR>tmo *=3D CFG_HZ;<BR>tmo /=3D =
8;<BR><BR>tmo=20
+=3D get_timer (0);<BR><BR>while (get_timer_masked () <=20
tmo)<BR>/*NOP*/;<BR>}<BR><BR>3) flash=20
=B2=BF=B7=D6=A3=A8u-boot-1.1.2/board/gold44b.c=A3=A9<BR>flash =
=D7=F7=CE=AA=C4=DA=B4=E6=B5=C4=D2=BB=B2=BF=B7=D6=A3=AC=B6=C1=BF=CF=B6=A8=C3=
=BB=D3=D0=CE=CA=CC=E2=A3=AC=B9=D8=BC=FC=CA=C7flash=20
=B5=C4=D0=B4=B2=BF=B7=D6=A1=A3<BR>Flash =
=B5=C4=D0=B4=B1=D8=D0=EB=CF=C8=B2=C1=B3=FD=A3=AC=C8=BB=BA=F3=D4=D9=D0=B4=A1=
=A3<BR>flash_init =
=CD=EA=B3=C9=B3=F5=CA=BC=BB=AF=B2=BF=B7=D6=A3=AC=D5=E2=C0=EF=B5=C4=D6=F7=D2=
=AA=C4=BF=B5=C4=CA=C7=BC=EC=D1=E9flash=20
=B5=C4=D0=CD=BA=C5=CA=C7=B7=F1=D5=FD=C8=B7=A1=A3<BR><BR>unsigned =
long flash_init (void)<BR>{<BR>#ifdef=20
__DEBUG_START_FROM_SRAM__<BR>return=20
CFG_DUMMY_FLASH_SIZE;<BR>#else<BR>unsigned long size_b0;<BR>int=20
i;<BR><BR>/* Init: no FLASHes known */<BR>for (i=3D0;=20
i<CFG_MAX_FLASH_BANKS; ++i) {<BR>flash_info[i].flash_id =3D=20
FLASH_UNKNOWN;<BR>}<BR><BR>/* Static FLASH Bank configuration here =
- FIXME=20
XXX */<BR><BR>size_b0 =3D flash_get_size((vu_long =
*)CFG_FLASH_BASE,=20
&flash_info[0]);<BR><BR>if (flash_info[0].flash_id =3D=3D =
FLASH_UNKNOWN)=20
{<BR>printf ("## Unknown FLASH on Bank 0 - Size =3D 0x%08lx =3D =
%ld=20
MB\n",<BR>size_b0, size_b0<<20);<BR>}<BR><BR>/* Setup =
offsets=20
*/<BR>flash_get_offsets (0, &flash_info[0]);<BR><BR>/* Monitor =
protection ON by default=20
=
*/<BR>(void)flash_protect(FLAG_PROTECT_SET,<BR>-CFG_MONITOR_LEN,<BR>0xfff=
fffff,<BR>&flash_info[0]);<BR><BR>flash_info[0].size=20
=3D size_b0;<BR><BR>return =
(size_b0);<BR>#endif<BR>}<BR><BR><BR>flash_erase=20
=B2=C1=B3=FDflash,BlankCheck =
=D4=F2=BC=EC=B2=E9=B8=C3=B2=BF=B7=D6=C4=DA=C8=DD=CA=C7=B7=F1=B2=C1=B3=FD=B3=
=C9=B9=A6=A1=A3<BR><BR>int flash_erase (flash_info_t=20
*info, int s_first, int s_last)<BR>{<BR>volatile =
CFG_FLASH_WORD_SIZE *addr=20
=3D (CFG_FLASH_WORD_SIZE *)(info->start[0]);<BR>volatile=20
CFG_FLASH_WORD_SIZE *addr2;<BR>int flag, prot, sect, =
l_sect;<BR>ulong=20
start, now, last;<BR>int i;<BR><BR>if ((s_first < 0) || =
(s_first >=20
s_last)) {<BR>if (info->flash_id =3D=3D FLASH_UNKNOWN) =
{<BR>printf ("-=20
missing\n");<BR>} else {<BR>printf ("- no sectors to=20
erase\n");<BR>}<BR>return 1;<BR>}<BR><BR>if (info->flash_id =
=3D=3D=20
FLASH_UNKNOWN) {<BR>printf ("Can't erase unknown flash type -=20
aborted\n");<BR>return 1;<BR>}<BR><BR>prot =3D 0;<BR>for =
(sect=3Ds_first;=20
sect<=3Ds_last; ++sect) {<BR>if (info->protect[sect])=20
{<BR>prot++;<BR>}<BR>}<BR><BR>if (prot) {<BR>printf ("- Warning: =
%d=20
protected sectors will not be erased!\n",<BR>prot);<BR>} else =
{<BR>printf=20
("\n");<BR>}<BR><BR>l_sect =3D -1;<BR><BR>/* Disable interrupts =
which might=20
cause a timeout here */<BR>flag =3D =
disable_interrupts();<BR><BR>/* Start=20
erase on unprotected sectors */<BR>for (sect =3D s_first; =
sect<=3Ds_last;=20
sect++) {<BR>if (info->protect[sect] =3D=3D 0) { /* not =
protected=20
*/<BR>addr2 =3D (CFG_FLASH_WORD_SIZE =
*)(info->start[sect]);<BR>if=20
((info->flash_id & FLASH_VENDMASK) =3D=3D FLASH_MAN_SST)=20
{<BR>addr[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00AA00AA;<BR>addr[CFG_FLASH_ADDR1] =3D=20
(CFG_FLASH_WORD_SIZE)0x00550055;<BR>addr[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00800080;<BR>addr[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00AA00AA;<BR>addr[CFG_FLASH_ADDR1] =3D=20
(CFG_FLASH_WORD_SIZE)0x00550055;<BR>addr2[0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00500050; /* block erase */<BR>for (i=3D0; =
i<50;=20
i++)<BR>udelay(1000); /* wait 1 ms */<BR>} else {<BR>if (sect =
=3D=3D s_first)=20
{<BR>addr[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00AA00AA;<BR>addr[CFG_FLASH_ADDR1] =3D=20
(CFG_FLASH_WORD_SIZE)0x00550055;<BR>addr[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00800080;<BR>addr[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00AA00AA;<BR>addr[CFG_FLASH_ADDR1] =3D=20
(CFG_FLASH_WORD_SIZE)0x00550055;<BR>}<BR>addr2[0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00300030; /* sector erase */<BR>}<BR>l_sect =
=3D=20
sect;<BR>}<BR>}<BR><BR>/* re-enable interrupts if necessary =
*/<BR>if=20
(flag)<BR>enable_interrupts();<BR><BR>/* wait at least 80us - =
let's wait 1=20
ms */<BR>udelay (1000);<BR><BR>/*<BR>* We wait for the last =
triggered=20
sector<BR>*/<BR>if (l_sect < 0)<BR>goto DONE;<BR><BR>start =3D =
get_timer=20
(0);<BR>last =3D start;<BR>addr =3D (CFG_FLASH_WORD_SIZE=20
*)(info->start[l_sect]);<BR>while ((addr[0] &=20
(CFG_FLASH_WORD_SIZE)0x00800080) !=3D =
(CFG_FLASH_WORD_SIZE)0x00800080)=20
{<BR>if ((now =3D get_timer(start)) > CFG_FLASH_ERASE_TOUT) =
{<BR>printf=20
("Timeout\n");<BR>return 1;<BR>}<BR>/* show that we're waiting =
*/<BR>if=20
((now - last) > 50000000) { /* every second */<BR>putc =
('.');<BR>last =3D=20
now;<BR>}<BR>}<BR><BR>DONE:<BR>/* reset to read mode */<BR>addr =
=3D=20
(CFG_FLASH_WORD_SIZE *)info->start[0];<BR>addr[0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00F000F0; /* reset bank */<BR><BR>printf (" =
done\n");<BR>return 0;<BR>}<BR><BR><BR>wirte_word =
=D4=F2=CF=EBflash =C0=EF=C3=E6=D0=B4=C8=EBunsigned=20
long =C0=E0=D0=CD=B5=C4data=A3=AC=D2=F2=CE=AAflash=20
=
=D2=BB=B4=CE=D6=BB=C4=DC=D0=B4=C8=EB16bits=A3=AC=CB=F9=D2=D4=D5=E2=C0=EF=B7=
=D6=C1=BD=B4=CE=D0=B4=C8=EB=A1=A3<BR>/*----------------------------------=
-------------------------------------<BR>*=20
Write a word to Flash, returns:<BR>* 0 - OK<BR>* 1 - write =
timeout<BR>* 2=20
- Flash not erased<BR>*/<BR>static int write_word (flash_info_t =
*info,=20
ulong dest, ulong data)<BR>{<BR>volatile CFG_FLASH_WORD_SIZE =
*addr2 =3D=20
(CFG_FLASH_WORD_SIZE *)(info->start[0]);<BR>volatile=20
CFG_FLASH_WORD_SIZE *dest2 =3D (CFG_FLASH_WORD_SIZE =
*)dest;<BR>volatile=20
CFG_FLASH_WORD_SIZE *data2 =3D (CFG_FLASH_WORD_SIZE =
*)&data;<BR>ulong=20
start;<BR>int flag;<BR>int i;<BR><BR>/* Check if Flash is =
(sufficiently)=20
erased */<BR>if ((*((volatile ulong *)dest) & data) !=3D data) =
{<BR>return (2);<BR>}<BR>/* Disable interrupts which might cause a =
timeout=20
here */<BR>flag =3D disable_interrupts();<BR><BR>for (i=3D0;=20
i<4/sizeof(CFG_FLASH_WORD_SIZE); =
i++)<BR>{<BR>addr2[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00AA00AA;<BR>addr2[CFG_FLASH_ADDR1] =3D=20
(CFG_FLASH_WORD_SIZE)0x00550055;<BR>addr2[CFG_FLASH_ADDR0] =3D=20
(CFG_FLASH_WORD_SIZE)0x00A000A0;<BR><BR>dest2[i] =3D =
data2[i];<BR><BR>/*=20
re-enable interrupts if necessary */<BR>if=20
(flag)<BR>enable_interrupts();<BR><BR>/* data polling for D7 =
*/<BR>start =3D=20
get_timer (0);<BR>while ((dest2[i] & =
(CFG_FLASH_WORD_SIZE)0x00800080)=20
!=3D<BR>(data2[i] & (CFG_FLASH_WORD_SIZE)0x00800080)) {<BR>if=20
(get_timer(start) > CFG_FLASH_WRITE_TOUT) {<BR>return=20
(1);<BR>}<BR>}<BR>}<BR><BR>return (0);<BR>}</P>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
<DIV=20
style=3D"BORDER-TOP: #000000 1px solid; FONT-SIZE: 12px; MARGIN: 0px =
auto; WIDTH: 800px; COLOR: #000000; FONT-FAMILY: '=CB=CE=CC=E5'; HEIGHT: =
28px; BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: =
center"><!--=C9=CF=D2=BB=C6=AA--> <A=20
title=3D=C7=B6=C8=EB=CA=BDuclinux=BC=F2=BD=E9=20
href=3D"http://www.hzlitai.com.cn/article/ARM7-artilcle/system/2006101343=
.html">=C9=CF=D2=BB=C6=AA:=C7=B6=C8=EB=CA=BDuclinux=BC=F2=BD=E9</A> =
<A=20
title=3DU-Boot=BC=F2=BD=E9=20
href=3D"http://www.hzlitai.com.cn/article/ARM7-artilcle/system/2006101372=
.html">=CF=C2=D2=BB=C6=AA:U-Boot=BC=F2=BD=E9</A>=20
</DIV><!--=CF=C2=D2=BB=C6=AA-->
<TABLE style=3D"BORDER-TOP: #000000 1px solid" cellSpacing=3D0 =
cellPadding=3D0=20
width=3D800 align=3Dcenter bgColor=3D#ffffff border=3D0>
<TBODY>
<TR>
<TD vAlign=3Dtop align=3Dleft width=3D400 height=3D124>
<TABLE style=3D"BORDER-BOTTOM: #666666 1px solid" cellSpacing=3D0=20
cellPadding=3D0 width=3D400 border=3D0>
<TBODY>
<TR>
<TD style=3D"BACKGROUND: #898888; HEIGHT: 28px" width=3D400=20
height=3D21> <FONT class=3Dmenufont>=A1=F6=20
=CF=E0=B9=D8=CE=C4=D5=C2</FONT></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D400>
<TBODY>
<TR>
<TD height=3D8></TD></TR>
<TR>
<TD style=3D"BORDER-BOTTOM: #cccccc 1px dotted" vAlign=3Dtop=20
=
align=3Dleft> -=CE=DE=CF=E0=B9=D8=CE=C4=D5=C2=
</TD></TR>
<TR>
<TD height=3D6></TD></TR></TBODY></TABLE></TD>
<TD vAlign=3Dtop align=3Dleft width=3D400>
<TABLE style=3D"BORDER-BOTTOM: #666666 1px solid" cellSpacing=3D0=20
cellPadding=3D0 width=3D"100%" border=3D0>
<TBODY>
<TR>
<TD style=3D"BACKGROUND: #898888; HEIGHT: 28px" width=3D400=20
height=3D21> <FONT class=3Dmenufont>=A1=F6=20
=CF=E0=B9=D8=B2=FA=C6=B7</FONT></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%">
<TBODY>
<TR>
<TD height=3D8></TD></TR>
<TR>
<TD style=3D"BORDER-BOTTOM: #cccccc 1px dotted" vAlign=3Dtop=20
=
align=3Dleft> -=CE=DE=CF=E0=B9=D8=B2=FA=C6=B7=
</TD></TR>
<TR>
<TD height=3D6></TD></TR></TBODY></TABLE><!-- end =
--></TD></TR></TBODY></TABLE>
<DIV id=3Dcenter>
<DIV id=3Dcenter style=3D"CLEAR: both">
<DIV id=3Dfooter>
<DIV id=3Dcopyright>
<DIV class=3DCOPY1 style=3D"TEXT-ALIGN: =
center">=CE=D2=C3=C7=CC=E1=B9=A9<A title=3DARM=BF=AA=B7=A2=B0=E5=20
href=3D"http://www.hzlitai.com.cn/" =
target=3D_blank>ARM=BF=AA=B7=A2=B0=E5</A>=BC=B0=C5=E4=CC=D7<A =
title=3D=D2=BA=BE=A7=C4=A3=BF=E9=20
href=3D"http://www.hzlitai.com.cn/product/TST/TST.html">=D2=BA=BE=A7=C4=A3=
=BF=E9</A> | <A title=3D=B9=D8=D3=DA=CE=D2=C3=C7=20
href=3D"http://www.hzlitai.com.cn/about.html" =
target=3D_blank>=B9=D8=D3=DA=CE=D2=C3=C7</A>|<A =
title=3D=CD=F8=D5=BE=B5=D8=CD=BC=20
href=3D"http://www.hzlitai.com.cn/map.html" =
target=3D_blank>=CD=F8=D5=BE=B5=D8=CD=BC</A>|<A title=3DARM=C2=DB=CC=B3=20
href=3D"http://www.hzlitai.com.cn/bbs" =
target=3D_blank>ARM=C2=DB=CC=B3</A>|<A title=3D=D3=D1=C7=E9=C1=B4=BD=D3=20
href=3D"http://www.hzlitai.com.cn/lytlink/linkall.asp"=20
target=3D_blank>=D3=D1=C7=E9=C1=B4=BD=D3</A></DIV>=B0=E6=C8=A8=CB=F9=D3=D0=
-=BA=BC=D6=DD=C1=A2=D3=EE=CC=A9=B5=E7=D7=D3=D3=D0=CF=DE=B9=AB=CB=BE
<SCRIPT language=3DJavaScript=20
src=3D"http://s90.cnzz.com/stat.php?id=3D329685&web_id=3D329685&s=
how=3Dpic1"=20
charset=3Dgb2312></SCRIPT>
</DIV></DIV></DIV>
<SCRIPT language=3Djavascript =
src=3D"http://www.hzlitai.com.cn/blog.Js"></SCRIPT>
</DIV></BODY></HTML>
------=_NextPart_000_0074_01C8FEF4.54560CE0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.hzlitai.com.cn/images/logo5.gif
R0lGODlhtAAyAPcAAP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/MM//MAP+Z//+ZzP+Z
mf+ZZv+ZM/+ZAP9m//9mzP9mmf9mZv9mM/9mAP8z//8zzP8zmf8zZv8zM/8zAP8A//8AzP8Amf8A
Zv8AM/8AAMz//8z/zMz/mcz/Zsz/M8z/AMzM/8zMzMzMmczMZszMM8zMAMyZ/8yZzMyZmcyZZsyZ
M8yZAMxm/8xmzMxmmcxmZsxmM8xmAMwz/8wzzMwzmcwzZswzM8wzAMwA/8wAzMwAmcwAZswAM8wA
AJn//5n/zJn/mZn/Zpn/M5n/AJnM/5nMzJnMmZnMZpnMM5nMAJmZ/5mZzJmZmZmZZpmZM5mZAJlm
/5lmzJlmmZlmZplmM5lmAJkz/5kzzJkzmZkzZpkzM5kzAJkA/5kAzJkAmZkAZpkAM5kAAGb//2b/
zGb/mWb/Zmb/M2b/AGbM/2bMzGbMmWbMZmbMM2bMAGaZ/2aZzGaZmWaZZmaZM2aZAGZm/2ZmzGZm
mWZmZmZmM2ZmAGYz/2YzzGYzmWYzZmYzM2YzAGYA/2YAzGYAmWYAZmYAM2YAADP//zP/zDP/mTP/
ZjP/MzP/ADPM/zPMzDPMmTPMZjPMMzPMADOZ/zOZzDOZmTOZZjOZMzOZADNm/zNmzDNmmTNmZjNm
MzNmADMz/zMzzDMzmTMzZjMzMzMzADMA/zMAzDMAmTMAZjMAMzMAAAD//wD/zAD/mQD/ZgD/MwD/
AADM/wDMzADMmQDMZgDMMwDMAACZ/wCZzACZmQCZZgCZMwCZAABm/wBmzABmmQBmZgBmMwBmAAAz
/wAzzAAzmQAzZgAzMwAzAAAA/wAAzAAAmQAAZgAAMwAAAP///f/+//7//xAmWBAmV+/s9fr6/SIr
cNnb6jhBeXN5moKHo66yxvP0+VBchsTK3t/i7JKasBEmWp+szbzD1dDW5SA0Y+Xp8uzv9fj5+/Hz
9urr7P3//tXW1f7//Obn5P7++/Hx7uLi393d2/n5+Pb19P7+/v///yH5BAEAAP8ALAAAAAC0ADIA
AAj/AAEIHChQG7aD/gRiE5gNwEKCDg9KhEhxYMKKDrNlw6ZN4cKG9h5WbLhRW0N6D+0NzNbxYEaT
GQEYlAmg4UCOBrElFGlToD+NE0VS7EjPXkNsPSEC3bhQJcanCmtqjPr0IkOKViuGNFnSYceEWSHq
XIhS4UWgSGn2/JhUpTZ79Dpq3PizoMiONYkCOPuUJV6nFVF+hQm18F56/eTpq7ei8Yp69/Ll87Z3
ZdKLYQlq1CbX5lF7eB36JAiaYdqyEQn6U7mZHj3TDTvTlClXIOifDVfvTVt7JNmaoivijT2z8EfR
/pD207eCXLpx0KNDT5duxb1+IW0bJhiXc0LOSBfu/0w62qjU1VsHcv2I9Gg2q7FvIvUX2qlLqQfB
402eFqPK1wVhpBMA2SW3HUX97EOOFeOIA4g5EEZoDiCAiCPOOOSskM9uFhn2nnZLlXZVh1Fhk15o
MrGmnWivTXURRw+Bt9FRahFn23wMaZOZfOwJpZRC5pEnYFoJktPgg+EkmeQqSiYJYYXjpFMPP7kd
SB9/BrLjnDjtOORUWD+1tFE77KxDHTtu0QgXcNjEJVA76bAjJzp56TiXWBzVhI6cctbzkI+WVYYi
RXHhox6gFIXUUD7sWCEOhEqu8s2klFbKJITiWEGOPmBtt1FeALDDDTfqbLMNOe2RyJlCQNEzKjfb
cP+TDj0sHYeUfQLh4086o8a6jkkvLtQeWyXx+qo5bwEX2DgSNuvsOF/FVNhX+jCIZDiVZqvtN5dW
mM4+lB1oEkfZoANrqdukM6h69fDpLqyjqmOOu3zCkw09zprjTqmjhpPvOEX5ZaI2hqYTqzrcmPMd
ogKZ0yu6pkYssTm0ckQrRJ2Ct1c96Tya5LYgV6qkOeJ8ayjBPN17EHUsswxrxOG0zPI6C5kT68u9
4oywqTmzw1Gs20AMtMSv8mzOe9mQSa84N6sTDr1ykpunzRG/qg7CpBpt0L3KjmbgQPjU46g5H4ds
9qROZlqPNzOyCtpCOPd6M9BXv6w1Ng7zHDfWduP/7DMAOB9cdcRXm1rq0Q45/OriWPN9MzdxgZSN
w6VW/njj25ijaFMUuZRQNvp0TDbIEwKCbcjhUDjOgyVz+pOwD220s92NZ204vAlzRPXtEvfOs6lo
ZiP074EvHivieN8+fNOXtweTOYVnjXDhVR/9aUVfI8WP6KdrK8473XQjTvfaAsIO290wW/I8MLJq
28uWy1384ohDT2q8O/M7OLzsaJROs/eLlb/ytY6KKU5+RAMavNRRExOxJG8JvB+/EmaTzAgFG/0w
0ui2ZQ5weMMk4gtZOjaiEnSwjhz9yAmBSAgA3smPVNOb2/EaYj+5EW16OCwVOwziKrvdrmjGU4eh
/2goPblhLWi944Y9QMMVmxwnae5gnDrUpaPwEORPNamW6chXKXH0JxvrwNbpnDQOcBAIRqYDxDjq
8TmQLEQbCTzi4nR2uIblTBxQc1c4ita/t0QPXkh83P1G1RUInkuGEpRYjmJ0kPfYox3u4NnOxNER
k6hEKHZCSj7I4bFKqaNS5kDHvTRShW+IcULkOAdw3PIOc6yCZFaQx1X+JDOHAaKW3Lhly9aROB/O
7YV1G1X/alI0Bc4RXfHCjTZsdr84Me1mT0vHHy9ZSYLgY5mDxJo4LjYaiFiyIftgFhe1lY5yYMMb
5xiHv0oGjndoAx3UUWU2+lGFU45jBQQqCH2EBf+PdIQjVoD4VJsUFw48OsRQyauc7YZ2RMOpw2fS
9OXjiAZIWW2khtzwVzjQpQ53kG2iOaLRvRJywKxtkylMIcxNNpLBTpotdVUQRxXGUYXzDSQe4zCl
GqvwILRNKB0bqgg2DBYvbszGHtA7mDnsMrlfDtKHxttG/wxGt+IND5AjBADl/ig4vQWNVCYCgJlk
Rp1/yi1mMtsh
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -