From 1aa5ada734a47c2d46a66fd0d6cb5dcb7e37e928 Mon Sep 17 00:00:00 2001 From: Vyacheslav Aksenov Date: Wed, 1 Apr 2026 22:18:27 +0300 Subject: [PATCH] added leds light --- Debug/SubGHz_Phy/App/app_subghz_phy.o | Bin 62760 -> 62760 bytes Debug/SubGHz_Phy/App/subghz_phy_app.cyclo | 76 +- Debug/SubGHz_Phy/App/subghz_phy_app.d | 5 +- Debug/SubGHz_Phy/App/subghz_phy_app.o | Bin 1069768 -> 1072024 bytes Debug/SubGHz_Phy/App/subghz_phy_app.su | 78 +- Debug/suffix.elf | Bin 1473176 -> 1473652 bytes Debug/suffix.list | 12571 ++++++++++---------- Debug/suffix.map | 1000 +- SubGHz_Phy/App/subghz_phy_app.c | 89 +- 9 files changed, 6914 insertions(+), 6905 deletions(-) diff --git a/Debug/SubGHz_Phy/App/app_subghz_phy.o b/Debug/SubGHz_Phy/App/app_subghz_phy.o index 2fe3030f9d04257e9f362f219014d2478447ed88..9aab928acfee52c519e8b6cdbbc535f45d81604c 100644 GIT binary patch delta 23 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%0ANw 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ⅆEzbFtnS0mG(tF{0&1W-RIv? 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 m1YTbbq@vi8P;2Z1eHU-5s-j!(~WKVF-pm@zB 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 diff --git a/Debug/SubGHz_Phy/App/subghz_phy_app.su b/Debug/SubGHz_Phy/App/subghz_phy_app.su index 8ed3db8..cbbc81d 100644 --- a/Debug/SubGHz_Phy/App/subghz_phy_app.su +++ b/Debug/SubGHz_Phy/App/subghz_phy_app.su @@ -1,38 +1,40 @@ -../SubGHz_Phy/App/subghz_phy_app.c:125:6:SubghzApp_Init 8 static -../SubGHz_Phy/App/subghz_phy_app.c:151:6:SubghzApp_Process 8 static -../SubGHz_Phy/App/subghz_phy_app.c:160:13:App_ProcessRadioEvents 8 static -../SubGHz_Phy/App/subghz_phy_app.c:211:13:App_ProcessUartPacketizer 16 static -../SubGHz_Phy/App/subghz_phy_app.c:228:13:App_ProcessEscape 16 static -../SubGHz_Phy/App/subghz_phy_app.c:257:13:App_StartNextTxIfPossible 16 static -../SubGHz_Phy/App/subghz_phy_app.c:269:13:App_ApplyConfig 8 static -../SubGHz_Phy/App/subghz_phy_app.c:280:13:App_RadioApplyConfig 8 static -../SubGHz_Phy/App/subghz_phy_app.c:286:13:App_RadioConfigureRx 72 static -../SubGHz_Phy/App/subghz_phy_app.c:316:13:App_RadioConfigureTx 48 static -../SubGHz_Phy/App/subghz_phy_app.c:342:13:App_RadioEnterRx 8 static -../SubGHz_Phy/App/subghz_phy_app.c:348:13:App_EnterConfigMode 8 static -../SubGHz_Phy/App/subghz_phy_app.c:364:13:App_ExitConfigMode 8 static -../SubGHz_Phy/App/subghz_phy_app.c:373:13:App_ResetDataPath 4 static -../SubGHz_Phy/App/subghz_phy_app.c:383:13:App_DataModeFeedByte 16 static -../SubGHz_Phy/App/subghz_phy_app.c:403:13:App_DataModeFlushBuilder 8 static -../SubGHz_Phy/App/subghz_phy_app.c:417:16:App_QueuePush 16 static -../SubGHz_Phy/App/subghz_phy_app.c:431:13:App_QueuePop 4 static -../SubGHz_Phy/App/subghz_phy_app.c:442:13:UartRxByteCallback 24 static -../SubGHz_Phy/App/subghz_phy_app.c:505:13:App_ConfigFeedByte 16 static -../SubGHz_Phy/App/subghz_phy_app.c:537:13:App_ConfigExecuteLine 32 static -../SubGHz_Phy/App/subghz_phy_app.c:699:13:App_PrintConfigPrompt 8 static -../SubGHz_Phy/App/subghz_phy_app.c:707:13:App_PrintHelp 8 static -../SubGHz_Phy/App/subghz_phy_app.c:726:13:App_PrintStatus 8 static -../SubGHz_Phy/App/subghz_phy_app.c:748:13:App_Printf 208 static -../SubGHz_Phy/App/subghz_phy_app.c:771:13:App_Write 16 static -../SubGHz_Phy/App/subghz_phy_app.c:781:13:App_ReconfigureUart 16 static -../SubGHz_Phy/App/subghz_phy_app.c:807:16:App_ParseHexSyncWord 40 static -../SubGHz_Phy/App/subghz_phy_app.c:855:14:App_SkipSpaces 16 static -../SubGHz_Phy/App/subghz_phy_app.c:864:13:App_LedTxPulse 8 static -../SubGHz_Phy/App/subghz_phy_app.c:871:13:App_LedRxPulse 8 static -../SubGHz_Phy/App/subghz_phy_app.c:878:13:App_LedErrPulse 8 static -../SubGHz_Phy/App/subghz_phy_app.c:885:13:App_ProcessLeds 16 static -../SubGHz_Phy/App/subghz_phy_app.c:909:13:OnTxDone 4 static -../SubGHz_Phy/App/subghz_phy_app.c:914:13:OnRxDone 24 static -../SubGHz_Phy/App/subghz_phy_app.c:929:13:OnTxTimeout 4 static -../SubGHz_Phy/App/subghz_phy_app.c:934:13:OnRxTimeout 4 static -../SubGHz_Phy/App/subghz_phy_app.c:939:13:OnRxError 4 static +../SubGHz_Phy/App/subghz_phy_app.c:125:6:SubghzApp_Init 16 static +../SubGHz_Phy/App/subghz_phy_app.c:159:6:SubghzApp_Process 8 static +../SubGHz_Phy/App/subghz_phy_app.c:167:13:App_ProcessRadioEvents 8 static +../SubGHz_Phy/App/subghz_phy_app.c:218:13:App_ProcessUartPacketizer 16 static +../SubGHz_Phy/App/subghz_phy_app.c:235:13:App_ProcessEscape 16 static +../SubGHz_Phy/App/subghz_phy_app.c:264:13:App_StartNextTxIfPossible 16 static +../SubGHz_Phy/App/subghz_phy_app.c:276:13:App_ApplyConfig 8 static +../SubGHz_Phy/App/subghz_phy_app.c:287:13:App_RadioApplyConfig 8 static +../SubGHz_Phy/App/subghz_phy_app.c:293:13:App_RadioConfigureRx 72 static +../SubGHz_Phy/App/subghz_phy_app.c:323:13:App_RadioConfigureTx 48 static +../SubGHz_Phy/App/subghz_phy_app.c:349:13:App_RadioEnterRx 8 static +../SubGHz_Phy/App/subghz_phy_app.c:355:13:App_EnterConfigMode 8 static +../SubGHz_Phy/App/subghz_phy_app.c:371:13:App_ExitConfigMode 8 static +../SubGHz_Phy/App/subghz_phy_app.c:380:13:App_ResetDataPath 4 static +../SubGHz_Phy/App/subghz_phy_app.c:390:13:App_DataModeFeedByte 16 static +../SubGHz_Phy/App/subghz_phy_app.c:410:13:App_DataModeFlushBuilder 8 static +../SubGHz_Phy/App/subghz_phy_app.c:424:16:App_QueuePush 16 static +../SubGHz_Phy/App/subghz_phy_app.c:438:13:App_QueuePop 4 static +../SubGHz_Phy/App/subghz_phy_app.c:449:13:UartRxByteCallback 24 static +../SubGHz_Phy/App/subghz_phy_app.c:512:13:App_ConfigFeedByte 16 static +../SubGHz_Phy/App/subghz_phy_app.c:544:13:App_ConfigExecuteLine 32 static +../SubGHz_Phy/App/subghz_phy_app.c:706:13:App_PrintConfigPrompt 8 static +../SubGHz_Phy/App/subghz_phy_app.c:714:13:App_PrintHelp 8 static +../SubGHz_Phy/App/subghz_phy_app.c:733:13:App_PrintStatus 8 static +../SubGHz_Phy/App/subghz_phy_app.c:755:13:App_Printf 208 static +../SubGHz_Phy/App/subghz_phy_app.c:778:13:App_Write 16 static +../SubGHz_Phy/App/subghz_phy_app.c:788:13:App_ReconfigureUart 16 static +../SubGHz_Phy/App/subghz_phy_app.c:814:16:App_ParseHexSyncWord 40 static +../SubGHz_Phy/App/subghz_phy_app.c:862:14:App_SkipSpaces 16 static +../SubGHz_Phy/App/subghz_phy_app.c:870:13:App_LedTxPulse 8 static +../SubGHz_Phy/App/subghz_phy_app.c:878:13:App_LedRxPulse 8 static +../SubGHz_Phy/App/subghz_phy_app.c:886:13:App_LedErrPulse 8 static +../SubGHz_Phy/App/subghz_phy_app.c:893:13:OnTxDone 4 static +../SubGHz_Phy/App/subghz_phy_app.c:898:13:App_LedTxOff 16 static +../SubGHz_Phy/App/subghz_phy_app.c:904:13:App_LedRxOff 16 static +../SubGHz_Phy/App/subghz_phy_app.c:910:13:App_LedErrOff 16 static +../SubGHz_Phy/App/subghz_phy_app.c:917:13:OnRxDone 24 static +../SubGHz_Phy/App/subghz_phy_app.c:932:13:OnTxTimeout 4 static +../SubGHz_Phy/App/subghz_phy_app.c:937:13:OnRxTimeout 4 static +../SubGHz_Phy/App/subghz_phy_app.c:942:13:OnRxError 4 static diff --git a/Debug/suffix.elf b/Debug/suffix.elf index 4d80b9019022cbc0d4aac9432bb92af8c0f5eda8..8702d4c258c97107c54980a86e25c30a52d9bef2 100755 GIT binary patch delta 35606 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 delta 35601 zcmb@vcYG987e73A?#|9^cGE~Ug@k0&AV>+l_ZoUJbdW^41_hzx?df({4ZY*mRYq#sd)QJWJTspPkv;@J2%xp zWX1b8eHBmMWEm{rtN6qUpSh{*DBb=MjCjSX7^Rz)^}dP|R7W%l_i!gaw zS{;>jEngG3tg_?f%d_s~)jD3kdHLq8n?Ir?0?1|n`43p-5LjBCQDa99<_n$foyT4e z#rDZk p%eKIK++Gn8V|4J4$rP@cw_Bh3P-T5X4==mL8ipQT{+-_Zh9_UE7#y1XOfuURTJ+2`{rvSR zphSiEvk&X9$oqZek3XBp^s3i67|qMqt*FLXQs~1~9o0XtmdC6PFg7Aoe@!wQ9O|*A zJ!=|TvZibF=SaB#l}SabRk%Xmt+}7Q9~$|5if7BUey8d~(YDY-&o_@2*Xo?gx-Iua z=)>oWa?T>|6;%lwS*#dWab5>|~?`R{|G7_u)RNyx$9nD(hH2;l+D7TT*`H<#~*K zR6gj{pH%i#sQtRmY+(6EbzoxLPzow}by~}rPFK6t*(2N}qv4ZleJMLvjam=pH zj6ENEZFg5TH}uEuM>Cqpy2-KXCOcoPD7)4Cp3Hn+vF1t!(9Y1R_iB0xF!|yeZ%tbB~my&-LxoQ?l-t&|<;Yy?>(Xf2$o_>rKguL&+lK$)!RC&Yui${yD#3qu$7y~EN&>-G=Oi*K}m{G%byfkEtp zP|<-rwmwvLpjXNx=qsrxqbIggj9D;!141(Wqw=cl!Nh^jUrKwKQ1wSco5N%8rFv9;}&cTvLny&PF&Xk+Uu(K$Z;;J#cU(yC;-# zs16$v>V|8J(9A>2+2T;_XBol4RHF4*#kt!fKuSKV=y#2Gd8mT%FW*#ZsRt85xp+09 zM`HJ?h5jB1-JdCp!*yt3l^*`?CkkV5ty<*okup9ie_2cT3FD@sMd zwTqXJUFTh*y2lkpH0n3Cug97|U_q!0A7#7>N%S-js?@pnNq>H_oK1tfJydX!_yqY(r?r;Vd>k^xfe>Y-*_G z=Z!nGh59Q{(GFn_&U$|-Ms(@hX ze%_)QiOj-D){w=e2yKxsL!Kj#Ya~$`T6ttt9lE1rNe$&-8NzHNWm=v9i*s?_cg2l@ z{V-JLXbS5Y>UK2UL$aj1U1-YDIJPSE@X=u8nk&kVRyrYM*Ns+Qc7mhd8 z2rUcMInhwfyIOwt36*(d!9c~F(8MpxV=3{aI8Pz*GdPn%^-pF6523{=wcH0+cAGW+ zkIM%nQV%H=+O@AwFPF5PmV}UK>urfn*FHWSlC<>}?bhWzH{Lt_xTL*!o3`Ql*3*wl z+OwvnLkrOcFJGtY$&72Soz^lR0b8xO?<$#6?a=+>wT2NGwP|R{yc)WAvWdSyveLkE z-)7AZwf(BOzs~JQ#%<1#(2}p3`t{p!B5rfmhmIr8sVkIF^4}6#7^?Agp8s9RArm~e zIoS@X=2U|`kzjR-)>+wwF>6@!>oH~p0t-yH^=XIQ} z>x$vS8IO~iL;ztUoWVmChEme3c`Mxa#5oveA?`my+;WoKGC&$_9ix zaUR6kE|M$95T3zVf%7^}-wnk`#hDu#@J)ult~5N;ky%!8H1y~wzY_Z7n|s|$YJc&%7%XCM(97M#x_3(u`4(OH<1aP zr8qa>JciSCOEH?^9FKD?&NDdU6=vk)oD=e&z7?c~x(#R#&W~_X5gkK#7Uvb5KE@18 z@kTwIWK<`F1vsh6mms_Y^79eaMz{ju73kZ5@H)be5Ymuy79kBeE|nPu4M7N_H#IA%q-(?K%`B!}YmCH+I17ZjNxcta9B_k&P+T~~rs7fuOJOGLp zluoxP)352k@BL*<6kl`YU%WgBMPMGYFdFnYT%4`DqjhZdTw>mie^a8j+vI8!K2CgPm>zs6|< z`PR-jMHI(CocDwO*GSC}p^c101M(l2H~uxNFb&N>sTFmw8m685#viV#)H1%rdJu+J zg~C&RC13?owIs=sO8lqPlo&{T{8x;Wijh(sqYg&@Q%qX-_Fsk+t1LjuHRYa4fpSB+ zA_JR+GJZ&OW#cZi^ZUVCC)@-=)qW^vuF#<$&a<-6t{-c9=iZ{4;Ri2XULLyiV=ZsB zn>L;ss&zIcSaOqL#n9KPtNLBLbX2ZzSuuZHehhJwA;)M2|P1k&AmocHA&W^;govtyVSAH7hA?i}J)|hht&x077 zRX*{T57l7GH;U2l|KqvpYsIMfFS7qe`!}6C5TEG5N*$_^725h+XLeWlt>2n6wz#}` z#a717hW@yalN=9&lW@kP!KWh3#Tmev9jgEP0%nA^{+^=M1MV3*{`zJ(3bdsl{GRVU0p{uBPMK>*@}bT@6KDYhwyfl+b`{x01(Th42z)dSypI zwuRdYLlgh{3lS$=Zz->-pQH~wJBp-VT;v*hycZ|W?v0FR^gIXHCnRylj( zsdcO)Tl~}ob}RXb7(BM--@43@%tGt_`n$LfdsH@#v4&y_XOFXA1askm^MuH9v4^W9 zLuES7ESz}SQ@+0te%r;;*g(&pict;c@=Jd||BaS%Suwgo_J~8iHE0x<=(dip{tVZ3 zvo4I)7c+D=NV@}xwiJhS);ap^YaLV7L$${9jah}ww$Bge7_3heYZRW5z!rPTHsr>5 zTGPX~atmiGwA;}lHo)S1J)@PtCY-6rZ`qnw;o<YYNxyo!HDyS@lF+u zpCfP$U^{>>{LWNXqDN5+Nm-#PO1o5z&k8rckGVPfJlyU9mY?OO>h=!~Ken1phZTZ{ z*~17Hh1p29IQ&zXB_|T~Q}!By^`EkV2;2wR1q4?Pvd0iCIK)On^xPqaGCd+*I?6_Y z>ivS{B4}g=Bh28DFIW&F?qjSUc!OmSe)Skzpg}={uh}*i$mhRhA0l|?JJuM%h3{BC zm@Uq*BQPW!bDb?kpAj$KAhP()44U4QLZvs^{wfga9;*(FMz|)R`hD!naJaU*gCfnW zt9AkT-MXru68gM>+LY}QzJ}^h1mha2wLx6kP<;qNQX{nyM0+(-=jhOIprv|L2YF3L zL|Gg@-cjuyoxXUgPx;gB-=QmtS~k;lV5CpE?2g@y!dJ_RT`NV0JJr_gfGE9F?G{6_ z&pBkp@jKNKk~+#k4R=LTb2^ zRoWnG3{#s)D*M`|#vcez9;W&t*^2O-@#^8OapaiLx_Ny{9aoa@D2m3niMuzb??HF< zjp{Ze_1#8wI!8Eov)YEI+*9CFw0<$WkTXTohXD+bz@=>tZ``78PhtbZlMkuMjOk+0 zXX>MDkMJK>tFykM)nT<6n-ZRJSe<|>7T+9GC$L$f+i~?>Y2y=mWD29=Dluk-6Hlmb za#j{T@Rj-)V?T%?->5IMAHwP>^=pEsPpf+YU;0)Z#bo3=ctmfsX%xNT4_7^-c8rG9 zU4N)=u!3;pMYW#_>5+e`t8}!uTQ}5(NWbAtbr6C_Z^A0S*mF~*rWJWheaOw;4wq?M zXQ;2`ZvG@Y5U#EB2URvutoQI;vIKOi1XL;k-6{cfbNJB+&b(}jSmNj7*xc|XKW`@mIkuOy~Q6Y6kdVr1@ZgpTy#fmt(-yykcx7&yCxejnY+^>-T<&a!1=q z9;MnVVofGbWKm*kCQq9X#f)1WRYl8q#H*-HlZK-*qEzi-z)-YNI!MivCrgt4?0+K^ zZRk57^-6k>NG|P*-=RD2qFYh>BtIod`fICHCCbpc8yW(Acpp`%<ycr)e`=d-v!=;?N6f5r6xi%mv-DX!ocui~0(BA4Q8G72!r_(U-MF4ugv1vj3K z9TDXb7AK=9z8OUjTENuRBxJZ2v0tPR>3!4^@^tJ1wAe(@yK)?&EMe+i@lZBTfi0`D zc>@HWW%IkEJ>5D%_#4xR7?0?f!)xBz4* z^w)FE;BRxXvwwZXHItiJ18ShSW|_zZ)KGEFHj&{G2arZ{Pyc?<`hZDHGD~KziBdh? zDAPd`1w8%9#8MMwdqnN(JT=Z2IUZI##JPdQ-5=o+A%;~)_M*hh>U>sITwcN;7j;S$ zv=SY@QJufZScKS+%g3;2kx-K_V$tE%HF<)X644O7SEY;M{u0BGI~TX^K5*jt#GzVz zZgzBPM9-WEI60{cNA!ysPX1j+4LD+e1TMB&Osmb?wTx&BF*S?yRX|4lhAvxhQQV{; zq7Sk6OWcX@NWyecqQbw`<~LN>b}o-Ujo_hr{0xHe^?6+cqCU?+u(dv)j+(36fWM32 z*9Lq8g6A6Yj?5SSwjpPndBSI!pur)l)td3NjEF6Mq_A1$Z5?hS_7RRmn^D}`aT_Cs zH{-R{h%TaSbDkugZ^oM<>WOB&hd+kw`d`9rae>E=ASdc+(eQ+%t$iix+Fh-Qh- z!)=TRwBR*hP`(+IwBXf{fyY|#WDs8l%8TflgebC3%yg51V`f6{Fk;X}agT_@r6)1O z#TL9hOA$?4qQs-b;FkO@HKMiH*OI3PqXV(N50X*$4SM^O*eFZ}h|9k30}vgt1@|si zbp$|+fn`?}t6F17O6Cz&(LugqDR&}dp)Fp8RrAull2$xslETuwl%f!D_ zw9QDIrSp0eJ%(j$rRcrx1T9O(P#8_+EL#G`R<{Jmk$F_v|9Sybr)&ikgN^SGRKqMK zMeBpoWVw7Y)ag?O;{J|=d(jXzPOd`z`XEqhB~oTJPLJvOaAc0vPCf$bG)~W8`g)S7 zV^PTSr*|P!>sl1@0qReqW>{YGk)Vu5?mvAc3DvWN$Qh`62Y^yP`4=fe&-nUrR1Ry9 zv`13tXJXO#8VV62`U6z-9j(O4JE&JflVzPO3c3CCwp7ra zEeiQU^d?lSU9H5)gQ#Dl#PhAh$%&}HN1D4?r4b|-qn=DcJ(8&jX`I}V`eG`?o>j6X zh1@d<`_ZVsk~YKSk%~SW9gX#l{8*YyentHkbQadfN{YOV`f|!vKPxG6%IF=al>1v0 zxMzX^ebrEq?zBkcsnIu5^DM9^?0sRc68~D9AG1)1gy^EUJ9xm_ORP7D6;#S?o;fPV4kz9^8SRt5v(it#-ab%~R5UW=|j2Gt(>s)HI}T4#INqicX(~D)U!i+N-cGKTWJ} z&l7{OhtaGOUUSpBXFNqcfx=fO(jAE@?mfUc#EHFu(o0wu{S>HA{)=SnIJA+(T5gK= zCh?DuCV4qYQ*-PaDA~kp$^Y2q2c>`#TZCScnC?kOnf^*Vx>3)f>#H(uJ*%9{=@T@?3s5R9$0)vF|TO-{spbz)`VMrm@Z#H&h^7@l6^wU5Go4NY!CGEUoX5CQA@#8G1>gWYqB zgp-xj@#rv1cxh!CwNV5!_{q=V;go5l1W*=}CeKu6ayhW7Wz&_&*{G{Y{ACC=l0uO+ zQ1|2b^h!cCbh|MARCbCW#n` zos(jJLM*QT6k^nubzU|+aq4`KAa^Bdio2g2bHWTO z9JZn;6PXF3VI-?H&GH=WEt)z`Nl~rho$j5{uz`|F54B`QNuXX2ANqwiNGlPwYSW>%Bdx?y<3Y=%CVcI`io_|f19;1%l4kQBUm!L&4T%+jtO39+{WYzLM{7`Y|q=7 zZ7mwZyEbp8lIla3SkLAlwN}!i8b?rIYZz&&*oXHClGrkf>KE0!hShOa?;6(1uHMMY zBZ599#5N#OI~l3U6?DcRs|~_@NeDsA-6@XAEl|~LiDg#+75Q1nWsJ|-JF_N@mYv0H22ub)6>3XNnQra;8 zov~EN1xl4z$fU9BdllnlDdWqA%+y(M@A41{4)cv z8kA4-ovDR*G-VYQ|8&g2I{0ed)7|)|k+k%V@llN!{9AFd8_$ZOm36$g2ec&c%fm!u zciy#jCk)l&A;ea^4!U>L*l`Ne?x1@N3BD4RgvoD9{gs_FG;U2iUbu^Ed+>^z~z?) zM8%gv+)&`$NbALmRd1nK+>58NBJo-;o)bYcT#FqT_j-yGy?E`|d8Dm%YCV-|cvDb2 zC=z?~nlaaj+}{5o1kp{k-J&n3>baxh{@y&L@oC})s#bN$oN5aQW=JE@_Z2r8;9dlc zNoR=@8%wsnE{>+>mYjf!*g2|QQVKGvPNPNg2cSL%``pK8*mIu zf^(&*D(c?Fv&E@?d`A2_SOr&F5vD8?JOSqc_POgZkE3iP=pcr~Kb zEM$xXi^+huVn2rv9R)bqiUJg*`mk7hCohW0Mx;VXJq)ThByQZv>#%yFRspZtw1uUA zmDFEs=`XL;A9?*DuQGoRip|u~9|=RpoC4@LC|-q*W+%WT8y}H6e3p)9Ds@DyME*-5 zp`gTIUDW+Ey~^yh;(7ru3JkCcx`kEHQ`1%D`(`S}1NZKSHN_=*cV)@q=>hy+R#&J4 zc{Bes#At@sys{xFI+e3~mgqB(w~i)O?I?@I7m8;G@)Wh=xY#m~H5y+LmrG9{9Ts0*y)W%~0?vTKzwjT#j zOM)1+If2>|#H#~Htd0ap>IedLB}i3|iF*h03vmyOK}Eh13HKnH4W$`o@8H zHJ`B#d#O&#Mzc?m_%Y@?Nmi9jXCI96DaUPyjzsj7KgH)mcy541ciB8sbhiyll;{~E zbttc&NBW;$9y9t9M0|+o?-BqJc@GYX2&gHlu&mY_GPC5 zd)TlibBz%LhViVy2cQ}6iXzAWI`-jYD~>|5Mu}#yJLn#B7Hb6sS+;@_mJh?TZCK1G zA2~Lh&JKx#!+3nkf03O8=3RmANyi+VY()d?!_-cTTd+B>14@%wBne>XV^bhs)rO-L z?-bYzi8?%F(|1^CKzv!Ie%KIVwa4l7|#8*NP>NrYLTVP_jYVj^`jMA$*e2tjo__) zKSB%pK-x1}%pSqp`FEkPXk4asB^~$IRh5(ClM(!tDz5RUrl_qTVhDs6*LYPdx(j~a z60z+r-j97NqDJyNn=FNb3N{Qqwr%#*4T@-qm{e6oXwDXg@8-3FA40!J zjgbC8OyX5;z~=KT>09i=fe_Y^FM#kP^HmatVdDE1DcMs&+)q&PC5t3VDo(cI43gx{ z5bsM?hl&GZ96u?Ax|py;iF_EA9AVMfM4%%VC#DsQnrstde!*g`m`dEMV$CS-ulqdm zxSHjd$6|;As?*$u{u$JP?C_XwN3#mROZEYv@*TV?HpBHzH2CoSE{wsN{ zB=1#|cZ_(wzzaHf+320Tndm=;kG^9B5}wXvi6NenFC)Jx1th1gY2j%0s5k}rgu|dt zaM%E^AL$x8mXBuD#E!8%Ii1RC7;9u_?a`?|Wd!q?byCcxip!AAS&O{%k$MKpB>Uq{ zgDmAfth$vX|4fvQE7pgT6Ch6!8+7X7UDW55vTh;Dbfv ztq9%pCRHu#tLQJ{<_9oQt;94Y05=nb6X4iiEbg1YQ=311+T`#W)8L&TR@+gYY*#y1mv z3YHtD-s#2*Naj@=mMGrNt?02jj-=~}wv%`^7P6x!@s_NOSUrhn)NAs+Sqp3`a%gv4qU2H;wH8RAxT`Agt_nqBziZCphW4Yhm);14@u(*q(7Q@EpwEZ z9-{tao*YZ%IgmBB3Q+ML5yL=c^TmwGym4X~RvevKlo_c6OM1GC*&ud7CWfNcXC1Ao z;O~l`C-a)=C(qc09Zfx)gsQQ&w$M`1poG_mx&9sYL`vJcb-d>fv7&^h;~mnr5?-}u5`-w{r)9R^1){bZ&$KE%WC0Zd`Szd~KKK)NbQIuZ zD{jbyV9f_zEMwe4WKQ8ZEdnrxR$FYvTlChFEPkq$DN_(Rb&g5&#UT3Vj6FR z(IkIhitIo#Z0iuV|#AFS0tO7yfPMgyiu3B@}FDJ+U9Fa<>8|M1Rfv6P{DJeEw| zcFuMOrhW)jIlNRX`ww1ZJ|f=!4^Is~0X9`=4IaJ5t0-#$sp@NT9~s3ape;&6LJVSutQHkBPiN zC9*?}c?-Jo#nhR+Hv3Vmn#t?2q2l07o?3VGFQ%1yRB2_dl}?r0R*uIA(VvRCP>rl7 zs?OqVSt~Jg7EkTdfv zcodbFEA~Qn_a;A?TGCWL1ijJ9=y)@u?ZBiWO*2zGVaaw?^@kyQTd_1p6}@M}!4W0y zosIYG*ToC7d3ItKRNplgK_yFv*$d(y6JLW_Z7P~%1@lllp~GV4FYqeAFhiu@$FtMV zowfaEE75_IM%}Iaz*UeEqM2^vE9I=r{(qHN9Y;x2lPy2vTKlG>05xY$g(sQ+$~nARIwjoHPIxM({4}%kQ;7T=pTl!87OD^M z{LUj$7jM0?u~dEs?le(;Y*X?01H4&_ z9AxEFE4u@|WW+%W6=Y5rJqyb)8jjSmN#1-&9g4a-ZV1`3XtHLBHgnOSHid`HCkylg;cA}P}Tw(C%A)8n?-1R}lcJ~}@> zizfT6l>Mg6ez9i0cWbFA)2$b9_PaX!#h(4f&wiO`zh$&vKh_o--7dd(TXnnWI*CId zq&$>s6JCe+n_lUhLs*Egr(n9v-|~EITcDBUp9N1r6Hqz;ry{idwzf~#_V+Fn{h%N? zGtXAA77+r7KnJb3ZO^6c1tmHyZRW#GNy`QMsEr#{$!loqsQ{lWr6V6_T{v5sNMv5- zAW)Tajih`vfYA_`Y6)N-lLxI(j-3#y;TqoH(U!LA{4epj3ph&=o!gCT}QxSH0?rJ0G6!4#QLNC^Igdw73w z#rj!xL8i+ds8j#jpz5;w>9X@NUG_a)_B>toJ6-lVrpr#pblK;0+2eHC-*nmAblKII zE_<3T`x(<^Hw)_2%XX@|>|{)*KDO4-Wf#+B2V*+*uZyZKyO%CImoB@OE;|;}Wxvv8 zuhM0g(q)IzWp`q_>`l7tOS_fWjLAvZe`a;>e>Numx{-Y}+K=bLc^XRhcNKFO0*=KhR|_;ChL8Cd(B-Ykw!p)u*d$?YeC1dNvw% zi89xzQ?_-fEnb)HT$in!Nm79>n>f?a!uw^rQU_BDFGYi)2CmEIZAFz$TbB)6m(5x? zAF5w-rnL!kZ!;?b=nD2H;Rxtx=Xx|Kbwk|9cGb+JR=yBPp^-0Bb=k(5E}OV6 z8@Rr0L4J-aoS&oJ+`_&Mcl}yhS<*dCpIXioxX1Me5xRKwfZh{hA0O?~@1yWDmZ1fH z8t+zkW+wM!X%Qt=xx#&_=DytDz|5MhC3GDSq43lk(J#>*&#FINTQYc(p#W=^B1D;(0icYyR_1n7F#2b{83g*^ha2BRy}x=fz81P4(0F zNRcwNndX1&eHT(}uJ@fp3e#HXhp{=qrJw!}WVcmmsrhr@wc^!U=}$dE^bZ%vsLR#X z`v2gn*vzW0YljJ8`RSZscG2Ia8y8o* ziXr{n^+qLgf3)U*rZ*y0%hwX4vT&1@>*5*RH2?SAB-N$g!n;5h&+4xEU&|xyQF=5s zWJ7zRW+bJ964665!dPbUh@Sd5$@2En)Pwy&arG8OquudM`e@#L8NiV}Ts%s1@#wx< zt!6br$kSZQ(TLz{NeWn%cb|-fy^uB3eXMO?{*{p;#bqlBUkZ{u39E^vk}+vo$>mskn4}^`YQrL~oZV9uu_WdHirq{St~@JYj_7nG!A@TSY%XhPW`tD4IG5 z@io^`B&un(`{L@}P4{|j>?+cXZrC}Xd6tn(L>N02G+zgzM}CDJCR$Vxb~k9zLx>)8 zyce$VH+vJ?pNsd{T0*_;*eRP>K%&V{kWEB&mRdu|U*IMr)N*g~ZYWo;n+kHZk?YCh=ht^>c z-FIA1GChj12}J8%s}HV2izu1l%gB@w*HA**U6FJ@vXJfzds04%p2waR?e3P?;-QV2 z6(rK=mxw)PA1NA}N$d$fQ}$;+L8jdAqg>8uMfVR>rR3*+NXY~jk$frJM-k?+6J*ST zER%>2v6U2OKD$KfA7=9?)CkMK#a5gV|eh4-m;9HW} z!`Rm8f+yJvq-7cVor33B42i5|k06>%pI*7$&Syh+c<|kBH_Q8(Qfoeht}TAV zt1zwQT)K9eNR+!{>Hb^(I0C6-fmkxiJ&qj}4#XGFDWfJ&8arX!$mz37#!Ra_ zUcr<2D7we3R}@{-b41_^w^x)5HoUd)xH)b5=;8@?6O-#ytlMWn?89eMU4>u z8*F4^m;V02#@+aSVe%VBqBxpuM2WA3+b^zW8> zlu(bjb4A5IcZ68AM%P8@9Jemc?ROjEw;@o_?ua{C%>7G$T72`k+a12?)oU_Qucq!2 z2YX?K@WU{pA-pfKbBs7KG8e01>%QA?qZ;nV4L6#IxsgUyd};Abu91K*2tFNd3}aqV zYlM+3?yYI~MBfocdaRWp1ky7XUnu4vpohwEsf#Xtm8(i&}RX&$(&I%@2!D z?=qUZY2nS!;5DvM=BCv*pC?`%Y2>?U4bGQ{KSmn4Zd!@+Wg?@{NOIG9oIfYp78>K+ zv?#~tYOfa>!`!qo=SM|k5oBn6&QFS3MMi@=Xq8T1LTXiDZ)+_=UQ?yr5w>l#hUb^W zf+8bbuH^YGRjeyATDfUG&qLyT5x$M5RXtxL((g7px@l?8*NgFY<4aOn-}AS{lDm!f zxy&O%DM4 zoLD~A$aB+U0Dnk)G8QS&!vGb&j2Lspz%% zaayKXM^z{YXmO~D)~d(OE2BCpya)H=i}`#Gu)K1-ddT3BR$@n5?t-aN3K;c2|9R&f!0DRDS~vzlnv( z%ItOYhcpFz|WkCZiT|(|?oEn!y|mS z{yWACYBD|B@E>4Cpa-?Y+qGecU$-0oW4U7KyT)foVB8Ml46@pDr|}8vBvN)6-B_s@ zL&3HM>vtJAJvbw9dU5)2M&gXZ8I3arXDrStIOD?Wcg3&lA2n`d@tDygr_LH#G-~>U z|A_AK{`%t4c>kOjlQCxMRFg9%?DqQ&Riq^PtBbyg{tnTV0y8E}pHM8y68%d>`ke`h z;f_iEcUU;Gs{e5oel5ixP{oIR6FeZZ>cDYYr>OG-xe95cFLR^J)L)5eI?)%*pbW17FD(qJ>yH`Dxi(Inh=>f}*lrcFbf zY2s9xe?YiHy1$EGJUPOj5MI&9zi;-_+x#xiN3$(IqiDa;pQuSkhrDHqSoelM1!cVd z4S$xpaF6)y4Syy|K6br7U6T$EDW`tESM*-*uc}_(EACnEudc3rUp$FWlb#P#t8{;u zx6%h9=Dq1pRL_1OqBi)`SZz^fgFj1?t`Kpdg+I9yacu)qk$w@|;MN=cDcCzMhHms%)ueYsJg~!`D4y8p53pjfaU(La`ZIBK zBlO0Is|2qf7HMxnk93xpCQ6Tqc`Mx}(x#eZlkJXdA7w1SXU6TLV%kUQbEAy*k&$u_ z3CWa-Zq<2MRY)9(t%F#})9}(Tlk=c0Bt=ylEJTEHu*YfOxb3uAo#G!fq6tQiK zKVHMzHEchz3m=r-T@D?5`my^F`!a{=E3U^H67&>#}_mKGkg>6?l4}KOWz4k9iBC#IGyL z-tsrpj^TE+*bl0DY@Yc2E&m-9riJ~PZeqbp(}R(4n`mbqqIYjcwxGSy?NV{WzAX_sTm22u zN``Dj{))u|TTzR}^WlmVYj6w7E|c;7R(}nk$hT$C*bGJ>P>bh_=Z3%*D}>MylY8TB zsWRgoQ|Pz8s84dK6^n`QSgH6#**pFenP8IGXy0awL+|(-dXg5vR1C}k(XXjL4r6D= zHpminlW4yU8t674#^4srhqs~W5Cy~X8{7P82Hn$ZezAC)KS_hjg?1logZW7!c{?mi z60NuUYsgfn$m)p;FZdHZQVucei6sz{T>g@=NMYVTP zzLe@7(b>LD5)*MN)kt5L$XJEC-SDnI-g9gbGV&vwT{3$Tk{$74S8IQqdTf!n`7Skw zMIvnnH4#X|1=eMUzb?`Kv%}wl!Z*RA(C!X&|2t^6)m4%Gn8*!w`ZEnuLx%`-^e077 zW~Jh@VlKEck^z?*I>Vj*6gO2CB2qTprl|ONC$+l2)1JE<_F1x%-Z5>SyA_p9s&mE4 zU8pL$ttWQbxB24xT__f!b|Oc#D0|(XE@7z+Q#__hxTwX5-Tqqc71(5V@|<{Vw?8e1 z?&)yh!~=t3V{)L|_@Fqn+n>@)c?_?Tel_<_bcjlwj~BI%XbW5m`67&EmN?1KVXL#T zt&Z@{-|#z9qHKgePV6kiZ()oU{oeDZ$Bwq5(iyc|ysam;??EA61hwaR#fXu{ zdC2DYClqD4(DtI0w-Pn?`kQ*DgHj41bU5UI=0I&JNQ=e8d;K+nJ8??~y%Zs%{{O(A zBej3(v&+}kZ{dW0P4K8_|330wB1XLLPmg>88%T~pC6!TE5xE!5a|=ip&x=>z_czcg zaKBKTejk%L-F_r)yzkFTZil_(A6+naM^e5BA0sSc_xlrbN&wFQ($<6yQGxl!!}=rc z1=>Q_BK}`$9J!#Ehi*!Y3JrKW^v1ikP9YJqM`gnysEsaA;F*G0d57=#w$ z_S9u@-#$#Rn{cm)7fGT5x5LHheaKUcxUtV)i|S^-e^o#Fkyc3I`5dqDarCr)afi$H z=)`cI;h-P-p^z)sa)6@}>k*qtQjPK?C*o$2$}G)KU#(6*`NAvsaTZH{>;CMWzetb z$dqByAl%Ro>Nv4aH2)k)(NF3)$+N=CKlkU+ugdH{hC-PtzCVVRe>JQf_aBaCPlS)3 z_3v=w2UwP$_do8czX`D^I=r7s*C>n%4ory>->H3@7;@1+QY<^~_l5Ud^vB~@V8!u2 z{XJM-IOj5^6EW*Ee@r<4ivOew-`(WgK++G3&NuwiVhdcAnqG}Xk%af(@CS948}6nh z{KBE2u_vJh3sUQ4@RCsK^yRmidW3Q`&cseWeFtvyzXzYN&A$XpABEFsWa}er%WLS; z^oh8W4;;KL;D-QxG42!~Y%8b^K7Bv#AgsK1AeEQDZR&Wpagr}py6MqIUeRa+p@`P>qdEnDG=uZCfphI8@1n84= zrvPDF0p)-`P`B|jkSFZSz$|Yi|26OlJ2ODvuG{gqfiFL1x9gA+D0K*Y1_8n`pi>UN z1f~z$nT1K7FajKA8(QkX-$I^nA-Hx4UUcw(jmIjP2u=&HI0UXk0b!?s_yRrveK;bN zI6qcO|KMZn4@frnx!@Ca#&90>VxOJ4MaNgp^=0SV!QW%0&_? z{>=kk1LsYNg`Wa$4PO&Yo5cSgupj(^7N)}6wA&msNn#`T^s}DOU%?Bs)`~z0kmrvAiZTZL2Vg)eiBx4O@GFpS zWZ?&aXE<;f@I;i5&8HH&=+H;{$(x9P_A#o;vxu+}p1O9xWFbYEZVLcY1adhdz@aLe zAU^;tZY`137H@dL;q0vu+1a#Py)E6BeHH{>!9k}1L8L1^#D0V!B0nn$B~ zutYQm#I-XM3w#6kWvSV;^&^LFvXxw)2ymGE3I`@WxkDw};xB_OHYPr~NG&{87Dhc} z)+s>G^)@D3`#LZwpoe{%UmXVj1l$P(%4;*=)1R8#MeM>}A(CSfQX2OLYcoXcyprl; z4ppR@+^)82;wOpOh#I8Z)u;lSMWWIaz7n)K8xx-# zxHcyKhDsciZG^nKw!ma0c=dq!jkulQIbfSl3Tb$Yti13Lli+9{Unz$8ZAYA3&) z1D{AVIdpX?7jBU}Ii*ahS+r{%_#EV2`0-p?qthA`W(6g|jKGy!|Dy19hk_`~F6)44 zmm9S-sgsaZxI*-B{RmaXA6 z@Vi+X8tqm@Te@sMeH;1|@JYuQI361wZ9Z8@8z5~=7R2BOcP-pSCb+bcASc6^Q?~__ z-T#t>ct<6F0)D(mPC}NBipELE(l?;s|LrVMlJte8nPi0W6Y(9*g7~Qpeg*i1?Pf## zfP;UHl>dXDUC9qB9%PybP6fG@0!j?{gsBi{u}x(Z@5nMGcn+VNA;4kwOnQ^##PkNq z#w2fGs4#JmONF$p&MEMO11D38)**Wq?&~=WtN}h@I|C$6o>4Q3*>PTXVB*t0J;|qu zN*3vNl@UmQw(vO>Ty$XK)2==z|MN4InE2#db@FR}Ux|q?H@YIkk9wH~xPfejAam^4_2 zT{VpyRnrxG!f1oC?NCYgbnxkWLy7UAW#T?-is*JWPSm+1lJo1H@wBZoinDe+jP!p6B4NqfxZxPv&l65}*W6 zovkbpuoZeSDfL@?7vybBd~zDwnBr$UF!5=hrp@01!gd%C0D;nz3)yVs$QGaow4>9; zq_7ooU}NIbR!%a3?4Nxtzyh7px;I} z1tOGt{zU=#pG`hm?Z5CZI{0MJ{EABX$Noirq2$X|oT{vXz#|M3w+_4YDOW1x)Bc4&+`+H=FZ^N$KUrxDf1`uY_+KKFIQUco za~!yp*qf1%*SP0DqESBRhwx3)Bb4F)!k;f{X2KD1FIbhY2y|r*aOJxJxAMf_u&%s7 zSj^5$$di9k#7x0-|I=R%u<=%iEs4OJGZ3)LO8EqM1Pmv?DB&}}If>?*qD@vABEkg- zY{q=u%)%NzR-(lq<(P7i1Uw`Gzb0z&>j7gQy&TIaerw=vubRF@!UKV;t*gwy1mMmC z6l1s*|NbBdzoy{t=~xyo1TG6#8n6s_KXO0=3n_d9_^Te32J8Z^v%9hcz5wp{oMNO| z@;?LDgu(SJ{3o!#ZDolEy^wU)VH$7{29ZyT5^M_?0B{ z7t$z4y@2;mKqJB;knkwrU)z`taKbZzy^ah#0{o$)M4kjLM~R|o$@nh<+nqBeh<(u; zL2y>VZs2vTk)YKkP5=vZs}`1mKY%+QHGdh84A28u6k_(WOE4NZ84nPIsas|MU+RoS zrYz#E4u#)EjrN*U}3jD{({p(9)X97YvaNBUA=8VD0}6>LT{@jT!$ za0N`Y6t2UY#J+g5Nd6-l2Nr{W;RQG=E&dC@PJ=fCpZ1v^c1rMF;Nz$wyAA9GUW$=X zdVxscQ4q=ALHn0yx+76iXH2`)R z)ET&+YIejb*sweh_*Xm^1Z|6gAWVV9^e99YF9OD4)u~5W4*cF4(*WYX1)Pkb*f!uG za2>;ZDMI{{z^~k?7_VFU&I6A^724fW$-+oGND0c93KSt81p4E8ixGixP!;$WM>nbi zT;EZIO@a5~;jzF%KF>T0d*p`DqU?QvrmW1697yyO27CsJq z2+wPFDV+jNMlO0<{L7>e?O=3v00>+;%4nUtAP8R{Akp+eWQ?)$-yr{eR29@O30Xq|XANUB` z9W8RmpwELKcrg4TkR|XVZk%21ci<)HYWAw=Ch#J(1AFX9tbv9Ghto+belBoVG*r8a z+5#W1Qz<_Z7%L_GCcBwla1sdg{01y@@EGt4j0H3p(O9q&IQG8E9EE{hj=^a+aD5bU zJIjC%fobX73<{}44g#MauNWsR{yE@eEb|IY98_+A;4GplsQlpbl|`Nf+--ej%Wnsq zgGB@xNJZR(uwyJJ0 z5wJ6XZ-9qkK6uOG<0AxR40=T)3#S2pfv$(KM;h1;xCC9h5SU7&5AgR`rpfr^WE={@ z8pmii6}TH3Q5#FaJYc5*%YYw7H-#NCftUWl-wE7xmH7gbO6br(_}>E0z_P3z;>$(I z`F{u)cVG@@mEAHL_*blY3atcFfStXd2Jj{1*zR_Dz)pkP5FaIsIY1gb68H!V98Zf7 zvT*W0A}jy~Sst`5eEJ{!^}xp+4C(*FmGTyXh)m4G$lr zkK%`c8)GTI2kA?~XCOQ~4pXYtFMj|Yldc%sEdE8{j*fn>*G3g#D5ZW*3NwKxV9sx6 z;rhVND(LbLJREogsw{|kK`I#i4}odGMRhCZ_{G3ATVh#7Qz{Z%4cxkyV(hcxZvdWv zr8c%FNdCvbP6K`*j9z08OiCTZUxP)+U@Jlb2u0|(?JS%NyvBjs0e|XP%NGE%Etumi z`EkInZL6FCX9E9%foqP%e+qaAdJXK52Cf0lNyH+A+8MQhO(4wHER03NZr};%mi991 z2=GFTe9a(F{rCiMH%E@H0zWiRF&bD^=&k$r5=aN$iz+O%3}^&=B#2edaEs6$gd0(n zjb z|KlLc#@O7-GUx(uW5;9?nfLb`RRg}{=!Wfq|3IUpryFV`cL5)9jD)4Yy@2uXA^8jP z(Eq=5EHsxxptWPRdJ|aJ6@&avvfBW!!%$n#!XEZnRA{~*brfX@)Buij^z&B0_z8pC1IYkjX98o1Ur@R3n+05LcV&(r z1^%j&`4WOMv@8fh{f+ed9A*yJ1Fyrt(bqEI6W{@k`Ts2NJPghDNOm6hW2}hmR<6{? ziYc;kpz;FW!1~~nr7s28X>jlk5L#n0pjJ&5wF2(g*W5Hj7=N!!DOy))&?w->juI*c zo_(cqu9ynk57RfAj@0*G;4v6_0~UT3_WjIuK^WnXgeO!FPeTJ037k0^^6= zZm*1g0e0rV)!^?q9(aG){1F_|R~z^eN@TQUK#RZ0WB%_B!Vok%%tq4UBH+g8Ms^WT z0`Bz%*8Ud%KH#U|b+uPCi-6zjtr)v4{`0`d-R;M>H-KkhMMe5(F4+luI|DTT9|oa) zfAm|c5&i_c4g--rG+zSt{8U+l@z_ClI)M4zlCJ^W&(TO*06QOG^MP+Ci1Y>nPs}uj zYB~Q;0O7*%$_2+P;Ny4%FR^m;5b%RfVL+^PA>_>z~mVk!`9mo%(-G8@K<<`TL5`#WM2Va zc%`z{Uj_D`s`Mea8)Hf4m`f6YtGxtoY0#>}1|Z~oTUlfsfa{~*+ihSt@GE$fT5Kga z6}T9U3{XB1&nCX3LaVoC$mbL-YUB)!BqL5kvuanr0=z9$K1? zJqWh-uZm*rL5x%=qJj$kHG-vz_9R*_0VByau~5X5zu5ZlWJT=3oIKQe5UeK^MC;ju zKUFVU5JYGZ!Ech8?C5R2H$OWwJM-S#*?o!A16}Y#G^5iSJK+!Mt}=ppl|`_t98KXR*mp?AV84U+;W=h3VMqMvzx)?)DHVBC?_ho> zx@LYq!6VsUOqrdc?+C8ZV54pD5Bv>VFljl3kua~y+#2bG*D>X8L_6UA!Kz|09@TMp z4zG8@)*piX0bJP1{FhiH&c5HKz~bX*-n|E`r18?9dc8yz9A7TFj zKj9mPB6FNfE42y5#+|M#!qznVzrcvK6|AQ~3(x=8EpLIxxj>uc-Ea=4^1S7f@ciED z2g+tq<=`o-X|K&6g_~G2Zieo`WzLz}Z2r>`1pVy8q7}S`+tKY#RlYa*SVLFgH|&ov zwGDfZhty!}cfe;oYq=Q?_DAjQGvyOeho|G)^=$KzYS3^knAt}Y!t664#x@eUR{S6K zLY@~6>X|zEa9E#P>V+3iAL!FPtL1WD_Yj2rGOt$z=EVA<%;z=#9xhD*r6=W>A(gw5aTUs9f+Wb972+#06(=k6Bbm7W<< g=DB=D6q_I%xky$c->45rx=6*LoL0-_ZeBP41+XyXMgRZ+ diff --git a/Debug/suffix.list b/Debug/suffix.list index 33ec935..0d7870c 100644 --- a/Debug/suffix.list +++ b/Debug/suffix.list @@ -5,47 +5,47 @@ Sections: Idx Name Size VMA LMA File off Algn 0 .isr_vector 00000138 08000000 08000000 00001000 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA - 1 .text 0000f744 08000140 08000140 00001140 2**4 + 1 .text 0000f76c 08000140 08000140 00001140 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .rodata 00000dc8 0800f884 0800f884 00010884 2**2 + 2 .rodata 00000dc8 0800f8ac 0800f8ac 000108ac 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA - 3 .ARM.extab 00000000 0801064c 0801064c 0001206c 2**0 + 3 .ARM.extab 00000000 08010674 08010674 0001206c 2**0 CONTENTS, READONLY - 4 .ARM 00000008 0801064c 0801064c 0001164c 2**2 + 4 .ARM 00000008 08010674 08010674 00011674 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA - 5 .preinit_array 00000000 08010654 08010654 0001206c 2**0 + 5 .preinit_array 00000000 0801067c 0801067c 0001206c 2**0 CONTENTS, ALLOC, LOAD, DATA - 6 .init_array 00000004 08010654 08010654 00011654 2**2 + 6 .init_array 00000004 0801067c 0801067c 0001167c 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA - 7 .fini_array 00000004 08010658 08010658 00011658 2**2 + 7 .fini_array 00000004 08010680 08010680 00011680 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA - 8 .data 0000006c 20000000 0801065c 00012000 2**2 + 8 .data 0000006c 20000000 08010684 00012000 2**2 CONTENTS, ALLOC, LOAD, DATA - 9 .bss 00001028 2000006c 080106c8 0001206c 2**2 + 9 .bss 00001060 2000006c 080106f0 0001206c 2**2 ALLOC - 10 ._user_heap_stack 00000a04 20001094 080106c8 00012094 2**0 + 10 ._user_heap_stack 00000a04 200010cc 080106f0 000120cc 2**0 ALLOC 11 .ARM.attributes 0000002a 00000000 00000000 0001206c 2**0 CONTENTS, READONLY - 12 .debug_info 00025c8e 00000000 00000000 00012096 2**0 + 12 .debug_info 00025e14 00000000 00000000 00012096 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS - 13 .debug_abbrev 000068c7 00000000 00000000 00037d24 2**0 + 13 .debug_abbrev 000068c7 00000000 00000000 00037eaa 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS - 14 .debug_aranges 00002340 00000000 00000000 0003e5f0 2**3 + 14 .debug_aranges 00002350 00000000 00000000 0003e778 2**3 CONTENTS, READONLY, DEBUGGING, OCTETS - 15 .debug_rnglists 00001a7a 00000000 00000000 00040930 2**0 + 15 .debug_rnglists 00001a85 00000000 00000000 00040ac8 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS - 16 .debug_macro 0002436a 00000000 00000000 000423aa 2**0 + 16 .debug_macro 00024387 00000000 00000000 0004254d 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS - 17 .debug_line 000258f8 00000000 00000000 00066714 2**0 + 17 .debug_line 000258f0 00000000 00000000 000668d4 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS - 18 .debug_str 000c7293 00000000 00000000 0008c00c 2**0 + 18 .debug_str 000c7281 00000000 00000000 0008c1c4 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS - 19 .comment 00000043 00000000 00000000 0015329f 2**0 + 19 .comment 00000043 00000000 00000000 00153445 2**0 CONTENTS, READONLY - 20 .debug_frame 00009470 00000000 00000000 001532e4 2**2 + 20 .debug_frame 000094c0 00000000 00000000 00153488 2**2 CONTENTS, READONLY, DEBUGGING, OCTETS - 21 .debug_line_str 0000004a 00000000 00000000 0015c754 2**0 + 21 .debug_line_str 0000004a 00000000 00000000 0015c948 2**0 CONTENTS, READONLY, DEBUGGING, OCTETS Disassembly of section .text: @@ -64,7 +64,7 @@ Disassembly of section .text: 8000156: bd10 pop {r4, pc} 8000158: 2000006c .word 0x2000006c 800015c: 00000000 .word 0x00000000 - 8000160: 0800f86c .word 0x0800f86c + 8000160: 0800f894 .word 0x0800f894 08000164 : 8000164: b508 push {r3, lr} @@ -76,7 +76,7 @@ Disassembly of section .text: 8000172: bd08 pop {r3, pc} 8000174: 00000000 .word 0x00000000 8000178: 20000070 .word 0x20000070 - 800017c: 0800f86c .word 0x0800f86c + 800017c: 0800f894 .word 0x0800f894 08000180 : 8000180: f810 2b01 ldrb.w r2, [r0], #1 @@ -779,7 +779,7 @@ void SystemClock_Config(void) 800072a: 2248 movs r2, #72 @ 0x48 800072c: 2100 movs r1, #0 800072e: 4618 mov r0, r3 - 8000730: f00e fc0c bl 800ef4c + 8000730: f00e fc20 bl 800ef74 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 8000734: 1d3b adds r3, r7, #4 8000736: 2200 movs r2, #0 @@ -989,7 +989,7 @@ void MX_RTC_Init(void) 8000834: 222c movs r2, #44 @ 0x2c 8000836: 2100 movs r1, #0 8000838: 4618 mov r0, r3 - 800083a: f00e fb87 bl 800ef4c + 800083a: f00e fb9b bl 800ef74 /* USER CODE END RTC_Init 1 */ @@ -1108,7 +1108,7 @@ void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) 80008dc: 2238 movs r2, #56 @ 0x38 80008de: 2100 movs r1, #0 80008e0: 4618 mov r0, r3 - 80008e2: f00e fb33 bl 800ef4c + 80008e2: f00e fb47 bl 800ef74 if(rtcHandle->Instance==RTC) 80008e6: 687b ldr r3, [r7, #4] 80008e8: 681b ldr r3, [r3, #0] @@ -1845,7 +1845,7 @@ void SystemApp_Init(void) /*Initialize timer and RTC*/ UTIL_TIMER_Init(); - 8000b5e: f00d fb99 bl 800e294 + 8000b5e: f00d fbad bl 800e2bc SYS_TimerInitialisedFlag = 1; 8000b62: 4b0c ldr r3, [pc, #48] @ (8000b94 ) 8000b64: 2201 movs r2, #1 @@ -1856,31 +1856,31 @@ void SystemApp_Init(void) /*Initialize the terminal */ UTIL_ADV_TRACE_Init(); - 8000b6c: f00d fe22 bl 800e7b4 + 8000b6c: f00d fe36 bl 800e7dc UTIL_ADV_TRACE_RegisterTimeStampFunction(TimestampNow); 8000b70: 4809 ldr r0, [pc, #36] @ (8000b98 ) - 8000b72: f00d febb bl 800e8ec + 8000b72: f00d fecf bl 800e914 /*Set verbose LEVEL*/ UTIL_ADV_TRACE_SetVerboseLevel(VERBOSE_LEVEL); 8000b76: 2002 movs r0, #2 - 8000b78: f00d fec6 bl 800e908 + 8000b78: f00d feda bl 800e930 /*Init low power manager*/ UTIL_LPM_Init(); - 8000b7c: f00c fe92 bl 800d8a4 + 8000b7c: f00c fea6 bl 800d8cc /* Disable Stand-by mode */ UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE); 8000b80: 2101 movs r1, #1 8000b82: 2001 movs r0, #1 - 8000b84: f00c fece bl 800d924 + 8000b84: f00c fee2 bl 800d94c #if defined (LOW_POWER_DISABLE) && (LOW_POWER_DISABLE == 1) /* Disable Stop Mode */ UTIL_LPM_SetStopMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE); 8000b88: 2101 movs r1, #1 8000b8a: 2001 movs r0, #1 - 8000b8c: f00c fe9a bl 800d8c4 + 8000b8c: f00c feae bl 800d8ec #endif /* LOW_POWER_DISABLE */ /* USER CODE BEGIN SystemApp_Init_2 */ @@ -1905,7 +1905,7 @@ void UTIL_SEQ_Idle(void) /* USER CODE END UTIL_SEQ_Idle_1 */ UTIL_LPM_EnterLowPower(); - 8000ba0: f00c fef0 bl 800d984 + 8000ba0: f00c ff04 bl 800d9ac /* USER CODE BEGIN UTIL_SEQ_Idle_2 */ /* USER CODE END UTIL_SEQ_Idle_2 */ @@ -1931,7 +1931,7 @@ static void TimestampNow(uint8_t *buff, uint16_t *size) SysTime_t curtime = SysTimeGet(); 8000bb2: f107 0308 add.w r3, r7, #8 8000bb6: 4618 mov r0, r3 - 8000bb8: f00c ff8e bl 800dad8 + 8000bb8: f00c ffa2 bl 800db00 tiny_snprintf_like((char *)buff, MAX_TS_SIZE, "%ds%03d:", curtime.Seconds, curtime.SubSeconds); 8000bbc: 68bb ldr r3, [r7, #8] 8000bbe: f9b7 200c ldrsh.w r2, [r7, #12] @@ -1955,7 +1955,7 @@ static void TimestampNow(uint8_t *buff, uint16_t *size) 8000bde: 3710 adds r7, #16 8000be0: 46bd mov sp, r7 8000be2: bd80 pop {r7, pc} - 8000be4: 0800f884 .word 0x0800f884 + 8000be4: 0800f8ac .word 0x0800f8ac 08000be8 : @@ -1970,7 +1970,7 @@ void UTIL_ADV_TRACE_PreSendHook(void) UTIL_LPM_SetStopMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_DISABLE); 8000bec: 2101 movs r1, #1 8000bee: 2002 movs r0, #2 - 8000bf0: f00c fe68 bl 800d8c4 + 8000bf0: f00c fe7c bl 800d8ec /* USER CODE BEGIN UTIL_ADV_TRACE_PreSendHook_2 */ /* USER CODE END UTIL_ADV_TRACE_PreSendHook_2 */ @@ -1990,7 +1990,7 @@ void UTIL_ADV_TRACE_PostSendHook(void) UTIL_LPM_SetStopMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_ENABLE); 8000bfc: 2100 movs r1, #0 8000bfe: 2002 movs r0, #2 - 8000c00: f00c fe60 bl 800d8c4 + 8000c00: f00c fe74 bl 800d8ec /* USER CODE BEGIN UTIL_LPM_SetStopMode_2 */ /* USER CODE END UTIL_LPM_SetStopMode_2 */ @@ -2020,7 +2020,7 @@ static void tiny_snprintf_like(char *buf, uint32_t maxsize, const char *strForma 8000c1c: 68fb ldr r3, [r7, #12] 8000c1e: 69ba ldr r2, [r7, #24] 8000c20: 6878 ldr r0, [r7, #4] - 8000c22: f00d f8a5 bl 800dd70 + 8000c22: f00d f8b9 bl 800dd98 va_end(vaArgs); /* USER CODE BEGIN tiny_snprintf_like_2 */ @@ -2332,7 +2332,7 @@ void *_sbrk(ptrdiff_t incr) 8000d92: d207 bcs.n 8000da4 <_sbrk+0x40> { errno = ENOMEM; - 8000d94: f00e f8f4 bl 800ef80 <__errno> + 8000d94: f00e f908 bl 800efa8 <__errno> 8000d98: 4603 mov r3, r0 8000d9a: 220c movs r2, #12 8000d9c: 601a str r2, [r3, #0] @@ -2363,7 +2363,7 @@ void *_sbrk(ptrdiff_t incr) 8000dc0: 20010000 .word 0x20010000 8000dc4: 00000800 .word 0x00000800 8000dc8: 200000d0 .word 0x200000d0 - 8000dcc: 20001098 .word 0x20001098 + 8000dcc: 200010d0 .word 0x200010d0 08000dd0 : * @brief Setup the microcontroller system. @@ -2506,7 +2506,7 @@ UTIL_TIMER_Status_t TIMER_IF_StartTimer(uint32_t timeout) 8000e6a: 222c movs r2, #44 @ 0x2c 8000e6c: 2100 movs r1, #0 8000e6e: 4618 mov r0, r3 - 8000e70: f00e f86c bl 800ef4c + 8000e70: f00e f880 bl 800ef74 /*Stop timer if one is already started*/ TIMER_IF_StopTimer(); 8000e74: f000 f828 bl 8000ec8 @@ -2910,7 +2910,7 @@ void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) /* USER CODE END HAL_RTC_AlarmAEventCallback */ UTIL_TIMER_IRQ_MAP_PROCESS(); - 800109e: f00d fa47 bl 800e530 + 800109e: f00d fa5b bl 800e558 /* USER CODE BEGIN HAL_RTC_AlarmAEventCallback_Last */ /* USER CODE END HAL_RTC_AlarmAEventCallback_Last */ @@ -3458,7 +3458,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) 8001390: 2238 movs r2, #56 @ 0x38 8001392: 2100 movs r1, #0 8001394: 4618 mov r0, r3 - 8001396: f00d fdd9 bl 800ef4c + 8001396: f00d fded bl 800ef74 if(uartHandle->Instance==USART2) 800139a: 687b ldr r3, [r7, #4] 800139c: 681b ldr r3, [r3, #0] @@ -4137,7 +4137,7 @@ LoopFillZerobss: /* Call static constructors */ bl __libc_init_array - 8001702: f00d fc43 bl 800ef8c <__libc_init_array> + 8001702: f00d fc57 bl 800efb4 <__libc_init_array> /* Call the application's entry point.*/ bl main 8001706: f7fe fffe bl 8000706
@@ -4154,11 +4154,11 @@ LoopForever: ldr r1, =_edata 8001714: 2000006c .word 0x2000006c ldr r2, =_sidata - 8001718: 0801065c .word 0x0801065c + 8001718: 08010684 .word 0x08010684 ldr r2, =_sbss 800171c: 2000006c .word 0x2000006c ldr r4, =_ebss - 8001720: 20001094 .word 0x20001094 + 8001720: 200010cc .word 0x200010cc 08001724 : * @retval : None @@ -11414,7 +11414,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void) 8003eda: 371c adds r7, #28 8003edc: 46bd mov sp, r7 8003ede: bd90 pop {r4, r7, pc} - 8003ee0: 0801030c .word 0x0801030c + 8003ee0: 08010334 .word 0x08010334 8003ee4: 00f42400 .word 0x00f42400 8003ee8: 01e84800 .word 0x01e84800 @@ -11441,7 +11441,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void) } 8003f0c: 4618 mov r0, r3 8003f0e: bd98 pop {r3, r4, r7, pc} - 8003f10: 080102ac .word 0x080102ac + 8003f10: 080102d4 .word 0x080102d4 08003f14 : /** @@ -11465,7 +11465,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void) } 8003f30: 4618 mov r0, r3 8003f32: bd98 pop {r3, r4, r7, pc} - 8003f34: 080102ec .word 0x080102ec + 8003f34: 08010314 .word 0x08010314 08003f38 : /** @@ -11489,7 +11489,7 @@ uint32_t HAL_RCC_GetPCLK2Freq(void) } 8003f54: 4618 mov r0, r3 8003f56: bd98 pop {r3, r4, r7, pc} - 8003f58: 080102ec .word 0x080102ec + 8003f58: 08010314 .word 0x08010314 08003f5c : voltage range. @@ -11540,8 +11540,8 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t MSI_Range) 8003faa: 3714 adds r7, #20 8003fac: 46bd mov sp, r7 8003fae: bd90 pop {r4, r7, pc} - 8003fb0: 0801030c .word 0x0801030c - 8003fb4: 080102ac .word 0x080102ac + 8003fb0: 08010334 .word 0x08010334 + 8003fb4: 080102d4 .word 0x080102d4 8003fb8: 431bde83 .word 0x431bde83 08003fbc : @@ -11712,9 +11712,9 @@ static HAL_StatusTypeDef RCC_SetFlashLatency(uint32_t Flash_ClkSrcFreq, uint32_t 80040aa: 46bd mov sp, r7 80040ac: bd80 pop {r7, pc} 80040ae: bf00 nop - 80040b0: 0800f890 .word 0x0800f890 - 80040b4: 0800f898 .word 0x0800f898 - 80040b8: 0800f8a0 .word 0x0800f8a0 + 80040b0: 0800f8b8 .word 0x0800f8b8 + 80040b4: 0800f8c0 .word 0x0800f8c0 + 80040b8: 0800f8c8 .word 0x0800f8c8 80040bc: 58004000 .word 0x58004000 080040c0 : @@ -18035,7 +18035,7 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) 80063f8: 40013800 .word 0x40013800 80063fc: 40004400 .word 0x40004400 8006400: 00f42400 .word 0x00f42400 - 8006404: 0801039c .word 0x0801039c + 8006404: 080103c4 .word 0x080103c4 } else { @@ -18374,7 +18374,7 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) 8006648: 46bd mov sp, r7 800664a: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} 800664e: bf00 nop - 8006650: 0801039c .word 0x0801039c + 8006650: 080103c4 .word 0x080103c4 8006654: 00f42400 .word 0x00f42400 08006658 : @@ -22099,8 +22099,8 @@ static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart) 8007cb2: 46bd mov sp, r7 8007cb4: bc80 pop {r7} 8007cb6: 4770 bx lr - 8007cb8: 080103b4 .word 0x080103b4 - 8007cbc: 080103bc .word 0x080103bc + 8007cb8: 080103dc .word 0x080103dc + 8007cbc: 080103e4 .word 0x080103e4 08007cc0 : * @arg @ref LL_GPIO_PIN_15 @@ -22228,7 +22228,7 @@ static void RadioInit( RadioEvents_t *events ) 8007d5c: 2200 movs r2, #0 8007d5e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff 8007d62: 480f ldr r0, [pc, #60] @ (8007da0 ) - 8007d64: f006 faa6 bl 800e2b4 + 8007d64: f006 faba bl 800e2dc TimerInit( &RxTimeoutTimer, RadioOnRxTimeoutIrq ); 8007d68: 2300 movs r3, #0 8007d6a: 9300 str r3, [sp, #0] @@ -22236,13 +22236,13 @@ static void RadioInit( RadioEvents_t *events ) 8007d6e: 2200 movs r2, #0 8007d70: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff 8007d74: 480c ldr r0, [pc, #48] @ (8007da8 ) - 8007d76: f006 fa9d bl 800e2b4 + 8007d76: f006 fab1 bl 800e2dc TimerStop( &TxTimeoutTimer ); 8007d7a: 4809 ldr r0, [pc, #36] @ (8007da0 ) - 8007d7c: f006 fb3e bl 800e3fc + 8007d7c: f006 fb52 bl 800e424 TimerStop( &RxTimeoutTimer ); 8007d80: 4809 ldr r0, [pc, #36] @ (8007da8 ) - 8007d82: f006 fb3b bl 800e3fc + 8007d82: f006 fb4f bl 800e424 } 8007d86: bf00 nop 8007d88: 3708 adds r7, #8 @@ -22516,7 +22516,7 @@ static bool RadioIsChannelFree( uint32_t freq, uint32_t rxBandwidth, int16_t rss 8007f1a: f7f8 fea9 bl 8000c70 carrierSenseTime = TimerGetCurrentTime( ); - 8007f1e: f006 fb87 bl 800e630 + 8007f1e: f006 fb9b bl 800e658 8007f22: 6138 str r0, [r7, #16] // Perform carrier sense for maxCarrierSenseTime @@ -22542,7 +22542,7 @@ static bool RadioIsChannelFree( uint32_t freq, uint32_t rxBandwidth, int16_t rss 8007f40: e006 b.n 8007f50 while( TimerGetElapsedTime( carrierSenseTime ) < maxCarrierSenseTime ) 8007f42: 6938 ldr r0, [r7, #16] - 8007f44: f006 fb86 bl 800e654 + 8007f44: f006 fb9a bl 800e67c 8007f48: 4602 mov r2, r0 8007f4a: 683b ldr r3, [r7, #0] 8007f4c: 4293 cmp r3, r2 @@ -22983,9 +22983,9 @@ static uint32_t RadioRandom( void ) 8008284: 20000008 .word 0x20000008 8008288: 20000330 .word 0x20000330 800828c: 20000306 .word 0x20000306 - 8008290: 0800f8ac .word 0x0800f8ac - 8008294: 0800f8b4 .word 0x0800f8b4 - 8008298: 08010450 .word 0x08010450 + 8008290: 0800f8d4 .word 0x0800f8d4 + 8008294: 0800f8dc .word 0x0800f8dc + 8008298: 08010478 .word 0x08010478 SubgRf.ModulationParams.Params.LoRa.LowDatarateOptimize = 0x00; 800829c: 4b3b ldr r3, [pc, #236] @ (800838c ) 800829e: 2200 movs r2, #0 @@ -23408,8 +23408,8 @@ static void RadioSetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev, 80085a8: 200002f8 .word 0x200002f8 80085ac: 20000330 .word 0x20000330 80085b0: 20000306 .word 0x20000306 - 80085b4: 0800f8b4 .word 0x0800f8b4 - 80085b8: 08010450 .word 0x08010450 + 80085b4: 0800f8dc .word 0x0800f8dc + 80085b8: 08010478 .word 0x08010478 80085bc: 20000008 .word 0x20000008 080085c0 : @@ -23881,7 +23881,7 @@ static uint32_t RadioTimeOnAir( RadioModems_t modem, uint32_t bandwidth, 800887e: 46bd mov sp, r7 8008880: bd80 pop {r7, pc} 8008882: bf00 nop - 8008884: 08010450 .word 0x08010450 + 8008884: 08010478 .word 0x08010478 08008888 : @@ -24031,7 +24031,7 @@ static radio_status_t RadioSend( uint8_t *buffer, uint8_t size ) 800897c: 2201 movs r2, #1 800897e: 2100 movs r1, #0 8008980: 2002 movs r0, #2 - 8008982: f005 ff33 bl 800e7ec + 8008982: f005 ff47 bl 800e814 return RADIO_STATUS_ERROR; 8008986: 2303 movs r3, #3 8008988: e073 b.n 8008a72 @@ -24177,10 +24177,10 @@ static radio_status_t RadioSend( uint8_t *buffer, uint8_t size ) 8008a60: 685b ldr r3, [r3, #4] 8008a62: 4619 mov r1, r3 8008a64: 480a ldr r0, [pc, #40] @ (8008a90 ) - 8008a66: f005 fd39 bl 800e4dc + 8008a66: f005 fd4d bl 800e504 TimerStart( &TxTimeoutTimer ); 8008a6a: 4809 ldr r0, [pc, #36] @ (8008a90 ) - 8008a6c: f005 fc58 bl 800e320 + 8008a6c: f005 fc6c bl 800e348 } return RADIO_STATUS_OK; @@ -24194,7 +24194,7 @@ static radio_status_t RadioSend( uint8_t *buffer, uint8_t size ) 8008a7c: 48000400 .word 0x48000400 8008a80: 200002f8 .word 0x200002f8 8008a84: 20000306 .word 0x20000306 - 8008a88: 0800f8bc .word 0x0800f8bc + 8008a88: 0800f8e4 .word 0x0800f8e4 8008a8c: 200001f4 .word 0x200001f4 8008a90: 20000354 .word 0x20000354 @@ -24283,10 +24283,10 @@ static void RadioRx( uint32_t timeout ) TimerSetValue( &RxTimeoutTimer, timeout ); 8008af6: 6879 ldr r1, [r7, #4] 8008af8: 4813 ldr r0, [pc, #76] @ (8008b48 ) - 8008afa: f005 fcef bl 800e4dc + 8008afa: f005 fd03 bl 800e504 TimerStart( &RxTimeoutTimer ); 8008afe: 4812 ldr r0, [pc, #72] @ (8008b48 ) - 8008b00: f005 fc0e bl 800e320 + 8008b00: f005 fc22 bl 800e348 } /* switch off RxDcPreambleDetect See STM32WL Errata: RadioSetRxDutyCycle*/ SubgRf.RxDcPreambleDetectTimeout = 0; @@ -24380,10 +24380,10 @@ static void RadioRxBoosted( uint32_t timeout ) TimerSetValue( &RxTimeoutTimer, timeout ); 8008b82: 6879 ldr r1, [r7, #4] 8008b84: 4813 ldr r0, [pc, #76] @ (8008bd4 ) - 8008b86: f005 fca9 bl 800e4dc + 8008b86: f005 fcbd bl 800e504 TimerStart( &RxTimeoutTimer ); 8008b8a: 4812 ldr r0, [pc, #72] @ (8008bd4 ) - 8008b8c: f005 fbc8 bl 800e320 + 8008b8c: f005 fbdc bl 800e348 } /* switch off RxDcPreambleDetect See STM32WL Errata: RadioSetRxDutyCycle*/ SubgRf.RxDcPreambleDetectTimeout = 0; @@ -24562,10 +24562,10 @@ static void RadioSetTxContinuousWave( uint32_t freq, int8_t power, uint16_t time TimerSetValue( &TxTimeoutTimer, timeout ); 8008ca0: 68f9 ldr r1, [r7, #12] 8008ca2: 4805 ldr r0, [pc, #20] @ (8008cb8 ) - 8008ca4: f005 fc1a bl 800e4dc + 8008ca4: f005 fc2e bl 800e504 TimerStart( &TxTimeoutTimer ); 8008ca8: 4803 ldr r0, [pc, #12] @ (8008cb8 ) - 8008caa: f005 fb39 bl 800e320 + 8008caa: f005 fb4d bl 800e348 } 8008cae: bf00 nop 8008cb0: 3710 adds r7, #16 @@ -25027,7 +25027,7 @@ static void RadioIrqProcess( void ) 8008fc2: f7fe fe8a bl 8007cda TimerStop( &TxTimeoutTimer ); 8008fc6: 487d ldr r0, [pc, #500] @ (80091bc ) - 8008fc8: f005 fa18 bl 800e3fc + 8008fc8: f005 fa2c bl 800e424 SUBGRF_SetStandby( STDBY_RC ); 8008fcc: 2000 movs r0, #0 8008fce: f001 f835 bl 800a03c @@ -25061,7 +25061,7 @@ static void RadioIrqProcess( void ) 8009006: f7fe fe68 bl 8007cda TimerStop( &RxTimeoutTimer ); 800900a: 486e ldr r0, [pc, #440] @ (80091c4 ) - 800900c: f005 f9f6 bl 800e3fc + 800900c: f005 fa0a bl 800e424 if( SubgRf.RxContinuous == false ) 8009010: 4b68 ldr r3, [pc, #416] @ (80091b4 ) 8009012: 785b ldrb r3, [r3, #1] @@ -25202,7 +25202,7 @@ static void RadioIrqProcess( void ) 8009128: 2201 movs r2, #1 800912a: 2100 movs r1, #0 800912c: 2002 movs r0, #2 - 800912e: f005 fb5d bl 800e7ec + 800912e: f005 fb71 bl 800e814 if( SUBGRF_GetOperatingMode( ) == MODE_TX ) 8009132: f000 fe37 bl 8009da4 8009136: 4603 mov r3, r0 @@ -25214,7 +25214,7 @@ static void RadioIrqProcess( void ) 8009142: f7fe fdca bl 8007cda TimerStop( &TxTimeoutTimer ); 8009146: 481d ldr r0, [pc, #116] @ (80091bc ) - 8009148: f005 f958 bl 800e3fc + 8009148: f005 f96c bl 800e424 SUBGRF_SetStandby( STDBY_RC ); 800914c: 2000 movs r0, #0 800914e: f000 ff75 bl 800a03c @@ -25246,7 +25246,7 @@ static void RadioIrqProcess( void ) 8009184: f7fe fda9 bl 8007cda TimerStop( &RxTimeoutTimer ); 8009188: 480e ldr r0, [pc, #56] @ (80091c4 ) - 800918a: f005 f937 bl 800e3fc + 800918a: f005 f94b bl 800e424 SUBGRF_SetStandby( STDBY_RC ); 800918e: 2000 movs r0, #0 8009190: f000 ff54 bl 800a03c @@ -25275,13 +25275,13 @@ static void RadioIrqProcess( void ) 80091c8: 200001f4 .word 0x200001f4 80091cc: 2000031c .word 0x2000031c 80091d0: 10624dd3 .word 0x10624dd3 - 80091d4: 0800f8d4 .word 0x0800f8d4 + 80091d4: 0800f8fc .word 0x0800f8fc MW_LOG( TS_ON, VLEVEL_M, "PRE OK\r\n" ); 80091d8: 4b54 ldr r3, [pc, #336] @ (800932c ) 80091da: 2201 movs r2, #1 80091dc: 2100 movs r1, #0 80091de: 2002 movs r0, #2 - 80091e0: f005 fb04 bl 800e7ec + 80091e0: f005 fb18 bl 800e814 if( SubgRf.RxDcPreambleDetectTimeout != 0 ) 80091e4: 4b52 ldr r3, [pc, #328] @ (8009330 ) 80091e6: 6d9b ldr r3, [r3, #88] @ 0x58 @@ -25341,7 +25341,7 @@ static void RadioIrqProcess( void ) 8009256: 2201 movs r2, #1 8009258: 2100 movs r1, #0 800925a: 2002 movs r0, #2 - 800925c: f005 fac6 bl 800e7ec + 800925c: f005 fada bl 800e814 if( 1UL == RFW_Is_Init( ) ) 8009260: f002 f9ec bl 800b63c 8009264: 4603 mov r3, r0 @@ -25356,12 +25356,12 @@ static void RadioIrqProcess( void ) 8009272: 2201 movs r2, #1 8009274: 2100 movs r1, #0 8009276: 2002 movs r0, #2 - 8009278: f005 fab8 bl 800e7ec + 8009278: f005 facc bl 800e814 break; 800927c: e051 b.n 8009322 TimerStop( &RxTimeoutTimer ); 800927e: 4831 ldr r0, [pc, #196] @ (8009344 ) - 8009280: f005 f8bc bl 800e3fc + 8009280: f005 f8d0 bl 800e424 if( SubgRf.RxContinuous == false ) 8009284: 4b2a ldr r3, [pc, #168] @ (8009330 ) 8009286: 785b ldrb r3, [r3, #1] @@ -25392,7 +25392,7 @@ static void RadioIrqProcess( void ) 80092b4: 2201 movs r2, #1 80092b6: 2100 movs r1, #0 80092b8: 2002 movs r0, #2 - 80092ba: f005 fa97 bl 800e7ec + 80092ba: f005 faab bl 800e814 break; 80092be: e02d b.n 800931c MW_LOG( TS_ON, VLEVEL_M, "IRQ_CRC_ERROR\r\n" ); @@ -25400,7 +25400,7 @@ static void RadioIrqProcess( void ) 80092c2: 2201 movs r2, #1 80092c4: 2100 movs r1, #0 80092c6: 2002 movs r0, #2 - 80092c8: f005 fa90 bl 800e7ec + 80092c8: f005 faa4 bl 800e814 if( SubgRf.RxContinuous == false ) 80092cc: 4b18 ldr r3, [pc, #96] @ (8009330 ) 80092ce: 785b ldrb r3, [r3, #1] @@ -25464,16 +25464,16 @@ static void RadioIrqProcess( void ) 8009326: 46bd mov sp, r7 8009328: bdb0 pop {r4, r5, r7, pc} 800932a: bf00 nop - 800932c: 0800f8e8 .word 0x0800f8e8 + 800932c: 0800f910 .word 0x0800f910 8009330: 200002f8 .word 0x200002f8 8009334: 08008cd5 .word 0x08008cd5 8009338: 08008cf9 .word 0x08008cf9 - 800933c: 0800f8f4 .word 0x0800f8f4 - 8009340: 0800f900 .word 0x0800f900 + 800933c: 0800f91c .word 0x0800f91c + 8009340: 0800f928 .word 0x0800f928 8009344: 2000036c .word 0x2000036c 8009348: 200002f4 .word 0x200002f4 - 800934c: 0800f90c .word 0x0800f90c - 8009350: 0800f918 .word 0x0800f918 + 800934c: 0800f934 .word 0x0800f934 + 8009350: 0800f940 .word 0x0800f940 08009354 : @@ -25803,7 +25803,7 @@ static int32_t RadioSetRxGenericConfig( GenericModems_t modem, RxConfigGeneric_t 800955e: 461a mov r2, r3 8009560: f107 0320 add.w r3, r7, #32 8009564: 4618 mov r0, r3 - 8009566: f004 fa43 bl 800d9f0 + 8009566: f004 fa57 bl 800da18 SUBGRF_SetStopRxTimerOnPreambleDetect( ( config->fsk.StopTimerOnPreambleDetect == 0 ) ? false : true ); 800956a: 68bb ldr r3, [r7, #8] 800956c: 681b ldr r3, [r3, #0] @@ -26255,7 +26255,7 @@ static int32_t RadioSetTxGenericConfig( GenericModems_t modem, TxConfigGeneric_t 80098ca: 461a mov r2, r3 80098cc: f107 032c add.w r3, r7, #44 @ 0x2c 80098d0: 4618 mov r0, r3 - 80098d2: f004 f88d bl 800d9f0 + 80098d2: f004 f8a1 bl 800da18 } if( ( config->msk.BitRate == 0 ) ) 80098d6: 68bb ldr r3, [r7, #8] @@ -26505,7 +26505,7 @@ static int32_t RadioSetTxGenericConfig( GenericModems_t modem, TxConfigGeneric_t 8009a4c: 461a mov r2, r3 8009a4e: f107 032c add.w r3, r7, #44 @ 0x2c 8009a52: 4618 mov r0, r3 - 8009a54: f003 ffcc bl 800d9f0 + 8009a54: f003 ffe0 bl 800da18 } SubgRf.ModulationParams.PacketType = PACKET_TYPE_GFSK; 8009a58: 4b40 ldr r3, [pc, #256] @ (8009b5c ) @@ -26991,7 +26991,7 @@ void SUBGRF_Init( DioIrqHandler dioIrq ) // Initialize TCXO control if (1U == RBI_IsTCXO() ) - 8009d3e: f003 fd95 bl 800d86c + 8009d3e: f003 fda9 bl 800d894 8009d42: 4603 mov r3, r0 8009d44: 2b01 cmp r3, #1 8009d46: d10e bne.n 8009d66 @@ -27035,7 +27035,7 @@ void SUBGRF_Init( DioIrqHandler dioIrq ) /* Init RF Switch */ RBI_Init(); - 8009d84: f003 fd56 bl 800d834 + 8009d84: f003 fd6a bl 800d85c OperatingMode = MODE_STDBY_RC; 8009d88: 4b05 ldr r3, [pc, #20] @ (8009da0 ) @@ -27429,7 +27429,7 @@ void SUBGRF_SetSleep( SleepParams_t sleepConfig ) /* switch the antenna OFF by SW */ RBI_ConfigRFSwitch(RBI_SWITCH_OFF); 8009fdc: 2000 movs r0, #0 - 8009fde: f003 fc30 bl 800d842 + 8009fde: f003 fc44 bl 800d86a Radio_SMPS_Set(SMPS_DRIVE_SETTING_DEFAULT); 8009fe2: 2002 movs r0, #2 @@ -27866,7 +27866,7 @@ void SUBGRF_SetRegulatorMode( void ) RadioRegulatorMode_t mode; if ( ( 1UL == RBI_IsDCDC() ) && ( 1UL == DCDC_ENABLE ) ) - 800a256: f003 fb10 bl 800d87a + 800a256: f003 fb24 bl 800d8a2 800a25a: 4603 mov r3, r0 800a25c: 2b01 cmp r3, #1 800a25e: d102 bne.n 800a266 @@ -28415,7 +28415,7 @@ void SUBGRF_SetTxParams( uint8_t paSelect, int8_t power, RadioRampTimes_t rampTi { max_power = RBI_GetRFOMaxPowerConfig(RBI_RFO_LP_MAXPOWER); 800a598: 2000 movs r0, #0 - 800a59a: f003 f975 bl 800d888 + 800a59a: f003 f989 bl 800d8b0 800a59e: 60f8 str r0, [r7, #12] if (power > max_power) 800a5a0: f997 3006 ldrsb.w r3, [r7, #6] @@ -28519,7 +28519,7 @@ void SUBGRF_SetTxParams( uint8_t paSelect, int8_t power, RadioRampTimes_t rampTi /* WORKAROUND END*/ max_power = RBI_GetRFOMaxPowerConfig(RBI_RFO_HP_MAXPOWER); 800a646: 2001 movs r0, #1 - 800a648: f003 f91e bl 800d888 + 800a648: f003 f932 bl 800d8b0 800a64c: 60f8 str r0, [r7, #12] if (power > max_power) 800a64e: f997 3006 ldrsb.w r3, [r7, #6] @@ -29322,7 +29322,7 @@ void SUBGRF_GetPacketStatus( PacketStatus_t *pktStatus ) 800ab26: 2214 movs r2, #20 800ab28: 2100 movs r1, #0 800ab2a: 6878 ldr r0, [r7, #4] - 800ab2c: f002 ff7f bl 800da2e + 800ab2c: f002 ff93 bl 800da56 pktStatus->packetType = PACKET_TYPE_NONE; 800ab30: 687b ldr r3, [r7, #4] 800ab32: 220f movs r2, #15 @@ -29760,7 +29760,7 @@ void SUBGRF_SetSwitch( uint8_t paSelect, RFState_t rxtx ) RBI_ConfigRFSwitch(state); 800ada0: 7bfb ldrb r3, [r7, #15] 800ada2: 4618 mov r0, r3 - 800ada4: f002 fd4d bl 800d842 + 800ada4: f002 fd61 bl 800d86a } 800ada8: bf00 nop 800adaa: 3710 adds r7, #16 @@ -29781,7 +29781,7 @@ uint8_t SUBGRF_SetRfTxPower( int8_t power ) 800adbc: 73fb strb r3, [r7, #15] int32_t TxConfig = RBI_GetTxConfig(); - 800adbe: f002 fd4e bl 800d85e + 800adbe: f002 fd62 bl 800d886 800adc2: 60b8 str r0, [r7, #8] switch (TxConfig) @@ -30101,7 +30101,7 @@ static void Radio_SMPS_Set(uint8_t level) 800af6e: 4603 mov r3, r0 800af70: 71fb strb r3, [r7, #7] if ( 1U == RBI_IsDCDC() ) - 800af72: f002 fc82 bl 800d87a + 800af72: f002 fc96 bl 800d8a2 800af76: 4603 mov r3, r0 800af78: 2b01 cmp r3, #1 800af7a: d112 bne.n 800afa2 @@ -30191,7 +30191,7 @@ uint8_t SUBGRF_GetFskBandwidthRegValue( uint32_t bandwidth ) 800aff2: 46bd mov sp, r7 800aff4: bc80 pop {r7} 800aff6: 4770 bx lr - 800aff8: 08010454 .word 0x08010454 + 800aff8: 0801047c .word 0x0801047c 0800affc : void SUBGRF_GetCFO( uint32_t bitRate, int32_t *cfo) @@ -30404,7 +30404,7 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b15c: 2201 movs r2, #1 800b15e: 2100 movs r1, #0 800b160: 2002 movs r0, #2 - 800b162: f003 fb43 bl 800e7ec + 800b162: f003 fb57 bl 800e814 if( ( TxLongPacketGetNextChunkCb == NULL ) || 800b166: 687b ldr r3, [r7, #4] @@ -30625,7 +30625,7 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b2a0: f897 202b ldrb.w r2, [r7, #43] @ 0x2b 800b2a4: b292 uxth r2, r2 800b2a6: 4618 mov r0, r3 - 800b2a8: f002 fba2 bl 800d9f0 + 800b2a8: f002 fbb6 bl 800da18 if( RFWPacket.Init.CrcEnable == 1 ) 800b2ac: 4b56 ldr r3, [pc, #344] @ (800b408 ) @@ -30662,7 +30662,7 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b2e8: b292 uxth r2, r2 800b2ea: f107 0114 add.w r1, r7, #20 800b2ee: 4618 mov r0, r3 - 800b2f0: f002 fb7e bl 800d9f0 + 800b2f0: f002 fb92 bl 800da18 } /* Init whitening at beginning of the packet*/ RFW_WhiteSetState( &RFWPacket ); @@ -30734,7 +30734,7 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b376: 2201 movs r2, #1 800b378: 2100 movs r1, #0 800b37a: 2002 movs r0, #2 - 800b37c: f003 fa36 bl 800e7ec + 800b37c: f003 fa4a bl 800e814 TimerInit( &RFWPacket.Timer, RFW_TransmitLongPacket_NewTxChunkTimerEvent ); 800b380: 2300 movs r3, #0 800b382: 9300 str r3, [sp, #0] @@ -30742,14 +30742,14 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b386: 2200 movs r2, #0 800b388: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff 800b38c: 4824 ldr r0, [pc, #144] @ (800b420 ) - 800b38e: f002 ff91 bl 800e2b4 + 800b38e: f002 ffa5 bl 800e2dc TimerSetValue( &RFWPacket.Timer, chunk_timeout ); 800b392: 6a39 ldr r1, [r7, #32] 800b394: 4822 ldr r0, [pc, #136] @ (800b420 ) - 800b396: f003 f8a1 bl 800e4dc + 800b396: f003 f8b5 bl 800e504 TimerStart( &RFWPacket.Timer ); 800b39a: 4821 ldr r0, [pc, #132] @ (800b420 ) - 800b39c: f002 ffc0 bl 800e320 + 800b39c: f002 ffd4 bl 800e348 /*Write bit infinite_sequence = 1, required for long packet*/ uint8_t reg = SUBGRF_ReadRegister( SUBGHZ_GPKTCTL1AR ); 800b3a0: f44f 60d7 mov.w r0, #1720 @ 0x6b8 @@ -30769,12 +30769,12 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b3c0: 6cdb ldr r3, [r3, #76] @ 0x4c 800b3c2: 68b9 ldr r1, [r7, #8] 800b3c4: 4618 mov r0, r3 - 800b3c6: f003 f889 bl 800e4dc + 800b3c6: f003 f89d bl 800e504 TimerStart( RFWPacket.RxTimeoutTimer ); 800b3ca: 4b0f ldr r3, [pc, #60] @ (800b408 ) 800b3cc: 6cdb ldr r3, [r3, #76] @ 0x4c 800b3ce: 4618 mov r0, r3 - 800b3d0: f002 ffa6 bl 800e320 + 800b3d0: f002 ffba bl 800e348 else { /* error*/ @@ -30835,10 +30835,10 @@ int32_t RFW_TransmitLongPacket( uint16_t payload_size, uint32_t timeout, 800b404: bd80 pop {r7, pc} 800b406: bf00 nop 800b408: 20000394 .word 0x20000394 - 800b40c: 0800f928 .word 0x0800f928 + 800b40c: 0800f950 .word 0x0800f950 800b410: 48000400 .word 0x48000400 800b414: 200003e8 .word 0x200003e8 - 800b418: 0800f938 .word 0x0800f938 + 800b418: 0800f960 .word 0x0800f960 800b41c: 0800b919 .word 0x0800b919 800b420: 200003b0 .word 0x200003b0 @@ -30934,12 +30934,12 @@ int32_t RFW_ReceiveLongPacket( uint8_t boosted_mode, uint32_t timeout, 800b4a6: 6cdb ldr r3, [r3, #76] @ 0x4c 800b4a8: 68b9 ldr r1, [r7, #8] 800b4aa: 4618 mov r0, r3 - 800b4ac: f003 f816 bl 800e4dc + 800b4ac: f003 f82a bl 800e504 TimerStart( RFWPacket.RxTimeoutTimer ); 800b4b0: 4b0d ldr r3, [pc, #52] @ (800b4e8 ) 800b4b2: 6cdb ldr r3, [r3, #76] @ 0x4c 800b4b4: 4618 mov r0, r3 - 800b4b6: f002 ff33 bl 800e320 + 800b4b6: f002 ff47 bl 800e348 } DBG_GPIO_RADIO_RX( SET ); 800b4ba: f44f 5180 mov.w r1, #4096 @ 0x1000 @@ -31184,7 +31184,7 @@ int32_t RFW_Init( ConfigGeneric_t *config, RadioEvents_t *RadioEvents, TimerEven 800b600: 2200 movs r2, #0 800b602: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff 800b606: 4806 ldr r0, [pc, #24] @ (800b620 ) - 800b608: f002 fe54 bl 800e2b4 + 800b608: f002 fe68 bl 800e2dc return 0; 800b60c: 2300 movs r3, #0 #else @@ -31315,7 +31315,7 @@ int32_t RFW_TransmitInit( uint8_t *inOutBuffer, uint8_t size, uint8_t *outSize ) 800b6ac: 2201 movs r2, #1 800b6ae: 2100 movs r1, #0 800b6b0: 2002 movs r0, #2 - 800b6b2: f003 f89b bl 800e7ec + 800b6b2: f003 f8af bl 800e814 status = -1; 800b6b6: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff 800b6ba: 617b str r3, [r7, #20] @@ -31334,7 +31334,7 @@ int32_t RFW_TransmitInit( uint8_t *inOutBuffer, uint8_t size, uint8_t *outSize ) 800b6ca: b292 uxth r2, r2 800b6cc: 68f9 ldr r1, [r7, #12] 800b6ce: 4618 mov r0, r3 - 800b6d0: f002 f98e bl 800d9f0 + 800b6d0: f002 f9a2 bl 800da18 /* Calculate the crc on */ /* Payload Size without the packet length field nor the CRC */ /* Prepend payload size before Payload*/ @@ -31394,7 +31394,7 @@ int32_t RFW_TransmitInit( uint8_t *inOutBuffer, uint8_t size, uint8_t *outSize ) 800b722: 78d2 ldrb r2, [r2, #3] 800b724: f107 0110 add.w r1, r7, #16 800b728: 4618 mov r0, r3 - 800b72a: f002 f961 bl 800d9f0 + 800b72a: f002 f975 bl 800da18 } /*init whitening at beginning of the packet*/ RFW_WhiteSetState( &RFWPacket ); @@ -31433,7 +31433,7 @@ int32_t RFW_TransmitInit( uint8_t *inOutBuffer, uint8_t size, uint8_t *outSize ) 800b766: 461a mov r2, r3 800b768: 4908 ldr r1, [pc, #32] @ (800b78c ) 800b76a: 68f8 ldr r0, [r7, #12] - 800b76c: f002 f940 bl 800d9f0 + 800b76c: f002 f954 bl 800da18 RFWPacket.LongPacketModeEnable = 0; 800b770: 4b04 ldr r3, [pc, #16] @ (800b784 ) @@ -31453,7 +31453,7 @@ int32_t RFW_TransmitInit( uint8_t *inOutBuffer, uint8_t size, uint8_t *outSize ) 800b780: 46bd mov sp, r7 800b782: bd80 pop {r7, pc} 800b784: 20000394 .word 0x20000394 - 800b788: 0800f948 .word 0x0800f948 + 800b788: 0800f970 .word 0x0800f970 800b78c: 200003e8 .word 0x200003e8 0800b790 : @@ -31628,7 +31628,7 @@ void RFW_ReceivePayload( void ) 800b880: 2201 movs r2, #1 800b882: 2100 movs r1, #0 800b884: 2002 movs r0, #2 - 800b886: f002 ffb1 bl 800e7ec + 800b886: f002 ffc5 bl 800e814 800b88a: e01c b.n 800b8c6 } @@ -31671,10 +31671,10 @@ void RFW_ReceivePayload( void ) TimerSetValue( &RFWPacket.Timer, timeout ); 800b8c6: 68f9 ldr r1, [r7, #12] 800b8c8: 480a ldr r0, [pc, #40] @ (800b8f4 ) - 800b8ca: f002 fe07 bl 800e4dc + 800b8ca: f002 fe1b bl 800e504 TimerStart( &RFWPacket.Timer ); 800b8ce: 4809 ldr r0, [pc, #36] @ (800b8f4 ) - 800b8d0: f002 fd26 bl 800e320 + 800b8d0: f002 fd3a bl 800e348 800b8d4: e006 b.n 800b8e4 } else @@ -31696,7 +31696,7 @@ void RFW_ReceivePayload( void ) 800b8e8: bd80 pop {r7, pc} 800b8ea: bf00 nop 800b8ec: 20000394 .word 0x20000394 - 800b8f0: 0800f960 .word 0x0800f960 + 800b8f0: 0800f988 .word 0x0800f988 800b8f4: 200003b0 .word 0x200003b0 0800b8f8 : @@ -31819,7 +31819,7 @@ static void RFW_TransmitLongPacket_TxChunkProcess( void ) 800b9a4: 2201 movs r2, #1 800b9a6: 2100 movs r1, #0 800b9a8: 2002 movs r0, #2 - 800b9aa: f002 ff1f bl 800e7ec + 800b9aa: f002 ff33 bl 800e814 read_ptr, write_ptr, bytes_sent, bytes_loaded, RFWPacket.LongPacketRemainingBytes ); if( RFWPacket.LongPacketRemainingBytes > 256 ) 800b9ae: 4b4e ldr r3, [pc, #312] @ (800bae8 ) @@ -31875,10 +31875,10 @@ static void RFW_TransmitLongPacket_TxChunkProcess( void ) TimerSetValue( &RFWPacket.Timer, timeout ); 800b9fc: 68f9 ldr r1, [r7, #12] 800b9fe: 483c ldr r0, [pc, #240] @ (800baf0 ) - 800ba00: f002 fd6c bl 800e4dc + 800ba00: f002 fd80 bl 800e504 TimerStart( &RFWPacket.Timer ); 800ba04: 483a ldr r0, [pc, #232] @ (800baf0 ) - 800ba06: f002 fc8b bl 800e320 + 800ba06: f002 fc9f bl 800e348 800ba0a: e015 b.n 800ba38 } else @@ -31943,7 +31943,7 @@ static void RFW_TransmitLongPacket_TxChunkProcess( void ) 800ba58: b29b uxth r3, r3 800ba5a: 461a mov r2, r3 800ba5c: 4825 ldr r0, [pc, #148] @ (800baf4 ) - 800ba5e: f001 ffc7 bl 800d9f0 + 800ba5e: f001 ffdb bl 800da18 if( RFWPacket.Init.CrcEnable == 1 ) 800ba62: 4b21 ldr r3, [pc, #132] @ (800bae8 ) 800ba64: 789b ldrb r3, [r3, #2] @@ -31971,7 +31971,7 @@ static void RFW_TransmitLongPacket_TxChunkProcess( void ) 800ba88: b292 uxth r2, r2 800ba8a: 1d39 adds r1, r7, #4 800ba8c: 4618 mov r0, r3 - 800ba8e: f001 ffaf bl 800d9f0 + 800ba8e: f001 ffc3 bl 800da18 } /* Run the whitening calculation on payload length, payload and crc*/ RFW_WhiteRun( &RFWPacket, ChunkBuffer, chunk_size ); @@ -32015,7 +32015,7 @@ static void RFW_TransmitLongPacket_TxChunkProcess( void ) 800bad6: 2201 movs r2, #1 800bad8: 2100 movs r1, #0 800bada: 2002 movs r0, #2 - 800badc: f002 fe86 bl 800e7ec + 800badc: f002 fe9a bl 800e814 ( uint8_t )( chunk_size + crc_size + write_ptr ) ); } 800bae0: bf00 nop @@ -32023,10 +32023,10 @@ static void RFW_TransmitLongPacket_TxChunkProcess( void ) 800bae4: 46bd mov sp, r7 800bae6: bd90 pop {r4, r7, pc} 800bae8: 20000394 .word 0x20000394 - 800baec: 0800f978 .word 0x0800f978 + 800baec: 0800f9a0 .word 0x0800f9a0 800baf0: 200003b0 .word 0x200003b0 800baf4: 200003e8 .word 0x200003e8 - 800baf8: 0800f9cc .word 0x0800f9cc + 800baf8: 0800f9f4 .word 0x0800f9f4 0800bafc : #endif /* RFW_LONGPACKET_ENABLE == 1 */ @@ -32403,7 +32403,7 @@ static int32_t RFW_PollRxBytes( uint32_t bytes ) 800bd0c: af00 add r7, sp, #0 800bd0e: 6078 str r0, [r7, #4] uint32_t now = TimerGetCurrentTime( ); - 800bd10: f002 fc8e bl 800e630 + 800bd10: f002 fca2 bl 800e658 800bd14: 6138 str r0, [r7, #16] uint8_t reg_buff_ptr_ref = SUBGRF_ReadRegister( SUBGHZ_RXADRPTR ); 800bd16: f640 0003 movw r0, #2051 @ 0x803 @@ -32437,7 +32437,7 @@ static int32_t RFW_PollRxBytes( uint32_t bytes ) 800bd4e: 75fb strb r3, [r7, #23] if( TimerGetElapsedTime( now ) > timeout ) 800bd50: 6938 ldr r0, [r7, #16] - 800bd52: f002 fc7f bl 800e654 + 800bd52: f002 fc93 bl 800e67c 800bd56: 4602 mov r2, r0 800bd58: 68bb ldr r3, [r7, #8] 800bd5a: 4293 cmp r3, r2 @@ -32561,7 +32561,7 @@ static int32_t RFW_GetPacketLength( uint16_t *PayloadLength ) 800be0a: 2201 movs r2, #1 800be0c: 2100 movs r1, #0 800be0e: 2002 movs r0, #2 - 800be10: f002 fcec bl 800e7ec + 800be10: f002 fd00 bl 800e814 return 0; 800be14: 2300 movs r3, #0 } @@ -32572,7 +32572,7 @@ static int32_t RFW_GetPacketLength( uint16_t *PayloadLength ) 800be1e: bf00 nop 800be20: 20000394 .word 0x20000394 800be24: 200003e8 .word 0x200003e8 - 800be28: 0800f9f4 .word 0x0800f9f4 + 800be28: 0800fa1c .word 0x0800fa1c 0800be2c : @@ -32639,7 +32639,7 @@ static void RFW_GetPayloadProcess( void ) 800be8a: 2201 movs r2, #1 800be8c: 2100 movs r1, #0 800be8e: 2002 movs r0, #2 - 800be90: f002 fcac bl 800e7ec + 800be90: f002 fcc0 bl 800e814 RFW_MW_LOG( TS_ON, VLEVEL_M, "RxAddrPtr=0x%02X,\r\n", read_ptr ); 800be94: 78fb ldrb r3, [r7, #3] 800be96: 9300 str r3, [sp, #0] @@ -32647,7 +32647,7 @@ static void RFW_GetPayloadProcess( void ) 800be9a: 2201 movs r2, #1 800be9c: 2100 movs r1, #0 800be9e: 2002 movs r0, #2 - 800bea0: f002 fca4 bl 800e7ec + 800bea0: f002 fcb8 bl 800e814 RFW_MW_LOG( TS_ON, VLEVEL_M, "offset= %d, size=%d, remaining=%d,\r\n", RFWPacket.RadioBufferOffset, size, 800bea4: 4b6e ldr r3, [pc, #440] @ (800c060 ) 800bea6: f893 3036 ldrb.w r3, [r3, #54] @ 0x36 @@ -32662,7 +32662,7 @@ static void RFW_GetPayloadProcess( void ) 800beba: 2201 movs r2, #1 800bebc: 2100 movs r1, #0 800bebe: 2002 movs r0, #2 - 800bec0: f002 fc94 bl 800e7ec + 800bec0: f002 fca8 bl 800e814 RFWPacket.LongPacketRemainingBytes ); /*update pld length so that not reached*/ SUBGRF_WriteRegister( SUBGHZ_GRTXPLDLEN, read_ptr - 1 ); @@ -32758,7 +32758,7 @@ static void RFW_GetPayloadProcess( void ) 800bf58: b292 uxth r2, r2 800bf5a: 4945 ldr r1, [pc, #276] @ (800c070 ) 800bf5c: 4618 mov r0, r3 - 800bf5e: f001 fd47 bl 800d9f0 + 800bf5e: f001 fd5b bl 800da18 RFWPacket.RxPayloadOffset += size; 800bf62: 4b3f ldr r3, [pc, #252] @ (800c060 ) 800bf64: 8f1a ldrh r2, [r3, #56] @ 0x38 @@ -32854,10 +32854,10 @@ static void RFW_GetPayloadProcess( void ) TimerSetValue( &RFWPacket.Timer, Timeout ); 800bff6: 6879 ldr r1, [r7, #4] 800bff8: 481f ldr r0, [pc, #124] @ (800c078 ) - 800bffa: f002 fa6f bl 800e4dc + 800bffa: f002 fa83 bl 800e504 TimerStart( &RFWPacket.Timer ); 800bffe: 481e ldr r0, [pc, #120] @ (800c078 ) - 800c000: f002 f98e bl 800e320 + 800c000: f002 f9a2 bl 800e348 800c004: e028 b.n 800c058 } else @@ -32893,7 +32893,7 @@ static void RFW_GetPayloadProcess( void ) 800c032: 2201 movs r2, #1 800c034: 2100 movs r1, #0 800c036: 2002 movs r0, #2 - 800c038: f002 fbd8 bl 800e7ec + 800c038: f002 fbec bl 800e814 RFWPacket.LongPacketRemainingBytes ); size = RFWPacket.LongPacketRemainingBytes; 800c03c: 4b08 ldr r3, [pc, #32] @ (800c060 ) @@ -32919,13 +32919,13 @@ static void RFW_GetPayloadProcess( void ) 800c05c: bd80 pop {r7, pc} 800c05e: bf00 nop 800c060: 20000394 .word 0x20000394 - 800c064: 0800fa08 .word 0x0800fa08 - 800c068: 0800fa20 .word 0x0800fa20 - 800c06c: 0800fa34 .word 0x0800fa34 + 800c064: 0800fa30 .word 0x0800fa30 + 800c068: 0800fa48 .word 0x0800fa48 + 800c06c: 0800fa5c .word 0x0800fa5c 800c070: 200003e8 .word 0x200003e8 800c074: 200004e8 .word 0x200004e8 800c078: 200003b0 .word 0x200003b0 - 800c07c: 0800fa5c .word 0x0800fa5c + 800c07c: 0800fa84 .word 0x0800fa84 0800c080 : @@ -33024,7 +33024,7 @@ static void RFW_GetPayload( uint8_t Offset, uint8_t Length ) 800c112: b29b uxth r3, r3 800c114: 461a mov r2, r3 800c116: 493b ldr r1, [pc, #236] @ (800c204 ) - 800c118: f001 fc6a bl 800d9f0 + 800c118: f001 fc7e bl 800da18 RFWPacket.RxPayloadOffset += Length - RFWPacket.Init.CrcFieldSize; 800c11c: 4b3a ldr r3, [pc, #232] @ (800c208 ) 800c11e: 8f1a ldrh r2, [r3, #56] @ 0x38 @@ -33056,7 +33056,7 @@ static void RFW_GetPayload( uint8_t Offset, uint8_t Length ) 800c140: 4b31 ldr r3, [pc, #196] @ (800c208 ) 800c142: 6cdb ldr r3, [r3, #76] @ 0x4c 800c144: 4618 mov r0, r3 - 800c146: f002 f959 bl 800e3fc + 800c146: f002 f96d bl 800e424 /* CRC check*/ RFW_MW_LOG( TS_ON, VLEVEL_M, "crc_result= 0x%02X%02X, crc_payload=0x%02X%02X\r\n", crc_result[0], crc_result[1], 800c14a: 7b3b ldrb r3, [r7, #12] @@ -33080,7 +33080,7 @@ static void RFW_GetPayload( uint8_t Offset, uint8_t Length ) 800c16e: 2201 movs r2, #1 800c170: 2100 movs r1, #0 800c172: 2002 movs r0, #2 - 800c174: f002 fb3a bl 800e7ec + 800c174: f002 fb4e bl 800e814 ChunkBuffer[Length - 2], ChunkBuffer[Length - 1] ); if( ( ( crc_result[0] == ChunkBuffer[Length - 2] ) && 800c178: 7b3a ldrb r2, [r7, #12] @@ -33173,7 +33173,7 @@ static void RFW_GetPayload( uint8_t Offset, uint8_t Length ) 800c204: 200003e8 .word 0x200003e8 800c208: 20000394 .word 0x20000394 800c20c: 200004e8 .word 0x200004e8 - 800c210: 0800fa8c .word 0x0800fa8c + 800c210: 0800fab4 .word 0x0800fab4 800c214: 10624dd3 .word 0x10624dd3 800c218: 48000400 .word 0x48000400 @@ -33201,10 +33201,10 @@ void MX_SubGHz_Phy_Process(void) 800c22c: b580 push {r7, lr} 800c22e: af00 add r7, sp, #0 SubghzApp_Process(); - 800c230: f000 f858 bl 800c2e4 + 800c230: f000 f896 bl 800c360 UTIL_SEQ_Run(UTIL_SEQ_DEFAULT); 800c234: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800c238: f001 feec bl 800e014 + 800c238: f001 ff00 bl 800e03c } 800c23c: bf00 nop 800c23e: bd80 pop {r7, pc} @@ -33217,8498 +33217,8509 @@ static char *App_SkipSpaces(char *s); void SubghzApp_Init(void) { 800c240: b580 push {r7, lr} - 800c242: af00 add r7, sp, #0 + 800c242: b082 sub sp, #8 + 800c244: af02 add r7, sp, #8 if (!Config_Load(&g_cfg)) - 800c244: 481b ldr r0, [pc, #108] @ (800c2b4 ) - 800c246: f001 fa51 bl 800d6ec - 800c24a: 4603 mov r3, r0 - 800c24c: f083 0301 eor.w r3, r3, #1 - 800c250: b2db uxtb r3, r3 - 800c252: 2b00 cmp r3, #0 - 800c254: d002 beq.n 800c25c + 800c246: 4833 ldr r0, [pc, #204] @ (800c314 ) + 800c248: f001 fa64 bl 800d714 + 800c24c: 4603 mov r3, r0 + 800c24e: f083 0301 eor.w r3, r3, #1 + 800c252: b2db uxtb r3, r3 + 800c254: 2b00 cmp r3, #0 + 800c256: d002 beq.n 800c25e { Config_LoadDefaults(&g_cfg); - 800c256: 4817 ldr r0, [pc, #92] @ (800c2b4 ) - 800c258: f001 f9f4 bl 800d644 + 800c258: 482e ldr r0, [pc, #184] @ (800c314 ) + 800c25a: f001 fa07 bl 800d66c } RadioEvents.TxDone = OnTxDone; - 800c25c: 4b16 ldr r3, [pc, #88] @ (800c2b8 ) - 800c25e: 4a17 ldr r2, [pc, #92] @ (800c2bc ) - 800c260: 601a str r2, [r3, #0] + 800c25e: 4b2e ldr r3, [pc, #184] @ (800c318 ) + 800c260: 4a2e ldr r2, [pc, #184] @ (800c31c ) + 800c262: 601a str r2, [r3, #0] RadioEvents.RxDone = OnRxDone; - 800c262: 4b15 ldr r3, [pc, #84] @ (800c2b8 ) - 800c264: 4a16 ldr r2, [pc, #88] @ (800c2c0 ) - 800c266: 609a str r2, [r3, #8] + 800c264: 4b2c ldr r3, [pc, #176] @ (800c318 ) + 800c266: 4a2e ldr r2, [pc, #184] @ (800c320 ) + 800c268: 609a str r2, [r3, #8] RadioEvents.TxTimeout = OnTxTimeout; - 800c268: 4b13 ldr r3, [pc, #76] @ (800c2b8 ) - 800c26a: 4a16 ldr r2, [pc, #88] @ (800c2c4 ) - 800c26c: 605a str r2, [r3, #4] + 800c26a: 4b2b ldr r3, [pc, #172] @ (800c318 ) + 800c26c: 4a2d ldr r2, [pc, #180] @ (800c324 ) + 800c26e: 605a str r2, [r3, #4] RadioEvents.RxTimeout = OnRxTimeout; - 800c26e: 4b12 ldr r3, [pc, #72] @ (800c2b8 ) - 800c270: 4a15 ldr r2, [pc, #84] @ (800c2c8 ) - 800c272: 60da str r2, [r3, #12] + 800c270: 4b29 ldr r3, [pc, #164] @ (800c318 ) + 800c272: 4a2d ldr r2, [pc, #180] @ (800c328 ) + 800c274: 60da str r2, [r3, #12] RadioEvents.RxError = OnRxError; - 800c274: 4b10 ldr r3, [pc, #64] @ (800c2b8 ) - 800c276: 4a15 ldr r2, [pc, #84] @ (800c2cc ) - 800c278: 611a str r2, [r3, #16] + 800c276: 4b28 ldr r3, [pc, #160] @ (800c318 ) + 800c278: 4a2c ldr r2, [pc, #176] @ (800c32c ) + 800c27a: 611a str r2, [r3, #16] Radio.Init(&RadioEvents); - 800c27a: 4b15 ldr r3, [pc, #84] @ (800c2d0 ) - 800c27c: 681b ldr r3, [r3, #0] - 800c27e: 480e ldr r0, [pc, #56] @ (800c2b8 ) - 800c280: 4798 blx r3 + 800c27c: 4b2c ldr r3, [pc, #176] @ (800c330 ) + 800c27e: 681b ldr r3, [r3, #0] + 800c280: 4825 ldr r0, [pc, #148] @ (800c318 ) + 800c282: 4798 blx r3 + + TimerInit(&g_led_tx_timer, App_LedTxOff); + 800c284: 2300 movs r3, #0 + 800c286: 9300 str r3, [sp, #0] + 800c288: 4b2a ldr r3, [pc, #168] @ (800c334 ) + 800c28a: 2200 movs r2, #0 + 800c28c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 800c290: 4829 ldr r0, [pc, #164] @ (800c338 ) + 800c292: f002 f823 bl 800e2dc + TimerInit(&g_led_rx_timer, App_LedRxOff); + 800c296: 2300 movs r3, #0 + 800c298: 9300 str r3, [sp, #0] + 800c29a: 4b28 ldr r3, [pc, #160] @ (800c33c ) + 800c29c: 2200 movs r2, #0 + 800c29e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 800c2a2: 4827 ldr r0, [pc, #156] @ (800c340 ) + 800c2a4: f002 f81a bl 800e2dc + TimerInit(&g_led_err_timer, App_LedErrOff); + 800c2a8: 2300 movs r3, #0 + 800c2aa: 9300 str r3, [sp, #0] + 800c2ac: 4b25 ldr r3, [pc, #148] @ (800c344 ) + 800c2ae: 2200 movs r2, #0 + 800c2b0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 800c2b4: 4824 ldr r0, [pc, #144] @ (800c348 ) + 800c2b6: f002 f811 bl 800e2dc App_RadioApplyConfig(); - 800c282: f000 f9a7 bl 800c5d4 + 800c2ba: f000 f9c7 bl 800c64c App_ReconfigureUart(g_cfg.uart_baudrate); - 800c286: 4b0b ldr r3, [pc, #44] @ (800c2b4 ) - 800c288: 69db ldr r3, [r3, #28] - 800c28a: 4618 mov r0, r3 - 800c28c: f001 f808 bl 800d2a0 + 800c2be: 4b15 ldr r3, [pc, #84] @ (800c314 ) + 800c2c0: 69db ldr r3, [r3, #28] + 800c2c2: 4618 mov r0, r3 + 800c2c4: f001 f828 bl 800d318 App_RadioEnterRx(); - 800c290: f000 fa54 bl 800c73c + 800c2c8: f000 fa74 bl 800c7b4 + + HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); + 800c2cc: 2200 movs r2, #0 + 800c2ce: f44f 4100 mov.w r1, #32768 @ 0x8000 + 800c2d2: 481e ldr r0, [pc, #120] @ (800c34c ) + 800c2d4: f7f6 fcf8 bl 8002cc8 + HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); + 800c2d8: 2200 movs r2, #0 + 800c2da: f44f 7100 mov.w r1, #512 @ 0x200 + 800c2de: 481b ldr r0, [pc, #108] @ (800c34c ) + 800c2e0: f7f6 fcf2 bl 8002cc8 + HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); + 800c2e4: 2200 movs r2, #0 + 800c2e6: f44f 6100 mov.w r1, #2048 @ 0x800 + 800c2ea: 4818 ldr r0, [pc, #96] @ (800c34c ) + 800c2ec: f7f6 fcec bl 8002cc8 g_uart_last_data_tick = HAL_GetTick(); - 800c294: f7f4 fcd8 bl 8000c48 - 800c298: 4603 mov r3, r0 - 800c29a: 4a0e ldr r2, [pc, #56] @ (800c2d4 ) - 800c29c: 6013 str r3, [r2, #0] + 800c2f0: f7f4 fcaa bl 8000c48 + 800c2f4: 4603 mov r3, r0 + 800c2f6: 4a16 ldr r2, [pc, #88] @ (800c350 ) + 800c2f8: 6013 str r3, [r2, #0] (void)vcom_ReceiveInit(UartRxByteCallback); - 800c29e: 480e ldr r0, [pc, #56] @ (800c2d8 ) - 800c2a0: f7f5 f984 bl 80015ac + 800c2fa: 4816 ldr r0, [pc, #88] @ (800c354 ) + 800c2fc: f7f5 f956 bl 80015ac App_Printf("\r\nSTM32WL UART<->SUBGHZ bridge started\r\n"); - 800c2a4: 480d ldr r0, [pc, #52] @ (800c2dc ) - 800c2a6: f000 ffb5 bl 800d214 + 800c300: 4815 ldr r0, [pc, #84] @ (800c358 ) + 800c302: f000 ffc3 bl 800d28c App_Printf("DATA mode, escape sequence: silence 800 ms + +++ + silence 800 ms\r\n"); - 800c2aa: 480d ldr r0, [pc, #52] @ (800c2e0 ) - 800c2ac: f000 ffb2 bl 800d214 + 800c306: 4815 ldr r0, [pc, #84] @ (800c35c ) + 800c308: f000 ffc0 bl 800d28c } - 800c2b0: bf00 nop - 800c2b2: bd80 pop {r7, pc} - 800c2b4: 20000604 .word 0x20000604 - 800c2b8: 200005e8 .word 0x200005e8 - 800c2bc: 0800d581 .word 0x0800d581 - 800c2c0: 0800d599 .word 0x0800d599 - 800c2c4: 0800d5fd .word 0x0800d5fd - 800c2c8: 0800d615 .word 0x0800d615 - 800c2cc: 0800d62d .word 0x0800d62d - 800c2d0: 080103c4 .word 0x080103c4 - 800c2d4: 20000b7c .word 0x20000b7c - 800c2d8: 0800c9b9 .word 0x0800c9b9 - 800c2dc: 0800fac0 .word 0x0800fac0 - 800c2e0: 0800faec .word 0x0800faec + 800c30c: bf00 nop + 800c30e: 46bd mov sp, r7 + 800c310: bd80 pop {r7, pc} + 800c312: bf00 nop + 800c314: 20000604 .word 0x20000604 + 800c318: 200005e8 .word 0x200005e8 + 800c31c: 0800d549 .word 0x0800d549 + 800c320: 0800d5c1 .word 0x0800d5c1 + 800c324: 0800d625 .word 0x0800d625 + 800c328: 0800d63d .word 0x0800d63d + 800c32c: 0800d655 .word 0x0800d655 + 800c330: 080103ec .word 0x080103ec + 800c334: 0800d561 .word 0x0800d561 + 800c338: 20000630 .word 0x20000630 + 800c33c: 0800d581 .word 0x0800d581 + 800c340: 20000648 .word 0x20000648 + 800c344: 0800d5a1 .word 0x0800d5a1 + 800c348: 20000660 .word 0x20000660 + 800c34c: 48000400 .word 0x48000400 + 800c350: 20000bb4 .word 0x20000bb4 + 800c354: 0800ca31 .word 0x0800ca31 + 800c358: 0800fae8 .word 0x0800fae8 + 800c35c: 0800fb14 .word 0x0800fb14 -0800c2e4 : +0800c360 : void SubghzApp_Process(void) { - 800c2e4: b580 push {r7, lr} - 800c2e6: af00 add r7, sp, #0 + 800c360: b580 push {r7, lr} + 800c362: af00 add r7, sp, #0 App_ProcessEscape(); - 800c2e8: f000 f8ce bl 800c488 + 800c364: f000 f8cc bl 800c500 App_ProcessUartPacketizer(); - 800c2ec: f000 f8a0 bl 800c430 + 800c368: f000 f89e bl 800c4a8 App_ProcessRadioEvents(); - 800c2f0: f000 f806 bl 800c300 + 800c36c: f000 f804 bl 800c378 App_StartNextTxIfPossible(); - 800c2f4: f000 f918 bl 800c528 - App_ProcessLeds(); - 800c2f8: f001 f8f0 bl 800d4dc + 800c370: f000 f916 bl 800c5a0 } - 800c2fc: bf00 nop - 800c2fe: bd80 pop {r7, pc} + 800c374: bf00 nop + 800c376: bd80 pop {r7, pc} -0800c300 : +0800c378 : static void App_ProcessRadioEvents(void) { - 800c300: b580 push {r7, lr} - 800c302: af00 add r7, sp, #0 + 800c378: b580 push {r7, lr} + 800c37a: af00 add r7, sp, #0 if (g_radio_tx_done != 0U) - 800c304: 4b3b ldr r3, [pc, #236] @ (800c3f4 ) - 800c306: 781b ldrb r3, [r3, #0] - 800c308: b2db uxtb r3, r3 - 800c30a: 2b00 cmp r3, #0 - 800c30c: d00f beq.n 800c32e + 800c37c: 4b3b ldr r3, [pc, #236] @ (800c46c ) + 800c37e: 781b ldrb r3, [r3, #0] + 800c380: b2db uxtb r3, r3 + 800c382: 2b00 cmp r3, #0 + 800c384: d00f beq.n 800c3a6 { g_radio_tx_done = 0U; - 800c30e: 4b39 ldr r3, [pc, #228] @ (800c3f4 ) - 800c310: 2200 movs r2, #0 - 800c312: 701a strb r2, [r3, #0] + 800c386: 4b39 ldr r3, [pc, #228] @ (800c46c ) + 800c388: 2200 movs r2, #0 + 800c38a: 701a strb r2, [r3, #0] g_radio_busy = 0U; - 800c314: 4b38 ldr r3, [pc, #224] @ (800c3f8 ) - 800c316: 2200 movs r2, #0 - 800c318: 701a strb r2, [r3, #0] + 800c38c: 4b38 ldr r3, [pc, #224] @ (800c470 ) + 800c38e: 2200 movs r2, #0 + 800c390: 701a strb r2, [r3, #0] g_stat_uart_packets_tx++; - 800c31a: 4b38 ldr r3, [pc, #224] @ (800c3fc ) - 800c31c: 681b ldr r3, [r3, #0] - 800c31e: 3301 adds r3, #1 - 800c320: 4a36 ldr r2, [pc, #216] @ (800c3fc ) - 800c322: 6013 str r3, [r2, #0] + 800c392: 4b38 ldr r3, [pc, #224] @ (800c474 ) + 800c394: 681b ldr r3, [r3, #0] + 800c396: 3301 adds r3, #1 + 800c398: 4a36 ldr r2, [pc, #216] @ (800c474 ) + 800c39a: 6013 str r3, [r2, #0] App_QueuePop(); - 800c324: f000 fb2a bl 800c97c + 800c39c: f000 fb2a bl 800c9f4 g_radio_needs_rx_restart = 1U; - 800c328: 4b35 ldr r3, [pc, #212] @ (800c400 ) - 800c32a: 2201 movs r2, #1 - 800c32c: 701a strb r2, [r3, #0] + 800c3a0: 4b35 ldr r3, [pc, #212] @ (800c478 ) + 800c3a2: 2201 movs r2, #1 + 800c3a4: 701a strb r2, [r3, #0] } if (g_radio_tx_timeout != 0U) - 800c32e: 4b35 ldr r3, [pc, #212] @ (800c404 ) - 800c330: 781b ldrb r3, [r3, #0] - 800c332: b2db uxtb r3, r3 - 800c334: 2b00 cmp r3, #0 - 800c336: d00f beq.n 800c358 + 800c3a6: 4b35 ldr r3, [pc, #212] @ (800c47c ) + 800c3a8: 781b ldrb r3, [r3, #0] + 800c3aa: b2db uxtb r3, r3 + 800c3ac: 2b00 cmp r3, #0 + 800c3ae: d00f beq.n 800c3d0 { g_radio_tx_timeout = 0U; - 800c338: 4b32 ldr r3, [pc, #200] @ (800c404 ) - 800c33a: 2200 movs r2, #0 - 800c33c: 701a strb r2, [r3, #0] + 800c3b0: 4b32 ldr r3, [pc, #200] @ (800c47c ) + 800c3b2: 2200 movs r2, #0 + 800c3b4: 701a strb r2, [r3, #0] g_radio_busy = 0U; - 800c33e: 4b2e ldr r3, [pc, #184] @ (800c3f8 ) - 800c340: 2200 movs r2, #0 - 800c342: 701a strb r2, [r3, #0] + 800c3b6: 4b2e ldr r3, [pc, #184] @ (800c470 ) + 800c3b8: 2200 movs r2, #0 + 800c3ba: 701a strb r2, [r3, #0] App_LedErrPulse(); - 800c344: f001 f8b0 bl 800d4a8 + 800c3bc: f001 f8ac bl 800d518 App_QueuePop(); - 800c348: f000 fb18 bl 800c97c + 800c3c0: f000 fb18 bl 800c9f4 App_Printf("\r\n[WARN] radio tx timeout\r\n"); - 800c34c: 482e ldr r0, [pc, #184] @ (800c408 ) - 800c34e: f000 ff61 bl 800d214 + 800c3c4: 482e ldr r0, [pc, #184] @ (800c480 ) + 800c3c6: f000 ff61 bl 800d28c g_radio_needs_rx_restart = 1U; - 800c352: 4b2b ldr r3, [pc, #172] @ (800c400 ) - 800c354: 2201 movs r2, #1 - 800c356: 701a strb r2, [r3, #0] + 800c3ca: 4b2b ldr r3, [pc, #172] @ (800c478 ) + 800c3cc: 2201 movs r2, #1 + 800c3ce: 701a strb r2, [r3, #0] } if (g_radio_rx_done != 0U) - 800c358: 4b2c ldr r3, [pc, #176] @ (800c40c ) - 800c35a: 781b ldrb r3, [r3, #0] - 800c35c: b2db uxtb r3, r3 - 800c35e: 2b00 cmp r3, #0 - 800c360: d01e beq.n 800c3a0 + 800c3d0: 4b2c ldr r3, [pc, #176] @ (800c484 ) + 800c3d2: 781b ldrb r3, [r3, #0] + 800c3d4: b2db uxtb r3, r3 + 800c3d6: 2b00 cmp r3, #0 + 800c3d8: d01e beq.n 800c418 { g_radio_rx_done = 0U; - 800c362: 4b2a ldr r3, [pc, #168] @ (800c40c ) - 800c364: 2200 movs r2, #0 - 800c366: 701a strb r2, [r3, #0] + 800c3da: 4b2a ldr r3, [pc, #168] @ (800c484 ) + 800c3dc: 2200 movs r2, #0 + 800c3de: 701a strb r2, [r3, #0] App_LedRxPulse(); - 800c368: f001 f884 bl 800d474 + 800c3e0: f001 f882 bl 800d4e8 g_stat_radio_packets_rx++; - 800c36c: 4b28 ldr r3, [pc, #160] @ (800c410 ) - 800c36e: 681b ldr r3, [r3, #0] - 800c370: 3301 adds r3, #1 - 800c372: 4a27 ldr r2, [pc, #156] @ (800c410 ) - 800c374: 6013 str r3, [r2, #0] + 800c3e4: 4b28 ldr r3, [pc, #160] @ (800c488 ) + 800c3e6: 681b ldr r3, [r3, #0] + 800c3e8: 3301 adds r3, #1 + 800c3ea: 4a27 ldr r2, [pc, #156] @ (800c488 ) + 800c3ec: 6013 str r3, [r2, #0] g_stat_radio_bytes_rx += g_rx_payload_len; - 800c376: 4b27 ldr r3, [pc, #156] @ (800c414 ) - 800c378: 881b ldrh r3, [r3, #0] - 800c37a: 461a mov r2, r3 - 800c37c: 4b26 ldr r3, [pc, #152] @ (800c418 ) - 800c37e: 681b ldr r3, [r3, #0] - 800c380: 4413 add r3, r2 - 800c382: 4a25 ldr r2, [pc, #148] @ (800c418 ) - 800c384: 6013 str r3, [r2, #0] + 800c3ee: 4b27 ldr r3, [pc, #156] @ (800c48c ) + 800c3f0: 881b ldrh r3, [r3, #0] + 800c3f2: 461a mov r2, r3 + 800c3f4: 4b26 ldr r3, [pc, #152] @ (800c490 ) + 800c3f6: 681b ldr r3, [r3, #0] + 800c3f8: 4413 add r3, r2 + 800c3fa: 4a25 ldr r2, [pc, #148] @ (800c490 ) + 800c3fc: 6013 str r3, [r2, #0] if (g_mode == APP_MODE_DATA) - 800c386: 4b25 ldr r3, [pc, #148] @ (800c41c ) - 800c388: 781b ldrb r3, [r3, #0] - 800c38a: 2b00 cmp r3, #0 - 800c38c: d105 bne.n 800c39a + 800c3fe: 4b25 ldr r3, [pc, #148] @ (800c494 ) + 800c400: 781b ldrb r3, [r3, #0] + 800c402: 2b00 cmp r3, #0 + 800c404: d105 bne.n 800c412 { App_Write(g_rx_payload, g_rx_payload_len); - 800c38e: 4b21 ldr r3, [pc, #132] @ (800c414 ) - 800c390: 881b ldrh r3, [r3, #0] - 800c392: 4619 mov r1, r3 - 800c394: 4822 ldr r0, [pc, #136] @ (800c420 ) - 800c396: f000 ff69 bl 800d26c + 800c406: 4b21 ldr r3, [pc, #132] @ (800c48c ) + 800c408: 881b ldrh r3, [r3, #0] + 800c40a: 4619 mov r1, r3 + 800c40c: 4822 ldr r0, [pc, #136] @ (800c498 ) + 800c40e: f000 ff69 bl 800d2e4 } g_radio_needs_rx_restart = 1U; - 800c39a: 4b19 ldr r3, [pc, #100] @ (800c400 ) - 800c39c: 2201 movs r2, #1 - 800c39e: 701a strb r2, [r3, #0] + 800c412: 4b19 ldr r3, [pc, #100] @ (800c478 ) + 800c414: 2201 movs r2, #1 + 800c416: 701a strb r2, [r3, #0] } if ((g_radio_rx_timeout != 0U) || (g_radio_rx_error != 0U)) - 800c3a0: 4b20 ldr r3, [pc, #128] @ (800c424 ) - 800c3a2: 781b ldrb r3, [r3, #0] - 800c3a4: b2db uxtb r3, r3 - 800c3a6: 2b00 cmp r3, #0 - 800c3a8: d104 bne.n 800c3b4 - 800c3aa: 4b1f ldr r3, [pc, #124] @ (800c428 ) - 800c3ac: 781b ldrb r3, [r3, #0] - 800c3ae: b2db uxtb r3, r3 - 800c3b0: 2b00 cmp r3, #0 - 800c3b2: d00a beq.n 800c3ca + 800c418: 4b20 ldr r3, [pc, #128] @ (800c49c ) + 800c41a: 781b ldrb r3, [r3, #0] + 800c41c: b2db uxtb r3, r3 + 800c41e: 2b00 cmp r3, #0 + 800c420: d104 bne.n 800c42c + 800c422: 4b1f ldr r3, [pc, #124] @ (800c4a0 ) + 800c424: 781b ldrb r3, [r3, #0] + 800c426: b2db uxtb r3, r3 + 800c428: 2b00 cmp r3, #0 + 800c42a: d00a beq.n 800c442 { g_radio_rx_timeout = 0U; - 800c3b4: 4b1b ldr r3, [pc, #108] @ (800c424 ) - 800c3b6: 2200 movs r2, #0 - 800c3b8: 701a strb r2, [r3, #0] + 800c42c: 4b1b ldr r3, [pc, #108] @ (800c49c ) + 800c42e: 2200 movs r2, #0 + 800c430: 701a strb r2, [r3, #0] g_radio_rx_error = 0U; - 800c3ba: 4b1b ldr r3, [pc, #108] @ (800c428 ) - 800c3bc: 2200 movs r2, #0 - 800c3be: 701a strb r2, [r3, #0] + 800c432: 4b1b ldr r3, [pc, #108] @ (800c4a0 ) + 800c434: 2200 movs r2, #0 + 800c436: 701a strb r2, [r3, #0] App_LedErrPulse(); - 800c3c0: f001 f872 bl 800d4a8 + 800c438: f001 f86e bl 800d518 g_radio_needs_rx_restart = 1U; - 800c3c4: 4b0e ldr r3, [pc, #56] @ (800c400 ) - 800c3c6: 2201 movs r2, #1 - 800c3c8: 701a strb r2, [r3, #0] + 800c43c: 4b0e ldr r3, [pc, #56] @ (800c478 ) + 800c43e: 2201 movs r2, #1 + 800c440: 701a strb r2, [r3, #0] } if ((g_radio_needs_rx_restart != 0U) && (g_radio_busy == 0U) && (g_tx_q_count == 0U)) - 800c3ca: 4b0d ldr r3, [pc, #52] @ (800c400 ) - 800c3cc: 781b ldrb r3, [r3, #0] - 800c3ce: b2db uxtb r3, r3 - 800c3d0: 2b00 cmp r3, #0 - 800c3d2: d00d beq.n 800c3f0 - 800c3d4: 4b08 ldr r3, [pc, #32] @ (800c3f8 ) - 800c3d6: 781b ldrb r3, [r3, #0] - 800c3d8: b2db uxtb r3, r3 - 800c3da: 2b00 cmp r3, #0 - 800c3dc: d108 bne.n 800c3f0 - 800c3de: 4b13 ldr r3, [pc, #76] @ (800c42c ) - 800c3e0: 781b ldrb r3, [r3, #0] - 800c3e2: 2b00 cmp r3, #0 - 800c3e4: d104 bne.n 800c3f0 + 800c442: 4b0d ldr r3, [pc, #52] @ (800c478 ) + 800c444: 781b ldrb r3, [r3, #0] + 800c446: b2db uxtb r3, r3 + 800c448: 2b00 cmp r3, #0 + 800c44a: d00d beq.n 800c468 + 800c44c: 4b08 ldr r3, [pc, #32] @ (800c470 ) + 800c44e: 781b ldrb r3, [r3, #0] + 800c450: b2db uxtb r3, r3 + 800c452: 2b00 cmp r3, #0 + 800c454: d108 bne.n 800c468 + 800c456: 4b13 ldr r3, [pc, #76] @ (800c4a4 ) + 800c458: 781b ldrb r3, [r3, #0] + 800c45a: 2b00 cmp r3, #0 + 800c45c: d104 bne.n 800c468 { g_radio_needs_rx_restart = 0U; - 800c3e6: 4b06 ldr r3, [pc, #24] @ (800c400 ) - 800c3e8: 2200 movs r2, #0 - 800c3ea: 701a strb r2, [r3, #0] + 800c45e: 4b06 ldr r3, [pc, #24] @ (800c478 ) + 800c460: 2200 movs r2, #0 + 800c462: 701a strb r2, [r3, #0] App_RadioEnterRx(); - 800c3ec: f000 f9a6 bl 800c73c + 800c464: f000 f9a6 bl 800c7b4 } } - 800c3f0: bf00 nop - 800c3f2: bd80 pop {r7, pc} - 800c3f4: 20000624 .word 0x20000624 - 800c3f8: 2000063f .word 0x2000063f - 800c3fc: 20000bf8 .word 0x20000bf8 - 800c400: 20000640 .word 0x20000640 - 800c404: 20000625 .word 0x20000625 - 800c408: 0800fb30 .word 0x0800fb30 - 800c40c: 20000626 .word 0x20000626 - 800c410: 20000c00 .word 0x20000c00 - 800c414: 20000720 .word 0x20000720 - 800c418: 20000c04 .word 0x20000c04 - 800c41c: 20000b90 .word 0x20000b90 - 800c420: 20000644 .word 0x20000644 - 800c424: 20000627 .word 0x20000627 - 800c428: 20000628 .word 0x20000628 - 800c42c: 20000a9a .word 0x20000a9a + 800c468: bf00 nop + 800c46a: bd80 pop {r7, pc} + 800c46c: 20000624 .word 0x20000624 + 800c470: 20000678 .word 0x20000678 + 800c474: 20000c30 .word 0x20000c30 + 800c478: 20000679 .word 0x20000679 + 800c47c: 20000625 .word 0x20000625 + 800c480: 0800fb58 .word 0x0800fb58 + 800c484: 20000626 .word 0x20000626 + 800c488: 20000c38 .word 0x20000c38 + 800c48c: 20000758 .word 0x20000758 + 800c490: 20000c3c .word 0x20000c3c + 800c494: 20000bc8 .word 0x20000bc8 + 800c498: 2000067c .word 0x2000067c + 800c49c: 20000627 .word 0x20000627 + 800c4a0: 20000628 .word 0x20000628 + 800c4a4: 20000ad2 .word 0x20000ad2 -0800c430 : +0800c4a8 : static void App_ProcessUartPacketizer(void) { - 800c430: b580 push {r7, lr} - 800c432: b082 sub sp, #8 - 800c434: af00 add r7, sp, #0 + 800c4a8: b580 push {r7, lr} + 800c4aa: b082 sub sp, #8 + 800c4ac: af00 add r7, sp, #0 uint32_t now = HAL_GetTick(); - 800c436: f7f4 fc07 bl 8000c48 - 800c43a: 6078 str r0, [r7, #4] + 800c4ae: f7f4 fbcb bl 8000c48 + 800c4b2: 6078 str r0, [r7, #4] if (g_mode != APP_MODE_DATA) - 800c43c: 4b0d ldr r3, [pc, #52] @ (800c474 ) - 800c43e: 781b ldrb r3, [r3, #0] - 800c440: 2b00 cmp r3, #0 - 800c442: d112 bne.n 800c46a + 800c4b4: 4b0d ldr r3, [pc, #52] @ (800c4ec ) + 800c4b6: 781b ldrb r3, [r3, #0] + 800c4b8: 2b00 cmp r3, #0 + 800c4ba: d112 bne.n 800c4e2 { return; } if ((g_uart_build_len > 0U) && - 800c444: 4b0c ldr r3, [pc, #48] @ (800c478 ) - 800c446: 881b ldrh r3, [r3, #0] - 800c448: 2b00 cmp r3, #0 - 800c44a: d00f beq.n 800c46c + 800c4bc: 4b0c ldr r3, [pc, #48] @ (800c4f0 ) + 800c4be: 881b ldrh r3, [r3, #0] + 800c4c0: 2b00 cmp r3, #0 + 800c4c2: d00f beq.n 800c4e4 ((now - g_uart_last_data_tick) >= g_cfg.uart_packet_timeout_ms) && - 800c44c: 4b0b ldr r3, [pc, #44] @ (800c47c ) - 800c44e: 681b ldr r3, [r3, #0] - 800c450: 687a ldr r2, [r7, #4] - 800c452: 1ad3 subs r3, r2, r3 - 800c454: 4a0a ldr r2, [pc, #40] @ (800c480 ) - 800c456: 8b52 ldrh r2, [r2, #26] + 800c4c4: 4b0b ldr r3, [pc, #44] @ (800c4f4 ) + 800c4c6: 681b ldr r3, [r3, #0] + 800c4c8: 687a ldr r2, [r7, #4] + 800c4ca: 1ad3 subs r3, r2, r3 + 800c4cc: 4a0a ldr r2, [pc, #40] @ (800c4f8 ) + 800c4ce: 8b52 ldrh r2, [r2, #26] if ((g_uart_build_len > 0U) && - 800c458: 4293 cmp r3, r2 - 800c45a: d307 bcc.n 800c46c + 800c4d0: 4293 cmp r3, r2 + 800c4d2: d307 bcc.n 800c4e4 (g_escape.active == 0U)) - 800c45c: 4b09 ldr r3, [pc, #36] @ (800c484 ) - 800c45e: 781b ldrb r3, [r3, #0] + 800c4d4: 4b09 ldr r3, [pc, #36] @ (800c4fc ) + 800c4d6: 781b ldrb r3, [r3, #0] ((now - g_uart_last_data_tick) >= g_cfg.uart_packet_timeout_ms) && - 800c460: 2b00 cmp r3, #0 - 800c462: d103 bne.n 800c46c + 800c4d8: 2b00 cmp r3, #0 + 800c4da: d103 bne.n 800c4e4 { App_DataModeFlushBuilder(); - 800c464: f000 fa24 bl 800c8b0 - 800c468: e000 b.n 800c46c + 800c4dc: f000 fa24 bl 800c928 + 800c4e0: e000 b.n 800c4e4 return; - 800c46a: bf00 nop + 800c4e2: bf00 nop } } - 800c46c: 3708 adds r7, #8 - 800c46e: 46bd mov sp, r7 - 800c470: bd80 pop {r7, pc} - 800c472: bf00 nop - 800c474: 20000b90 .word 0x20000b90 - 800c478: 20000b78 .word 0x20000b78 - 800c47c: 20000b7c .word 0x20000b7c - 800c480: 20000604 .word 0x20000604 - 800c484: 20000b80 .word 0x20000b80 + 800c4e4: 3708 adds r7, #8 + 800c4e6: 46bd mov sp, r7 + 800c4e8: bd80 pop {r7, pc} + 800c4ea: bf00 nop + 800c4ec: 20000bc8 .word 0x20000bc8 + 800c4f0: 20000bb0 .word 0x20000bb0 + 800c4f4: 20000bb4 .word 0x20000bb4 + 800c4f8: 20000604 .word 0x20000604 + 800c4fc: 20000bb8 .word 0x20000bb8 -0800c488 : +0800c500 : static void App_ProcessEscape(void) { - 800c488: b580 push {r7, lr} - 800c48a: b082 sub sp, #8 - 800c48c: af00 add r7, sp, #0 + 800c500: b580 push {r7, lr} + 800c502: b082 sub sp, #8 + 800c504: af00 add r7, sp, #0 uint32_t now = HAL_GetTick(); - 800c48e: f7f4 fbdb bl 8000c48 - 800c492: 6038 str r0, [r7, #0] + 800c506: f7f4 fb9f bl 8000c48 + 800c50a: 6038 str r0, [r7, #0] uint8_t i; if ((g_mode != APP_MODE_DATA) || (g_escape.active == 0U)) - 800c494: 4b22 ldr r3, [pc, #136] @ (800c520 ) - 800c496: 781b ldrb r3, [r3, #0] - 800c498: 2b00 cmp r3, #0 - 800c49a: d13c bne.n 800c516 - 800c49c: 4b21 ldr r3, [pc, #132] @ (800c524 ) - 800c49e: 781b ldrb r3, [r3, #0] - 800c4a0: 2b00 cmp r3, #0 - 800c4a2: d038 beq.n 800c516 + 800c50c: 4b22 ldr r3, [pc, #136] @ (800c598 ) + 800c50e: 781b ldrb r3, [r3, #0] + 800c510: 2b00 cmp r3, #0 + 800c512: d13c bne.n 800c58e + 800c514: 4b21 ldr r3, [pc, #132] @ (800c59c ) + 800c516: 781b ldrb r3, [r3, #0] + 800c518: 2b00 cmp r3, #0 + 800c51a: d038 beq.n 800c58e { return; } if ((g_escape.count == 3U) && ((now - g_escape.last_tick) >= CONFIG_ESCAPE_GUARD_MS)) - 800c4a4: 4b1f ldr r3, [pc, #124] @ (800c524 ) - 800c4a6: 785b ldrb r3, [r3, #1] - 800c4a8: 2b03 cmp r3, #3 - 800c4aa: d10f bne.n 800c4cc - 800c4ac: 4b1d ldr r3, [pc, #116] @ (800c524 ) - 800c4ae: 68db ldr r3, [r3, #12] - 800c4b0: 683a ldr r2, [r7, #0] - 800c4b2: 1ad3 subs r3, r2, r3 - 800c4b4: f5b3 7f48 cmp.w r3, #800 @ 0x320 - 800c4b8: d308 bcc.n 800c4cc + 800c51c: 4b1f ldr r3, [pc, #124] @ (800c59c ) + 800c51e: 785b ldrb r3, [r3, #1] + 800c520: 2b03 cmp r3, #3 + 800c522: d10f bne.n 800c544 + 800c524: 4b1d ldr r3, [pc, #116] @ (800c59c ) + 800c526: 68db ldr r3, [r3, #12] + 800c528: 683a ldr r2, [r7, #0] + 800c52a: 1ad3 subs r3, r2, r3 + 800c52c: f5b3 7f48 cmp.w r3, #800 @ 0x320 + 800c530: d308 bcc.n 800c544 { g_escape.active = 0U; - 800c4ba: 4b1a ldr r3, [pc, #104] @ (800c524 ) - 800c4bc: 2200 movs r2, #0 - 800c4be: 701a strb r2, [r3, #0] + 800c532: 4b1a ldr r3, [pc, #104] @ (800c59c ) + 800c534: 2200 movs r2, #0 + 800c536: 701a strb r2, [r3, #0] g_escape.count = 0U; - 800c4c0: 4b18 ldr r3, [pc, #96] @ (800c524 ) - 800c4c2: 2200 movs r2, #0 - 800c4c4: 705a strb r2, [r3, #1] + 800c538: 4b18 ldr r3, [pc, #96] @ (800c59c ) + 800c53a: 2200 movs r2, #0 + 800c53c: 705a strb r2, [r3, #1] App_EnterConfigMode(); - 800c4c6: f000 f945 bl 800c754 + 800c53e: f000 f945 bl 800c7cc return; - 800c4ca: e025 b.n 800c518 + 800c542: e025 b.n 800c590 } if ((g_escape.count < 3U) && ((now - g_escape.last_tick) >= CONFIG_ESCAPE_GUARD_MS)) - 800c4cc: 4b15 ldr r3, [pc, #84] @ (800c524 ) - 800c4ce: 785b ldrb r3, [r3, #1] - 800c4d0: 2b02 cmp r3, #2 - 800c4d2: d821 bhi.n 800c518 - 800c4d4: 4b13 ldr r3, [pc, #76] @ (800c524 ) - 800c4d6: 68db ldr r3, [r3, #12] - 800c4d8: 683a ldr r2, [r7, #0] - 800c4da: 1ad3 subs r3, r2, r3 - 800c4dc: f5b3 7f48 cmp.w r3, #800 @ 0x320 - 800c4e0: d31a bcc.n 800c518 + 800c544: 4b15 ldr r3, [pc, #84] @ (800c59c ) + 800c546: 785b ldrb r3, [r3, #1] + 800c548: 2b02 cmp r3, #2 + 800c54a: d821 bhi.n 800c590 + 800c54c: 4b13 ldr r3, [pc, #76] @ (800c59c ) + 800c54e: 68db ldr r3, [r3, #12] + 800c550: 683a ldr r2, [r7, #0] + 800c552: 1ad3 subs r3, r2, r3 + 800c554: f5b3 7f48 cmp.w r3, #800 @ 0x320 + 800c558: d31a bcc.n 800c590 { for (i = 0U; i < g_escape.count; i++) - 800c4e2: 2300 movs r3, #0 - 800c4e4: 71fb strb r3, [r7, #7] - 800c4e6: e00a b.n 800c4fe + 800c55a: 2300 movs r3, #0 + 800c55c: 71fb strb r3, [r7, #7] + 800c55e: e00a b.n 800c576 { App_DataModeFeedByte(g_escape.bytes[i], now); - 800c4e8: 79fb ldrb r3, [r7, #7] - 800c4ea: 4a0e ldr r2, [pc, #56] @ (800c524 ) - 800c4ec: 4413 add r3, r2 - 800c4ee: 789b ldrb r3, [r3, #2] - 800c4f0: 6839 ldr r1, [r7, #0] - 800c4f2: 4618 mov r0, r3 - 800c4f4: f000 f99a bl 800c82c + 800c560: 79fb ldrb r3, [r7, #7] + 800c562: 4a0e ldr r2, [pc, #56] @ (800c59c ) + 800c564: 4413 add r3, r2 + 800c566: 789b ldrb r3, [r3, #2] + 800c568: 6839 ldr r1, [r7, #0] + 800c56a: 4618 mov r0, r3 + 800c56c: f000 f99a bl 800c8a4 for (i = 0U; i < g_escape.count; i++) - 800c4f8: 79fb ldrb r3, [r7, #7] - 800c4fa: 3301 adds r3, #1 - 800c4fc: 71fb strb r3, [r7, #7] - 800c4fe: 4b09 ldr r3, [pc, #36] @ (800c524 ) - 800c500: 785b ldrb r3, [r3, #1] - 800c502: 79fa ldrb r2, [r7, #7] - 800c504: 429a cmp r2, r3 - 800c506: d3ef bcc.n 800c4e8 + 800c570: 79fb ldrb r3, [r7, #7] + 800c572: 3301 adds r3, #1 + 800c574: 71fb strb r3, [r7, #7] + 800c576: 4b09 ldr r3, [pc, #36] @ (800c59c ) + 800c578: 785b ldrb r3, [r3, #1] + 800c57a: 79fa ldrb r2, [r7, #7] + 800c57c: 429a cmp r2, r3 + 800c57e: d3ef bcc.n 800c560 } g_escape.active = 0U; - 800c508: 4b06 ldr r3, [pc, #24] @ (800c524 ) - 800c50a: 2200 movs r2, #0 - 800c50c: 701a strb r2, [r3, #0] + 800c580: 4b06 ldr r3, [pc, #24] @ (800c59c ) + 800c582: 2200 movs r2, #0 + 800c584: 701a strb r2, [r3, #0] g_escape.count = 0U; - 800c50e: 4b05 ldr r3, [pc, #20] @ (800c524 ) - 800c510: 2200 movs r2, #0 - 800c512: 705a strb r2, [r3, #1] - 800c514: e000 b.n 800c518 + 800c586: 4b05 ldr r3, [pc, #20] @ (800c59c ) + 800c588: 2200 movs r2, #0 + 800c58a: 705a strb r2, [r3, #1] + 800c58c: e000 b.n 800c590 return; - 800c516: bf00 nop + 800c58e: bf00 nop } } - 800c518: 3708 adds r7, #8 - 800c51a: 46bd mov sp, r7 - 800c51c: bd80 pop {r7, pc} - 800c51e: bf00 nop - 800c520: 20000b90 .word 0x20000b90 - 800c524: 20000b80 .word 0x20000b80 + 800c590: 3708 adds r7, #8 + 800c592: 46bd mov sp, r7 + 800c594: bd80 pop {r7, pc} + 800c596: bf00 nop + 800c598: 20000bc8 .word 0x20000bc8 + 800c59c: 20000bb8 .word 0x20000bb8 -0800c528 : +0800c5a0 : static void App_StartNextTxIfPossible(void) { - 800c528: b598 push {r3, r4, r7, lr} - 800c52a: af00 add r7, sp, #0 + 800c5a0: b598 push {r3, r4, r7, lr} + 800c5a2: af00 add r7, sp, #0 if ((g_mode != APP_MODE_DATA) || (g_radio_busy != 0U) || (g_tx_q_count == 0U)) - 800c52c: 4b16 ldr r3, [pc, #88] @ (800c588 ) - 800c52e: 781b ldrb r3, [r3, #0] - 800c530: 2b00 cmp r3, #0 - 800c532: d126 bne.n 800c582 - 800c534: 4b15 ldr r3, [pc, #84] @ (800c58c ) - 800c536: 781b ldrb r3, [r3, #0] - 800c538: b2db uxtb r3, r3 - 800c53a: 2b00 cmp r3, #0 - 800c53c: d121 bne.n 800c582 - 800c53e: 4b14 ldr r3, [pc, #80] @ (800c590 ) - 800c540: 781b ldrb r3, [r3, #0] - 800c542: 2b00 cmp r3, #0 - 800c544: d01d beq.n 800c582 + 800c5a4: 4b16 ldr r3, [pc, #88] @ (800c600 ) + 800c5a6: 781b ldrb r3, [r3, #0] + 800c5a8: 2b00 cmp r3, #0 + 800c5aa: d126 bne.n 800c5fa + 800c5ac: 4b15 ldr r3, [pc, #84] @ (800c604 ) + 800c5ae: 781b ldrb r3, [r3, #0] + 800c5b0: b2db uxtb r3, r3 + 800c5b2: 2b00 cmp r3, #0 + 800c5b4: d121 bne.n 800c5fa + 800c5b6: 4b14 ldr r3, [pc, #80] @ (800c608 ) + 800c5b8: 781b ldrb r3, [r3, #0] + 800c5ba: 2b00 cmp r3, #0 + 800c5bc: d01d beq.n 800c5fa { return; } App_RadioConfigureTx(); - 800c546: f000 f8ad bl 800c6a4 + 800c5be: f000 f8ad bl 800c71c g_radio_busy = 1U; - 800c54a: 4b10 ldr r3, [pc, #64] @ (800c58c ) - 800c54c: 2201 movs r2, #1 - 800c54e: 701a strb r2, [r3, #0] + 800c5c2: 4b10 ldr r3, [pc, #64] @ (800c604 ) + 800c5c4: 2201 movs r2, #1 + 800c5c6: 701a strb r2, [r3, #0] App_LedTxPulse(); - 800c550: f000 ff76 bl 800d440 + 800c5c8: f000 ff76 bl 800d4b8 (void)Radio.Send(g_tx_queue[g_tx_q_head].data, g_tx_queue[g_tx_q_head].len); - 800c554: 4b0f ldr r3, [pc, #60] @ (800c594 ) - 800c556: 6a9b ldr r3, [r3, #40] @ 0x28 - 800c558: 4a0f ldr r2, [pc, #60] @ (800c598 ) - 800c55a: 7812 ldrb r2, [r2, #0] - 800c55c: 4611 mov r1, r2 - 800c55e: 22dd movs r2, #221 @ 0xdd - 800c560: fb01 f202 mul.w r2, r1, r2 - 800c564: 490d ldr r1, [pc, #52] @ (800c59c ) - 800c566: 1850 adds r0, r2, r1 - 800c568: 4a0b ldr r2, [pc, #44] @ (800c598 ) - 800c56a: 7812 ldrb r2, [r2, #0] - 800c56c: 4614 mov r4, r2 - 800c56e: 490b ldr r1, [pc, #44] @ (800c59c ) - 800c570: 22dd movs r2, #221 @ 0xdd - 800c572: fb04 f202 mul.w r2, r4, r2 - 800c576: 440a add r2, r1 - 800c578: 32dc adds r2, #220 @ 0xdc - 800c57a: 7812 ldrb r2, [r2, #0] - 800c57c: 4611 mov r1, r2 - 800c57e: 4798 blx r3 - 800c580: e000 b.n 800c584 + 800c5cc: 4b0f ldr r3, [pc, #60] @ (800c60c ) + 800c5ce: 6a9b ldr r3, [r3, #40] @ 0x28 + 800c5d0: 4a0f ldr r2, [pc, #60] @ (800c610 ) + 800c5d2: 7812 ldrb r2, [r2, #0] + 800c5d4: 4611 mov r1, r2 + 800c5d6: 22dd movs r2, #221 @ 0xdd + 800c5d8: fb01 f202 mul.w r2, r1, r2 + 800c5dc: 490d ldr r1, [pc, #52] @ (800c614 ) + 800c5de: 1850 adds r0, r2, r1 + 800c5e0: 4a0b ldr r2, [pc, #44] @ (800c610 ) + 800c5e2: 7812 ldrb r2, [r2, #0] + 800c5e4: 4614 mov r4, r2 + 800c5e6: 490b ldr r1, [pc, #44] @ (800c614 ) + 800c5e8: 22dd movs r2, #221 @ 0xdd + 800c5ea: fb04 f202 mul.w r2, r4, r2 + 800c5ee: 440a add r2, r1 + 800c5f0: 32dc adds r2, #220 @ 0xdc + 800c5f2: 7812 ldrb r2, [r2, #0] + 800c5f4: 4611 mov r1, r2 + 800c5f6: 4798 blx r3 + 800c5f8: e000 b.n 800c5fc return; - 800c582: bf00 nop + 800c5fa: bf00 nop } - 800c584: bd98 pop {r3, r4, r7, pc} - 800c586: bf00 nop - 800c588: 20000b90 .word 0x20000b90 - 800c58c: 2000063f .word 0x2000063f - 800c590: 20000a9a .word 0x20000a9a - 800c594: 080103c4 .word 0x080103c4 - 800c598: 20000a98 .word 0x20000a98 - 800c59c: 20000724 .word 0x20000724 + 800c5fc: bd98 pop {r3, r4, r7, pc} + 800c5fe: bf00 nop + 800c600: 20000bc8 .word 0x20000bc8 + 800c604: 20000678 .word 0x20000678 + 800c608: 20000ad2 .word 0x20000ad2 + 800c60c: 080103ec .word 0x080103ec + 800c610: 20000ad0 .word 0x20000ad0 + 800c614: 2000075c .word 0x2000075c -0800c5a0 : +0800c618 : static void App_ApplyConfig(void) { - 800c5a0: b580 push {r7, lr} - 800c5a2: af00 add r7, sp, #0 + 800c618: b580 push {r7, lr} + 800c61a: af00 add r7, sp, #0 App_RadioApplyConfig(); - 800c5a4: f000 f816 bl 800c5d4 + 800c61c: f000 f816 bl 800c64c App_RadioConfigureRx(); - 800c5a8: f000 f828 bl 800c5fc + 800c620: f000 f828 bl 800c674 App_RadioConfigureTx(); - 800c5ac: f000 f87a bl 800c6a4 + 800c624: f000 f87a bl 800c71c if (!Config_Save(&g_cfg)) { - 800c5b0: 4806 ldr r0, [pc, #24] @ (800c5cc ) - 800c5b2: f001 f8cb bl 800d74c - 800c5b6: 4603 mov r3, r0 - 800c5b8: f083 0301 eor.w r3, r3, #1 - 800c5bc: b2db uxtb r3, r3 - 800c5be: 2b00 cmp r3, #0 - 800c5c0: d002 beq.n 800c5c8 + 800c628: 4806 ldr r0, [pc, #24] @ (800c644 ) + 800c62a: f001 f8a3 bl 800d774 + 800c62e: 4603 mov r3, r0 + 800c630: f083 0301 eor.w r3, r3, #1 + 800c634: b2db uxtb r3, r3 + 800c636: 2b00 cmp r3, #0 + 800c638: d002 beq.n 800c640 App_Printf("Error while saving cnf\r\n"); - 800c5c2: 4803 ldr r0, [pc, #12] @ (800c5d0 ) - 800c5c4: f000 fe26 bl 800d214 + 800c63a: 4803 ldr r0, [pc, #12] @ (800c648 ) + 800c63c: f000 fe26 bl 800d28c } } - 800c5c8: bf00 nop - 800c5ca: bd80 pop {r7, pc} - 800c5cc: 20000604 .word 0x20000604 - 800c5d0: 0800fb4c .word 0x0800fb4c + 800c640: bf00 nop + 800c642: bd80 pop {r7, pc} + 800c644: 20000604 .word 0x20000604 + 800c648: 0800fb74 .word 0x0800fb74 -0800c5d4 : +0800c64c : static void App_RadioApplyConfig(void) { - 800c5d4: b580 push {r7, lr} - 800c5d6: af00 add r7, sp, #0 + 800c64c: b580 push {r7, lr} + 800c64e: af00 add r7, sp, #0 Radio.SetChannel(g_cfg.rf_frequency); - 800c5d8: 4b05 ldr r3, [pc, #20] @ (800c5f0 ) - 800c5da: 68db ldr r3, [r3, #12] - 800c5dc: 4a05 ldr r2, [pc, #20] @ (800c5f4 ) - 800c5de: 6812 ldr r2, [r2, #0] - 800c5e0: 4610 mov r0, r2 - 800c5e2: 4798 blx r3 + 800c650: 4b05 ldr r3, [pc, #20] @ (800c668 ) + 800c652: 68db ldr r3, [r3, #12] + 800c654: 4a05 ldr r2, [pc, #20] @ (800c66c ) + 800c656: 6812 ldr r2, [r2, #0] + 800c658: 4610 mov r0, r2 + 800c65a: 4798 blx r3 g_radio_needs_rx_restart = 1U; - 800c5e4: 4b04 ldr r3, [pc, #16] @ (800c5f8 ) - 800c5e6: 2201 movs r2, #1 - 800c5e8: 701a strb r2, [r3, #0] + 800c65c: 4b04 ldr r3, [pc, #16] @ (800c670 ) + 800c65e: 2201 movs r2, #1 + 800c660: 701a strb r2, [r3, #0] } - 800c5ea: bf00 nop - 800c5ec: bd80 pop {r7, pc} - 800c5ee: bf00 nop - 800c5f0: 080103c4 .word 0x080103c4 - 800c5f4: 20000604 .word 0x20000604 - 800c5f8: 20000640 .word 0x20000640 + 800c662: bf00 nop + 800c664: bd80 pop {r7, pc} + 800c666: bf00 nop + 800c668: 080103ec .word 0x080103ec + 800c66c: 20000604 .word 0x20000604 + 800c670: 20000679 .word 0x20000679 -0800c5fc : +0800c674 : static void App_RadioConfigureRx(void) { - 800c5fc: b590 push {r4, r7, lr} - 800c5fe: b08f sub sp, #60 @ 0x3c - 800c600: af00 add r7, sp, #0 + 800c674: b590 push {r4, r7, lr} + 800c676: b08f sub sp, #60 @ 0x3c + 800c678: af00 add r7, sp, #0 RxConfigGeneric_t rx = {0}; - 800c602: 463b mov r3, r7 - 800c604: 2238 movs r2, #56 @ 0x38 - 800c606: 2100 movs r1, #0 - 800c608: 4618 mov r0, r3 - 800c60a: f002 fc9f bl 800ef4c + 800c67a: 463b mov r3, r7 + 800c67c: 2238 movs r2, #56 @ 0x38 + 800c67e: 2100 movs r1, #0 + 800c680: 4618 mov r0, r3 + 800c682: f002 fc77 bl 800ef74 Radio.SetChannel(g_cfg.rf_frequency); - 800c60e: 4b22 ldr r3, [pc, #136] @ (800c698 ) - 800c610: 68db ldr r3, [r3, #12] - 800c612: 4a22 ldr r2, [pc, #136] @ (800c69c ) - 800c614: 6812 ldr r2, [r2, #0] - 800c616: 4610 mov r0, r2 - 800c618: 4798 blx r3 + 800c686: 4b22 ldr r3, [pc, #136] @ (800c710 ) + 800c688: 68db ldr r3, [r3, #12] + 800c68a: 4a22 ldr r2, [pc, #136] @ (800c714 ) + 800c68c: 6812 ldr r2, [r2, #0] + 800c68e: 4610 mov r0, r2 + 800c690: 4798 blx r3 rx.fsk.ModulationShaping = RADIO_FSK_MOD_SHAPING_G_BT_05; - 800c61a: 2309 movs r3, #9 - 800c61c: f887 3020 strb.w r3, [r7, #32] + 800c692: 2309 movs r3, #9 + 800c694: f887 3020 strb.w r3, [r7, #32] rx.fsk.Bandwidth = g_cfg.fsk_bandwidth; - 800c620: 4b1e ldr r3, [pc, #120] @ (800c69c ) - 800c622: 68db ldr r3, [r3, #12] - 800c624: 607b str r3, [r7, #4] + 800c698: 4b1e ldr r3, [pc, #120] @ (800c714 ) + 800c69a: 68db ldr r3, [r3, #12] + 800c69c: 607b str r3, [r7, #4] rx.fsk.BitRate = g_cfg.fsk_bitrate; - 800c626: 4b1d ldr r3, [pc, #116] @ (800c69c ) - 800c628: 689b ldr r3, [r3, #8] - 800c62a: 60bb str r3, [r7, #8] + 800c69e: 4b1d ldr r3, [pc, #116] @ (800c714 ) + 800c6a0: 689b ldr r3, [r3, #8] + 800c6a2: 60bb str r3, [r7, #8] rx.fsk.PreambleLen = g_cfg.fsk_preamble_len; - 800c62c: 4b1b ldr r3, [pc, #108] @ (800c69c ) - 800c62e: 8a9b ldrh r3, [r3, #20] - 800c630: 60fb str r3, [r7, #12] + 800c6a4: 4b1b ldr r3, [pc, #108] @ (800c714 ) + 800c6a6: 8a9b ldrh r3, [r3, #20] + 800c6a8: 60fb str r3, [r7, #12] rx.fsk.SyncWordLength = RADIO_SYNCWORD_LEN; - 800c632: 2303 movs r3, #3 - 800c634: 77bb strb r3, [r7, #30] + 800c6aa: 2303 movs r3, #3 + 800c6ac: 77bb strb r3, [r7, #30] rx.fsk.PreambleMinDetect = RADIO_FSK_PREAMBLE_DETECTOR_08_BITS; - 800c636: 2304 movs r3, #4 - 800c638: 77fb strb r3, [r7, #31] + 800c6ae: 2304 movs r3, #4 + 800c6b0: 77fb strb r3, [r7, #31] rx.fsk.SyncWord = g_cfg.syncword; - 800c63a: 4b19 ldr r3, [pc, #100] @ (800c6a0 ) - 800c63c: 613b str r3, [r7, #16] + 800c6b2: 4b19 ldr r3, [pc, #100] @ (800c718 ) + 800c6b4: 613b str r3, [r7, #16] rx.fsk.whiteSeed = RADIO_WHITENING_SEED; - 800c63e: f240 13ff movw r3, #511 @ 0x1ff - 800c642: 83bb strh r3, [r7, #28] + 800c6b6: f240 13ff movw r3, #511 @ 0x1ff + 800c6ba: 83bb strh r3, [r7, #28] rx.fsk.LengthMode = RADIO_FSK_PACKET_VARIABLE_LENGTH; - 800c644: 2301 movs r3, #1 - 800c646: f887 3022 strb.w r3, [r7, #34] @ 0x22 + 800c6bc: 2301 movs r3, #1 + 800c6be: f887 3022 strb.w r3, [r7, #34] @ 0x22 rx.fsk.CrcLength = RADIO_FSK_CRC_2_BYTES_IBM; - 800c64a: 23f1 movs r3, #241 @ 0xf1 - 800c64c: f887 3023 strb.w r3, [r7, #35] @ 0x23 + 800c6c2: 23f1 movs r3, #241 @ 0xf1 + 800c6c4: f887 3023 strb.w r3, [r7, #35] @ 0x23 rx.fsk.CrcPolynomial = RADIO_CRC_POLY; - 800c650: f248 0305 movw r3, #32773 @ 0x8005 - 800c654: 833b strh r3, [r7, #24] + 800c6c8: f248 0305 movw r3, #32773 @ 0x8005 + 800c6cc: 833b strh r3, [r7, #24] rx.fsk.CrcSeed = RADIO_CRC_SEED; - 800c656: f64f 73ff movw r3, #65535 @ 0xffff - 800c65a: 837b strh r3, [r7, #26] + 800c6ce: f64f 73ff movw r3, #65535 @ 0xffff + 800c6d2: 837b strh r3, [r7, #26] rx.fsk.Whitening = RADIO_FSK_DC_FREEWHITENING; - 800c65c: 2301 movs r3, #1 - 800c65e: f887 3024 strb.w r3, [r7, #36] @ 0x24 + 800c6d4: 2301 movs r3, #1 + 800c6d6: f887 3024 strb.w r3, [r7, #36] @ 0x24 rx.fsk.MaxPayloadLength = RADIO_MAX_PAYLOAD_SIZE; - 800c662: 23dc movs r3, #220 @ 0xdc - 800c664: 617b str r3, [r7, #20] + 800c6da: 23dc movs r3, #220 @ 0xdc + 800c6dc: 617b str r3, [r7, #20] rx.fsk.StopTimerOnPreambleDetect = 0; - 800c666: 2300 movs r3, #0 - 800c668: 603b str r3, [r7, #0] + 800c6de: 2300 movs r3, #0 + 800c6e0: 603b str r3, [r7, #0] rx.fsk.AddrComp = RADIO_FSK_ADDRESSCOMP_FILT_OFF; - 800c66a: 2300 movs r3, #0 - 800c66c: f887 3021 strb.w r3, [r7, #33] @ 0x21 + 800c6e2: 2300 movs r3, #0 + 800c6e4: f887 3021 strb.w r3, [r7, #33] @ 0x21 Radio.Standby(); - 800c670: 4b09 ldr r3, [pc, #36] @ (800c698 ) - 800c672: 6b1b ldr r3, [r3, #48] @ 0x30 - 800c674: 4798 blx r3 + 800c6e8: 4b09 ldr r3, [pc, #36] @ (800c710 ) + 800c6ea: 6b1b ldr r3, [r3, #48] @ 0x30 + 800c6ec: 4798 blx r3 if (0UL != Radio.RadioSetRxGenericConfig(GENERIC_FSK, &rx, RX_CONTINUOUS_ON, 0U)) - 800c676: 4b08 ldr r3, [pc, #32] @ (800c698 ) - 800c678: 6f5c ldr r4, [r3, #116] @ 0x74 - 800c67a: 4639 mov r1, r7 - 800c67c: 2300 movs r3, #0 - 800c67e: 2201 movs r2, #1 - 800c680: 2000 movs r0, #0 - 800c682: 47a0 blx r4 - 800c684: 4603 mov r3, r0 - 800c686: 2b00 cmp r3, #0 - 800c688: d001 beq.n 800c68e + 800c6ee: 4b08 ldr r3, [pc, #32] @ (800c710 ) + 800c6f0: 6f5c ldr r4, [r3, #116] @ 0x74 + 800c6f2: 4639 mov r1, r7 + 800c6f4: 2300 movs r3, #0 + 800c6f6: 2201 movs r2, #1 + 800c6f8: 2000 movs r0, #0 + 800c6fa: 47a0 blx r4 + 800c6fc: 4603 mov r3, r0 + 800c6fe: 2b00 cmp r3, #0 + 800c700: d001 beq.n 800c706 { Error_Handler(); - 800c68a: f7f4 f8a1 bl 80007d0 + 800c702: f7f4 f865 bl 80007d0 } } - 800c68e: bf00 nop - 800c690: 373c adds r7, #60 @ 0x3c - 800c692: 46bd mov sp, r7 - 800c694: bd90 pop {r4, r7, pc} - 800c696: bf00 nop - 800c698: 080103c4 .word 0x080103c4 - 800c69c: 20000604 .word 0x20000604 - 800c6a0: 2000061a .word 0x2000061a + 800c706: bf00 nop + 800c708: 373c adds r7, #60 @ 0x3c + 800c70a: 46bd mov sp, r7 + 800c70c: bd90 pop {r4, r7, pc} + 800c70e: bf00 nop + 800c710: 080103ec .word 0x080103ec + 800c714: 20000604 .word 0x20000604 + 800c718: 2000061a .word 0x2000061a -0800c6a4 : +0800c71c : static void App_RadioConfigureTx(void) { - 800c6a4: b590 push {r4, r7, lr} - 800c6a6: b089 sub sp, #36 @ 0x24 - 800c6a8: af00 add r7, sp, #0 + 800c71c: b590 push {r4, r7, lr} + 800c71e: b089 sub sp, #36 @ 0x24 + 800c720: af00 add r7, sp, #0 TxConfigGeneric_t tx = {0}; - 800c6aa: 1d3b adds r3, r7, #4 - 800c6ac: 2200 movs r2, #0 - 800c6ae: 601a str r2, [r3, #0] - 800c6b0: 605a str r2, [r3, #4] - 800c6b2: 609a str r2, [r3, #8] - 800c6b4: 60da str r2, [r3, #12] - 800c6b6: 611a str r2, [r3, #16] - 800c6b8: 615a str r2, [r3, #20] - 800c6ba: 619a str r2, [r3, #24] + 800c722: 1d3b adds r3, r7, #4 + 800c724: 2200 movs r2, #0 + 800c726: 601a str r2, [r3, #0] + 800c728: 605a str r2, [r3, #4] + 800c72a: 609a str r2, [r3, #8] + 800c72c: 60da str r2, [r3, #12] + 800c72e: 611a str r2, [r3, #16] + 800c730: 615a str r2, [r3, #20] + 800c732: 619a str r2, [r3, #24] Radio.SetChannel(g_cfg.rf_frequency); - 800c6bc: 4b1c ldr r3, [pc, #112] @ (800c730 ) - 800c6be: 68db ldr r3, [r3, #12] - 800c6c0: 4a1c ldr r2, [pc, #112] @ (800c734 ) - 800c6c2: 6812 ldr r2, [r2, #0] - 800c6c4: 4610 mov r0, r2 - 800c6c6: 4798 blx r3 + 800c734: 4b1c ldr r3, [pc, #112] @ (800c7a8 ) + 800c736: 68db ldr r3, [r3, #12] + 800c738: 4a1c ldr r2, [pc, #112] @ (800c7ac ) + 800c73a: 6812 ldr r2, [r2, #0] + 800c73c: 4610 mov r0, r2 + 800c73e: 4798 blx r3 tx.fsk.ModulationShaping = RADIO_FSK_MOD_SHAPING_G_BT_05; - 800c6c8: 2309 movs r3, #9 - 800c6ca: 75fb strb r3, [r7, #23] + 800c740: 2309 movs r3, #9 + 800c742: 75fb strb r3, [r7, #23] tx.fsk.FrequencyDeviation = g_cfg.fsk_fdev; - 800c6cc: 4b19 ldr r3, [pc, #100] @ (800c734 ) - 800c6ce: 691b ldr r3, [r3, #16] - 800c6d0: 61fb str r3, [r7, #28] + 800c744: 4b19 ldr r3, [pc, #100] @ (800c7ac ) + 800c746: 691b ldr r3, [r3, #16] + 800c748: 61fb str r3, [r7, #28] tx.fsk.BitRate = g_cfg.fsk_bitrate; - 800c6d2: 4b18 ldr r3, [pc, #96] @ (800c734 ) - 800c6d4: 689b ldr r3, [r3, #8] - 800c6d6: 607b str r3, [r7, #4] + 800c74a: 4b18 ldr r3, [pc, #96] @ (800c7ac ) + 800c74c: 689b ldr r3, [r3, #8] + 800c74e: 607b str r3, [r7, #4] tx.fsk.PreambleLen = g_cfg.fsk_preamble_len; - 800c6d8: 4b16 ldr r3, [pc, #88] @ (800c734 ) - 800c6da: 8a9b ldrh r3, [r3, #20] - 800c6dc: 60bb str r3, [r7, #8] + 800c750: 4b16 ldr r3, [pc, #88] @ (800c7ac ) + 800c752: 8a9b ldrh r3, [r3, #20] + 800c754: 60bb str r3, [r7, #8] tx.fsk.SyncWordLength = RADIO_SYNCWORD_LEN; - 800c6de: 2303 movs r3, #3 - 800c6e0: 75bb strb r3, [r7, #22] + 800c756: 2303 movs r3, #3 + 800c758: 75bb strb r3, [r7, #22] tx.fsk.SyncWord = g_cfg.syncword; - 800c6e2: 4b15 ldr r3, [pc, #84] @ (800c738 ) - 800c6e4: 60fb str r3, [r7, #12] + 800c75a: 4b15 ldr r3, [pc, #84] @ (800c7b0 ) + 800c75c: 60fb str r3, [r7, #12] tx.fsk.whiteSeed = RADIO_WHITENING_SEED; - 800c6e6: f240 13ff movw r3, #511 @ 0x1ff - 800c6ea: 82bb strh r3, [r7, #20] + 800c75e: f240 13ff movw r3, #511 @ 0x1ff + 800c762: 82bb strh r3, [r7, #20] tx.fsk.HeaderType = RADIO_FSK_PACKET_VARIABLE_LENGTH; - 800c6ec: 2301 movs r3, #1 - 800c6ee: 763b strb r3, [r7, #24] + 800c764: 2301 movs r3, #1 + 800c766: 763b strb r3, [r7, #24] tx.fsk.CrcLength = RADIO_FSK_CRC_2_BYTES_IBM; - 800c6f0: 23f1 movs r3, #241 @ 0xf1 - 800c6f2: 767b strb r3, [r7, #25] + 800c768: 23f1 movs r3, #241 @ 0xf1 + 800c76a: 767b strb r3, [r7, #25] tx.fsk.CrcPolynomial = RADIO_CRC_POLY; - 800c6f4: f248 0305 movw r3, #32773 @ 0x8005 - 800c6f8: 823b strh r3, [r7, #16] + 800c76c: f248 0305 movw r3, #32773 @ 0x8005 + 800c770: 823b strh r3, [r7, #16] tx.fsk.CrcSeed = RADIO_CRC_SEED; - 800c6fa: f64f 73ff movw r3, #65535 @ 0xffff - 800c6fe: 827b strh r3, [r7, #18] + 800c772: f64f 73ff movw r3, #65535 @ 0xffff + 800c776: 827b strh r3, [r7, #18] tx.fsk.Whitening = RADIO_FSK_DC_FREEWHITENING; - 800c700: 2301 movs r3, #1 - 800c702: 76bb strb r3, [r7, #26] + 800c778: 2301 movs r3, #1 + 800c77a: 76bb strb r3, [r7, #26] Radio.Standby(); - 800c704: 4b0a ldr r3, [pc, #40] @ (800c730 ) - 800c706: 6b1b ldr r3, [r3, #48] @ 0x30 - 800c708: 4798 blx r3 + 800c77c: 4b0a ldr r3, [pc, #40] @ (800c7a8 ) + 800c77e: 6b1b ldr r3, [r3, #48] @ 0x30 + 800c780: 4798 blx r3 if (0UL != Radio.RadioSetTxGenericConfig(GENERIC_FSK, &tx, g_cfg.tx_power, TX_TIMEOUT_VALUE_MS)) - 800c70a: 4b09 ldr r3, [pc, #36] @ (800c730 ) - 800c70c: 6f9c ldr r4, [r3, #120] @ 0x78 - 800c70e: 4b09 ldr r3, [pc, #36] @ (800c734 ) - 800c710: f993 2004 ldrsb.w r2, [r3, #4] - 800c714: 1d39 adds r1, r7, #4 - 800c716: f640 33b8 movw r3, #3000 @ 0xbb8 - 800c71a: 2000 movs r0, #0 - 800c71c: 47a0 blx r4 - 800c71e: 4603 mov r3, r0 - 800c720: 2b00 cmp r3, #0 - 800c722: d001 beq.n 800c728 + 800c782: 4b09 ldr r3, [pc, #36] @ (800c7a8 ) + 800c784: 6f9c ldr r4, [r3, #120] @ 0x78 + 800c786: 4b09 ldr r3, [pc, #36] @ (800c7ac ) + 800c788: f993 2004 ldrsb.w r2, [r3, #4] + 800c78c: 1d39 adds r1, r7, #4 + 800c78e: f640 33b8 movw r3, #3000 @ 0xbb8 + 800c792: 2000 movs r0, #0 + 800c794: 47a0 blx r4 + 800c796: 4603 mov r3, r0 + 800c798: 2b00 cmp r3, #0 + 800c79a: d001 beq.n 800c7a0 { Error_Handler(); - 800c724: f7f4 f854 bl 80007d0 + 800c79c: f7f4 f818 bl 80007d0 } } - 800c728: bf00 nop - 800c72a: 3724 adds r7, #36 @ 0x24 - 800c72c: 46bd mov sp, r7 - 800c72e: bd90 pop {r4, r7, pc} - 800c730: 080103c4 .word 0x080103c4 - 800c734: 20000604 .word 0x20000604 - 800c738: 2000061a .word 0x2000061a + 800c7a0: bf00 nop + 800c7a2: 3724 adds r7, #36 @ 0x24 + 800c7a4: 46bd mov sp, r7 + 800c7a6: bd90 pop {r4, r7, pc} + 800c7a8: 080103ec .word 0x080103ec + 800c7ac: 20000604 .word 0x20000604 + 800c7b0: 2000061a .word 0x2000061a -0800c73c : +0800c7b4 : static void App_RadioEnterRx(void) { - 800c73c: b580 push {r7, lr} - 800c73e: af00 add r7, sp, #0 + 800c7b4: b580 push {r7, lr} + 800c7b6: af00 add r7, sp, #0 App_RadioConfigureRx(); - 800c740: f7ff ff5c bl 800c5fc + 800c7b8: f7ff ff5c bl 800c674 Radio.Rx(RX_TIMEOUT_VALUE_MS); - 800c744: 4b02 ldr r3, [pc, #8] @ (800c750 ) - 800c746: 6b5b ldr r3, [r3, #52] @ 0x34 - 800c748: 2000 movs r0, #0 - 800c74a: 4798 blx r3 + 800c7bc: 4b02 ldr r3, [pc, #8] @ (800c7c8 ) + 800c7be: 6b5b ldr r3, [r3, #52] @ 0x34 + 800c7c0: 2000 movs r0, #0 + 800c7c2: 4798 blx r3 } - 800c74c: bf00 nop - 800c74e: bd80 pop {r7, pc} - 800c750: 080103c4 .word 0x080103c4 + 800c7c4: bf00 nop + 800c7c6: bd80 pop {r7, pc} + 800c7c8: 080103ec .word 0x080103ec -0800c754 : +0800c7cc : static void App_EnterConfigMode(void) { - 800c754: b580 push {r7, lr} - 800c756: af00 add r7, sp, #0 + 800c7cc: b580 push {r7, lr} + 800c7ce: af00 add r7, sp, #0 App_ResetDataPath(); - 800c758: f000 f846 bl 800c7e8 + 800c7d0: f000 f846 bl 800c860 g_mode = APP_MODE_CONFIG; - 800c75c: 4b0f ldr r3, [pc, #60] @ (800c79c ) - 800c75e: 2201 movs r2, #1 - 800c760: 701a strb r2, [r3, #0] + 800c7d4: 4b0f ldr r3, [pc, #60] @ (800c814 ) + 800c7d6: 2201 movs r2, #1 + 800c7d8: 701a strb r2, [r3, #0] App_Printf("\r\n\r\n[CONFIG MODE]\r\n"); - 800c762: 480f ldr r0, [pc, #60] @ (800c7a0 ) - 800c764: f000 fd56 bl 800d214 + 800c7da: 480f ldr r0, [pc, #60] @ (800c818 ) + 800c7dc: f000 fd56 bl 800d28c App_Printf("type 'help' for commands\r\n"); - 800c768: 480e ldr r0, [pc, #56] @ (800c7a4 ) - 800c76a: f000 fd53 bl 800d214 + 800c7e0: 480e ldr r0, [pc, #56] @ (800c81c ) + 800c7e2: f000 fd53 bl 800d28c if (!Config_Load(&g_cfg)) - 800c76e: 480e ldr r0, [pc, #56] @ (800c7a8 ) - 800c770: f000 ffbc bl 800d6ec - 800c774: 4603 mov r3, r0 - 800c776: f083 0301 eor.w r3, r3, #1 - 800c77a: b2db uxtb r3, r3 - 800c77c: 2b00 cmp r3, #0 - 800c77e: d008 beq.n 800c792 + 800c7e6: 480e ldr r0, [pc, #56] @ (800c820 ) + 800c7e8: f000 ff94 bl 800d714 + 800c7ec: 4603 mov r3, r0 + 800c7ee: f083 0301 eor.w r3, r3, #1 + 800c7f2: b2db uxtb r3, r3 + 800c7f4: 2b00 cmp r3, #0 + 800c7f6: d008 beq.n 800c80a { App_Printf("Error while loading cnf\r\n"); - 800c780: 480a ldr r0, [pc, #40] @ (800c7ac ) - 800c782: f000 fd47 bl 800d214 + 800c7f8: 480a ldr r0, [pc, #40] @ (800c824 ) + 800c7fa: f000 fd47 bl 800d28c App_Printf("Cnf was reset to defaults\r\n"); - 800c786: 480a ldr r0, [pc, #40] @ (800c7b0 ) - 800c788: f000 fd44 bl 800d214 + 800c7fe: 480a ldr r0, [pc, #40] @ (800c828 ) + 800c800: f000 fd44 bl 800d28c Config_LoadDefaults(&g_cfg); - 800c78c: 4806 ldr r0, [pc, #24] @ (800c7a8 ) - 800c78e: f000 ff59 bl 800d644 + 800c804: 4806 ldr r0, [pc, #24] @ (800c820 ) + 800c806: f000 ff31 bl 800d66c } App_PrintConfigPrompt(); - 800c792: f000 fc25 bl 800cfe0 + 800c80a: f000 fc25 bl 800d058 } - 800c796: bf00 nop - 800c798: bd80 pop {r7, pc} - 800c79a: bf00 nop - 800c79c: 20000b90 .word 0x20000b90 - 800c7a0: 0800fb68 .word 0x0800fb68 - 800c7a4: 0800fb7c .word 0x0800fb7c - 800c7a8: 20000604 .word 0x20000604 - 800c7ac: 0800fb98 .word 0x0800fb98 - 800c7b0: 0800fbb4 .word 0x0800fbb4 + 800c80e: bf00 nop + 800c810: bd80 pop {r7, pc} + 800c812: bf00 nop + 800c814: 20000bc8 .word 0x20000bc8 + 800c818: 0800fb90 .word 0x0800fb90 + 800c81c: 0800fba4 .word 0x0800fba4 + 800c820: 20000604 .word 0x20000604 + 800c824: 0800fbc0 .word 0x0800fbc0 + 800c828: 0800fbdc .word 0x0800fbdc -0800c7b4 : +0800c82c : static void App_ExitConfigMode(void) { - 800c7b4: b580 push {r7, lr} - 800c7b6: af00 add r7, sp, #0 + 800c82c: b580 push {r7, lr} + 800c82e: af00 add r7, sp, #0 g_cfg_line_len = 0U; - 800c7b8: 4b07 ldr r3, [pc, #28] @ (800c7d8 ) - 800c7ba: 2200 movs r2, #0 - 800c7bc: 801a strh r2, [r3, #0] + 800c830: 4b07 ldr r3, [pc, #28] @ (800c850 ) + 800c832: 2200 movs r2, #0 + 800c834: 801a strh r2, [r3, #0] App_ResetDataPath(); - 800c7be: f000 f813 bl 800c7e8 + 800c836: f000 f813 bl 800c860 g_mode = APP_MODE_DATA; - 800c7c2: 4b06 ldr r3, [pc, #24] @ (800c7dc ) - 800c7c4: 2200 movs r2, #0 - 800c7c6: 701a strb r2, [r3, #0] + 800c83a: 4b06 ldr r3, [pc, #24] @ (800c854 ) + 800c83c: 2200 movs r2, #0 + 800c83e: 701a strb r2, [r3, #0] App_Printf("\r\n[DATA MODE]\r\n"); - 800c7c8: 4805 ldr r0, [pc, #20] @ (800c7e0 ) - 800c7ca: f000 fd23 bl 800d214 + 800c840: 4805 ldr r0, [pc, #20] @ (800c858 ) + 800c842: f000 fd23 bl 800d28c g_radio_needs_rx_restart = 1U; - 800c7ce: 4b05 ldr r3, [pc, #20] @ (800c7e4 ) - 800c7d0: 2201 movs r2, #1 - 800c7d2: 701a strb r2, [r3, #0] + 800c846: 4b05 ldr r3, [pc, #20] @ (800c85c ) + 800c848: 2201 movs r2, #1 + 800c84a: 701a strb r2, [r3, #0] } - 800c7d4: bf00 nop - 800c7d6: bd80 pop {r7, pc} - 800c7d8: 20000bf4 .word 0x20000bf4 - 800c7dc: 20000b90 .word 0x20000b90 - 800c7e0: 0800fbd0 .word 0x0800fbd0 - 800c7e4: 20000640 .word 0x20000640 + 800c84c: bf00 nop + 800c84e: bd80 pop {r7, pc} + 800c850: 20000c2c .word 0x20000c2c + 800c854: 20000bc8 .word 0x20000bc8 + 800c858: 0800fbf8 .word 0x0800fbf8 + 800c85c: 20000679 .word 0x20000679 -0800c7e8 : +0800c860 : static void App_ResetDataPath(void) { - 800c7e8: b480 push {r7} - 800c7ea: af00 add r7, sp, #0 + 800c860: b480 push {r7} + 800c862: af00 add r7, sp, #0 g_uart_build_len = 0U; - 800c7ec: 4b0a ldr r3, [pc, #40] @ (800c818 ) - 800c7ee: 2200 movs r2, #0 - 800c7f0: 801a strh r2, [r3, #0] + 800c864: 4b0a ldr r3, [pc, #40] @ (800c890 ) + 800c866: 2200 movs r2, #0 + 800c868: 801a strh r2, [r3, #0] g_escape.active = 0U; - 800c7f2: 4b0a ldr r3, [pc, #40] @ (800c81c ) - 800c7f4: 2200 movs r2, #0 - 800c7f6: 701a strb r2, [r3, #0] + 800c86a: 4b0a ldr r3, [pc, #40] @ (800c894 ) + 800c86c: 2200 movs r2, #0 + 800c86e: 701a strb r2, [r3, #0] g_escape.count = 0U; - 800c7f8: 4b08 ldr r3, [pc, #32] @ (800c81c ) - 800c7fa: 2200 movs r2, #0 - 800c7fc: 705a strb r2, [r3, #1] + 800c870: 4b08 ldr r3, [pc, #32] @ (800c894 ) + 800c872: 2200 movs r2, #0 + 800c874: 705a strb r2, [r3, #1] g_tx_q_head = 0U; - 800c7fe: 4b08 ldr r3, [pc, #32] @ (800c820 ) - 800c800: 2200 movs r2, #0 - 800c802: 701a strb r2, [r3, #0] + 800c876: 4b08 ldr r3, [pc, #32] @ (800c898 ) + 800c878: 2200 movs r2, #0 + 800c87a: 701a strb r2, [r3, #0] g_tx_q_tail = 0U; - 800c804: 4b07 ldr r3, [pc, #28] @ (800c824 ) - 800c806: 2200 movs r2, #0 - 800c808: 701a strb r2, [r3, #0] + 800c87c: 4b07 ldr r3, [pc, #28] @ (800c89c ) + 800c87e: 2200 movs r2, #0 + 800c880: 701a strb r2, [r3, #0] g_tx_q_count = 0U; - 800c80a: 4b07 ldr r3, [pc, #28] @ (800c828 ) - 800c80c: 2200 movs r2, #0 - 800c80e: 701a strb r2, [r3, #0] + 800c882: 4b07 ldr r3, [pc, #28] @ (800c8a0 ) + 800c884: 2200 movs r2, #0 + 800c886: 701a strb r2, [r3, #0] } - 800c810: bf00 nop - 800c812: 46bd mov sp, r7 - 800c814: bc80 pop {r7} - 800c816: 4770 bx lr - 800c818: 20000b78 .word 0x20000b78 - 800c81c: 20000b80 .word 0x20000b80 - 800c820: 20000a98 .word 0x20000a98 - 800c824: 20000a99 .word 0x20000a99 - 800c828: 20000a9a .word 0x20000a9a + 800c888: bf00 nop + 800c88a: 46bd mov sp, r7 + 800c88c: bc80 pop {r7} + 800c88e: 4770 bx lr + 800c890: 20000bb0 .word 0x20000bb0 + 800c894: 20000bb8 .word 0x20000bb8 + 800c898: 20000ad0 .word 0x20000ad0 + 800c89c: 20000ad1 .word 0x20000ad1 + 800c8a0: 20000ad2 .word 0x20000ad2 -0800c82c : +0800c8a4 : static void App_DataModeFeedByte(uint8_t ch, uint32_t now) { - 800c82c: b580 push {r7, lr} - 800c82e: b082 sub sp, #8 - 800c830: af00 add r7, sp, #0 - 800c832: 4603 mov r3, r0 - 800c834: 6039 str r1, [r7, #0] - 800c836: 71fb strb r3, [r7, #7] + 800c8a4: b580 push {r7, lr} + 800c8a6: b082 sub sp, #8 + 800c8a8: af00 add r7, sp, #0 + 800c8aa: 4603 mov r3, r0 + 800c8ac: 6039 str r1, [r7, #0] + 800c8ae: 71fb strb r3, [r7, #7] if (g_uart_build_len < UART_DATA_BUFFER_SIZE) - 800c838: 4b19 ldr r3, [pc, #100] @ (800c8a0 ) - 800c83a: 881b ldrh r3, [r3, #0] - 800c83c: 2bdb cmp r3, #219 @ 0xdb - 800c83e: d812 bhi.n 800c866 + 800c8b0: 4b19 ldr r3, [pc, #100] @ (800c918 ) + 800c8b2: 881b ldrh r3, [r3, #0] + 800c8b4: 2bdb cmp r3, #219 @ 0xdb + 800c8b6: d812 bhi.n 800c8de { g_uart_build_buf[g_uart_build_len++] = ch; - 800c840: 4b17 ldr r3, [pc, #92] @ (800c8a0 ) - 800c842: 881b ldrh r3, [r3, #0] - 800c844: 1c5a adds r2, r3, #1 - 800c846: b291 uxth r1, r2 - 800c848: 4a15 ldr r2, [pc, #84] @ (800c8a0 ) - 800c84a: 8011 strh r1, [r2, #0] - 800c84c: 4619 mov r1, r3 - 800c84e: 4a15 ldr r2, [pc, #84] @ (800c8a4 ) - 800c850: 79fb ldrb r3, [r7, #7] - 800c852: 5453 strb r3, [r2, r1] + 800c8b8: 4b17 ldr r3, [pc, #92] @ (800c918 ) + 800c8ba: 881b ldrh r3, [r3, #0] + 800c8bc: 1c5a adds r2, r3, #1 + 800c8be: b291 uxth r1, r2 + 800c8c0: 4a15 ldr r2, [pc, #84] @ (800c918 ) + 800c8c2: 8011 strh r1, [r2, #0] + 800c8c4: 4619 mov r1, r3 + 800c8c6: 4a15 ldr r2, [pc, #84] @ (800c91c ) + 800c8c8: 79fb ldrb r3, [r7, #7] + 800c8ca: 5453 strb r3, [r2, r1] g_uart_last_data_tick = now; - 800c854: 4a14 ldr r2, [pc, #80] @ (800c8a8 ) - 800c856: 683b ldr r3, [r7, #0] - 800c858: 6013 str r3, [r2, #0] + 800c8cc: 4a14 ldr r2, [pc, #80] @ (800c920 ) + 800c8ce: 683b ldr r3, [r7, #0] + 800c8d0: 6013 str r3, [r2, #0] g_stat_uart_bytes_tx++; - 800c85a: 4b14 ldr r3, [pc, #80] @ (800c8ac ) - 800c85c: 681b ldr r3, [r3, #0] - 800c85e: 3301 adds r3, #1 - 800c860: 4a12 ldr r2, [pc, #72] @ (800c8ac ) - 800c862: 6013 str r3, [r2, #0] + 800c8d2: 4b14 ldr r3, [pc, #80] @ (800c924 ) + 800c8d4: 681b ldr r3, [r3, #0] + 800c8d6: 3301 adds r3, #1 + 800c8d8: 4a12 ldr r2, [pc, #72] @ (800c924 ) + 800c8da: 6013 str r3, [r2, #0] g_uart_build_buf[g_uart_build_len++] = ch; g_uart_last_data_tick = now; g_stat_uart_bytes_tx++; } } } - 800c864: e017 b.n 800c896 + 800c8dc: e017 b.n 800c90e App_DataModeFlushBuilder(); - 800c866: f000 f823 bl 800c8b0 + 800c8de: f000 f823 bl 800c928 if (g_uart_build_len < UART_DATA_BUFFER_SIZE) - 800c86a: 4b0d ldr r3, [pc, #52] @ (800c8a0 ) - 800c86c: 881b ldrh r3, [r3, #0] - 800c86e: 2bdb cmp r3, #219 @ 0xdb - 800c870: d811 bhi.n 800c896 + 800c8e2: 4b0d ldr r3, [pc, #52] @ (800c918 ) + 800c8e4: 881b ldrh r3, [r3, #0] + 800c8e6: 2bdb cmp r3, #219 @ 0xdb + 800c8e8: d811 bhi.n 800c90e g_uart_build_buf[g_uart_build_len++] = ch; - 800c872: 4b0b ldr r3, [pc, #44] @ (800c8a0 ) - 800c874: 881b ldrh r3, [r3, #0] - 800c876: 1c5a adds r2, r3, #1 - 800c878: b291 uxth r1, r2 - 800c87a: 4a09 ldr r2, [pc, #36] @ (800c8a0 ) - 800c87c: 8011 strh r1, [r2, #0] - 800c87e: 4619 mov r1, r3 - 800c880: 4a08 ldr r2, [pc, #32] @ (800c8a4 ) - 800c882: 79fb ldrb r3, [r7, #7] - 800c884: 5453 strb r3, [r2, r1] + 800c8ea: 4b0b ldr r3, [pc, #44] @ (800c918 ) + 800c8ec: 881b ldrh r3, [r3, #0] + 800c8ee: 1c5a adds r2, r3, #1 + 800c8f0: b291 uxth r1, r2 + 800c8f2: 4a09 ldr r2, [pc, #36] @ (800c918 ) + 800c8f4: 8011 strh r1, [r2, #0] + 800c8f6: 4619 mov r1, r3 + 800c8f8: 4a08 ldr r2, [pc, #32] @ (800c91c ) + 800c8fa: 79fb ldrb r3, [r7, #7] + 800c8fc: 5453 strb r3, [r2, r1] g_uart_last_data_tick = now; - 800c886: 4a08 ldr r2, [pc, #32] @ (800c8a8 ) - 800c888: 683b ldr r3, [r7, #0] - 800c88a: 6013 str r3, [r2, #0] + 800c8fe: 4a08 ldr r2, [pc, #32] @ (800c920 ) + 800c900: 683b ldr r3, [r7, #0] + 800c902: 6013 str r3, [r2, #0] g_stat_uart_bytes_tx++; - 800c88c: 4b07 ldr r3, [pc, #28] @ (800c8ac ) - 800c88e: 681b ldr r3, [r3, #0] - 800c890: 3301 adds r3, #1 - 800c892: 4a06 ldr r2, [pc, #24] @ (800c8ac ) - 800c894: 6013 str r3, [r2, #0] + 800c904: 4b07 ldr r3, [pc, #28] @ (800c924 ) + 800c906: 681b ldr r3, [r3, #0] + 800c908: 3301 adds r3, #1 + 800c90a: 4a06 ldr r2, [pc, #24] @ (800c924 ) + 800c90c: 6013 str r3, [r2, #0] } - 800c896: bf00 nop - 800c898: 3708 adds r7, #8 - 800c89a: 46bd mov sp, r7 - 800c89c: bd80 pop {r7, pc} - 800c89e: bf00 nop - 800c8a0: 20000b78 .word 0x20000b78 - 800c8a4: 20000a9c .word 0x20000a9c - 800c8a8: 20000b7c .word 0x20000b7c - 800c8ac: 20000bfc .word 0x20000bfc + 800c90e: bf00 nop + 800c910: 3708 adds r7, #8 + 800c912: 46bd mov sp, r7 + 800c914: bd80 pop {r7, pc} + 800c916: bf00 nop + 800c918: 20000bb0 .word 0x20000bb0 + 800c91c: 20000ad4 .word 0x20000ad4 + 800c920: 20000bb4 .word 0x20000bb4 + 800c924: 20000c34 .word 0x20000c34 -0800c8b0 : +0800c928 : static void App_DataModeFlushBuilder(void) { - 800c8b0: b580 push {r7, lr} - 800c8b2: af00 add r7, sp, #0 + 800c928: b580 push {r7, lr} + 800c92a: af00 add r7, sp, #0 if (g_uart_build_len == 0U) - 800c8b4: 4b0b ldr r3, [pc, #44] @ (800c8e4 ) - 800c8b6: 881b ldrh r3, [r3, #0] - 800c8b8: 2b00 cmp r3, #0 - 800c8ba: d011 beq.n 800c8e0 + 800c92c: 4b0b ldr r3, [pc, #44] @ (800c95c ) + 800c92e: 881b ldrh r3, [r3, #0] + 800c930: 2b00 cmp r3, #0 + 800c932: d011 beq.n 800c958 { return; } if (App_QueuePush(g_uart_build_buf, g_uart_build_len) == 0U) - 800c8bc: 4b09 ldr r3, [pc, #36] @ (800c8e4 ) - 800c8be: 881b ldrh r3, [r3, #0] - 800c8c0: 4619 mov r1, r3 - 800c8c2: 4809 ldr r0, [pc, #36] @ (800c8e8 ) - 800c8c4: f000 f814 bl 800c8f0 - 800c8c8: 4603 mov r3, r0 - 800c8ca: 2b00 cmp r3, #0 - 800c8cc: d104 bne.n 800c8d8 + 800c934: 4b09 ldr r3, [pc, #36] @ (800c95c ) + 800c936: 881b ldrh r3, [r3, #0] + 800c938: 4619 mov r1, r3 + 800c93a: 4809 ldr r0, [pc, #36] @ (800c960 ) + 800c93c: f000 f814 bl 800c968 + 800c940: 4603 mov r3, r0 + 800c942: 2b00 cmp r3, #0 + 800c944: d104 bne.n 800c950 { g_stat_queue_overflow++; - 800c8ce: 4b07 ldr r3, [pc, #28] @ (800c8ec ) - 800c8d0: 681b ldr r3, [r3, #0] - 800c8d2: 3301 adds r3, #1 - 800c8d4: 4a05 ldr r2, [pc, #20] @ (800c8ec ) - 800c8d6: 6013 str r3, [r2, #0] + 800c946: 4b07 ldr r3, [pc, #28] @ (800c964 ) + 800c948: 681b ldr r3, [r3, #0] + 800c94a: 3301 adds r3, #1 + 800c94c: 4a05 ldr r2, [pc, #20] @ (800c964 ) + 800c94e: 6013 str r3, [r2, #0] } g_uart_build_len = 0U; - 800c8d8: 4b02 ldr r3, [pc, #8] @ (800c8e4 ) - 800c8da: 2200 movs r2, #0 - 800c8dc: 801a strh r2, [r3, #0] - 800c8de: e000 b.n 800c8e2 + 800c950: 4b02 ldr r3, [pc, #8] @ (800c95c ) + 800c952: 2200 movs r2, #0 + 800c954: 801a strh r2, [r3, #0] + 800c956: e000 b.n 800c95a return; - 800c8e0: bf00 nop + 800c958: bf00 nop } - 800c8e2: bd80 pop {r7, pc} - 800c8e4: 20000b78 .word 0x20000b78 - 800c8e8: 20000a9c .word 0x20000a9c - 800c8ec: 20000c08 .word 0x20000c08 + 800c95a: bd80 pop {r7, pc} + 800c95c: 20000bb0 .word 0x20000bb0 + 800c960: 20000ad4 .word 0x20000ad4 + 800c964: 20000c40 .word 0x20000c40 -0800c8f0 : +0800c968 : static uint8_t App_QueuePush(const uint8_t *data, uint16_t len) { - 800c8f0: b580 push {r7, lr} - 800c8f2: b082 sub sp, #8 - 800c8f4: af00 add r7, sp, #0 - 800c8f6: 6078 str r0, [r7, #4] - 800c8f8: 460b mov r3, r1 - 800c8fa: 807b strh r3, [r7, #2] + 800c968: b580 push {r7, lr} + 800c96a: b082 sub sp, #8 + 800c96c: af00 add r7, sp, #0 + 800c96e: 6078 str r0, [r7, #4] + 800c970: 460b mov r3, r1 + 800c972: 807b strh r3, [r7, #2] if ((len == 0U) || (len > RADIO_MAX_PAYLOAD_SIZE) || (g_tx_q_count >= TX_QUEUE_DEPTH)) - 800c8fc: 887b ldrh r3, [r7, #2] - 800c8fe: 2b00 cmp r3, #0 - 800c900: d006 beq.n 800c910 - 800c902: 887b ldrh r3, [r7, #2] - 800c904: 2bdc cmp r3, #220 @ 0xdc - 800c906: d803 bhi.n 800c910 - 800c908: 4b19 ldr r3, [pc, #100] @ (800c970 ) - 800c90a: 781b ldrb r3, [r3, #0] - 800c90c: 2b03 cmp r3, #3 - 800c90e: d901 bls.n 800c914 + 800c974: 887b ldrh r3, [r7, #2] + 800c976: 2b00 cmp r3, #0 + 800c978: d006 beq.n 800c988 + 800c97a: 887b ldrh r3, [r7, #2] + 800c97c: 2bdc cmp r3, #220 @ 0xdc + 800c97e: d803 bhi.n 800c988 + 800c980: 4b19 ldr r3, [pc, #100] @ (800c9e8 ) + 800c982: 781b ldrb r3, [r3, #0] + 800c984: 2b03 cmp r3, #3 + 800c986: d901 bls.n 800c98c { return 0U; - 800c910: 2300 movs r3, #0 - 800c912: e029 b.n 800c968 + 800c988: 2300 movs r3, #0 + 800c98a: e029 b.n 800c9e0 } memcpy(g_tx_queue[g_tx_q_tail].data, data, len); - 800c914: 4b17 ldr r3, [pc, #92] @ (800c974 ) - 800c916: 781b ldrb r3, [r3, #0] - 800c918: 461a mov r2, r3 - 800c91a: 23dd movs r3, #221 @ 0xdd - 800c91c: fb02 f303 mul.w r3, r2, r3 - 800c920: 4a15 ldr r2, [pc, #84] @ (800c978 ) - 800c922: 4413 add r3, r2 - 800c924: 887a ldrh r2, [r7, #2] - 800c926: 6879 ldr r1, [r7, #4] - 800c928: 4618 mov r0, r3 - 800c92a: f002 fb55 bl 800efd8 + 800c98c: 4b17 ldr r3, [pc, #92] @ (800c9ec ) + 800c98e: 781b ldrb r3, [r3, #0] + 800c990: 461a mov r2, r3 + 800c992: 23dd movs r3, #221 @ 0xdd + 800c994: fb02 f303 mul.w r3, r2, r3 + 800c998: 4a15 ldr r2, [pc, #84] @ (800c9f0 ) + 800c99a: 4413 add r3, r2 + 800c99c: 887a ldrh r2, [r7, #2] + 800c99e: 6879 ldr r1, [r7, #4] + 800c9a0: 4618 mov r0, r3 + 800c9a2: f002 fb2d bl 800f000 g_tx_queue[g_tx_q_tail].len = (uint8_t)len; - 800c92e: 4b11 ldr r3, [pc, #68] @ (800c974 ) - 800c930: 781b ldrb r3, [r3, #0] - 800c932: 4618 mov r0, r3 - 800c934: 887b ldrh r3, [r7, #2] - 800c936: b2d9 uxtb r1, r3 - 800c938: 4a0f ldr r2, [pc, #60] @ (800c978 ) - 800c93a: 23dd movs r3, #221 @ 0xdd - 800c93c: fb00 f303 mul.w r3, r0, r3 - 800c940: 4413 add r3, r2 - 800c942: 33dc adds r3, #220 @ 0xdc - 800c944: 460a mov r2, r1 - 800c946: 701a strb r2, [r3, #0] + 800c9a6: 4b11 ldr r3, [pc, #68] @ (800c9ec ) + 800c9a8: 781b ldrb r3, [r3, #0] + 800c9aa: 4618 mov r0, r3 + 800c9ac: 887b ldrh r3, [r7, #2] + 800c9ae: b2d9 uxtb r1, r3 + 800c9b0: 4a0f ldr r2, [pc, #60] @ (800c9f0 ) + 800c9b2: 23dd movs r3, #221 @ 0xdd + 800c9b4: fb00 f303 mul.w r3, r0, r3 + 800c9b8: 4413 add r3, r2 + 800c9ba: 33dc adds r3, #220 @ 0xdc + 800c9bc: 460a mov r2, r1 + 800c9be: 701a strb r2, [r3, #0] g_tx_q_tail = (uint8_t)((g_tx_q_tail + 1U) % TX_QUEUE_DEPTH); - 800c948: 4b0a ldr r3, [pc, #40] @ (800c974 ) - 800c94a: 781b ldrb r3, [r3, #0] - 800c94c: 3301 adds r3, #1 - 800c94e: b2db uxtb r3, r3 - 800c950: f003 0303 and.w r3, r3, #3 - 800c954: b2da uxtb r2, r3 - 800c956: 4b07 ldr r3, [pc, #28] @ (800c974 ) - 800c958: 701a strb r2, [r3, #0] + 800c9c0: 4b0a ldr r3, [pc, #40] @ (800c9ec ) + 800c9c2: 781b ldrb r3, [r3, #0] + 800c9c4: 3301 adds r3, #1 + 800c9c6: b2db uxtb r3, r3 + 800c9c8: f003 0303 and.w r3, r3, #3 + 800c9cc: b2da uxtb r2, r3 + 800c9ce: 4b07 ldr r3, [pc, #28] @ (800c9ec ) + 800c9d0: 701a strb r2, [r3, #0] g_tx_q_count++; - 800c95a: 4b05 ldr r3, [pc, #20] @ (800c970 ) - 800c95c: 781b ldrb r3, [r3, #0] - 800c95e: 3301 adds r3, #1 - 800c960: b2da uxtb r2, r3 - 800c962: 4b03 ldr r3, [pc, #12] @ (800c970 ) - 800c964: 701a strb r2, [r3, #0] + 800c9d2: 4b05 ldr r3, [pc, #20] @ (800c9e8 ) + 800c9d4: 781b ldrb r3, [r3, #0] + 800c9d6: 3301 adds r3, #1 + 800c9d8: b2da uxtb r2, r3 + 800c9da: 4b03 ldr r3, [pc, #12] @ (800c9e8 ) + 800c9dc: 701a strb r2, [r3, #0] return 1U; - 800c966: 2301 movs r3, #1 + 800c9de: 2301 movs r3, #1 } - 800c968: 4618 mov r0, r3 - 800c96a: 3708 adds r7, #8 - 800c96c: 46bd mov sp, r7 - 800c96e: bd80 pop {r7, pc} - 800c970: 20000a9a .word 0x20000a9a - 800c974: 20000a99 .word 0x20000a99 - 800c978: 20000724 .word 0x20000724 + 800c9e0: 4618 mov r0, r3 + 800c9e2: 3708 adds r7, #8 + 800c9e4: 46bd mov sp, r7 + 800c9e6: bd80 pop {r7, pc} + 800c9e8: 20000ad2 .word 0x20000ad2 + 800c9ec: 20000ad1 .word 0x20000ad1 + 800c9f0: 2000075c .word 0x2000075c -0800c97c : +0800c9f4 : static void App_QueuePop(void) { - 800c97c: b480 push {r7} - 800c97e: af00 add r7, sp, #0 + 800c9f4: b480 push {r7} + 800c9f6: af00 add r7, sp, #0 if (g_tx_q_count == 0U) - 800c980: 4b0b ldr r3, [pc, #44] @ (800c9b0 ) - 800c982: 781b ldrb r3, [r3, #0] - 800c984: 2b00 cmp r3, #0 - 800c986: d00f beq.n 800c9a8 + 800c9f8: 4b0b ldr r3, [pc, #44] @ (800ca28 ) + 800c9fa: 781b ldrb r3, [r3, #0] + 800c9fc: 2b00 cmp r3, #0 + 800c9fe: d00f beq.n 800ca20 { return; } g_tx_q_head = (uint8_t)((g_tx_q_head + 1U) % TX_QUEUE_DEPTH); - 800c988: 4b0a ldr r3, [pc, #40] @ (800c9b4 ) - 800c98a: 781b ldrb r3, [r3, #0] - 800c98c: 3301 adds r3, #1 - 800c98e: b2db uxtb r3, r3 - 800c990: f003 0303 and.w r3, r3, #3 - 800c994: b2da uxtb r2, r3 - 800c996: 4b07 ldr r3, [pc, #28] @ (800c9b4 ) - 800c998: 701a strb r2, [r3, #0] + 800ca00: 4b0a ldr r3, [pc, #40] @ (800ca2c ) + 800ca02: 781b ldrb r3, [r3, #0] + 800ca04: 3301 adds r3, #1 + 800ca06: b2db uxtb r3, r3 + 800ca08: f003 0303 and.w r3, r3, #3 + 800ca0c: b2da uxtb r2, r3 + 800ca0e: 4b07 ldr r3, [pc, #28] @ (800ca2c ) + 800ca10: 701a strb r2, [r3, #0] g_tx_q_count--; - 800c99a: 4b05 ldr r3, [pc, #20] @ (800c9b0 ) - 800c99c: 781b ldrb r3, [r3, #0] - 800c99e: 3b01 subs r3, #1 - 800c9a0: b2da uxtb r2, r3 - 800c9a2: 4b03 ldr r3, [pc, #12] @ (800c9b0 ) - 800c9a4: 701a strb r2, [r3, #0] - 800c9a6: e000 b.n 800c9aa + 800ca12: 4b05 ldr r3, [pc, #20] @ (800ca28 ) + 800ca14: 781b ldrb r3, [r3, #0] + 800ca16: 3b01 subs r3, #1 + 800ca18: b2da uxtb r2, r3 + 800ca1a: 4b03 ldr r3, [pc, #12] @ (800ca28 ) + 800ca1c: 701a strb r2, [r3, #0] + 800ca1e: e000 b.n 800ca22 return; - 800c9a8: bf00 nop + 800ca20: bf00 nop } - 800c9aa: 46bd mov sp, r7 - 800c9ac: bc80 pop {r7} - 800c9ae: 4770 bx lr - 800c9b0: 20000a9a .word 0x20000a9a - 800c9b4: 20000a98 .word 0x20000a98 + 800ca22: 46bd mov sp, r7 + 800ca24: bc80 pop {r7} + 800ca26: 4770 bx lr + 800ca28: 20000ad2 .word 0x20000ad2 + 800ca2c: 20000ad0 .word 0x20000ad0 -0800c9b8 : +0800ca30 : static void UartRxByteCallback(uint8_t *rxChar, uint16_t size, uint8_t error) { - 800c9b8: b580 push {r7, lr} - 800c9ba: b084 sub sp, #16 - 800c9bc: af00 add r7, sp, #0 - 800c9be: 6078 str r0, [r7, #4] - 800c9c0: 460b mov r3, r1 - 800c9c2: 807b strh r3, [r7, #2] - 800c9c4: 4613 mov r3, r2 - 800c9c6: 707b strb r3, [r7, #1] + 800ca30: b580 push {r7, lr} + 800ca32: b084 sub sp, #16 + 800ca34: af00 add r7, sp, #0 + 800ca36: 6078 str r0, [r7, #4] + 800ca38: 460b mov r3, r1 + 800ca3a: 807b strh r3, [r7, #2] + 800ca3c: 4613 mov r3, r2 + 800ca3e: 707b strb r3, [r7, #1] uint8_t ch; uint32_t now; uint8_t i; if ((error != 0U) || (size == 0U) || (rxChar == NULL)) - 800c9c8: 787b ldrb r3, [r7, #1] - 800c9ca: 2b00 cmp r3, #0 - 800c9cc: f040 808a bne.w 800cae4 - 800c9d0: 887b ldrh r3, [r7, #2] - 800c9d2: 2b00 cmp r3, #0 - 800c9d4: f000 8086 beq.w 800cae4 - 800c9d8: 687b ldr r3, [r7, #4] - 800c9da: 2b00 cmp r3, #0 - 800c9dc: f000 8082 beq.w 800cae4 + 800ca40: 787b ldrb r3, [r7, #1] + 800ca42: 2b00 cmp r3, #0 + 800ca44: f040 808a bne.w 800cb5c + 800ca48: 887b ldrh r3, [r7, #2] + 800ca4a: 2b00 cmp r3, #0 + 800ca4c: f000 8086 beq.w 800cb5c + 800ca50: 687b ldr r3, [r7, #4] + 800ca52: 2b00 cmp r3, #0 + 800ca54: f000 8082 beq.w 800cb5c { return; } ch = rxChar[0]; - 800c9e0: 687b ldr r3, [r7, #4] - 800c9e2: 781b ldrb r3, [r3, #0] - 800c9e4: 73bb strb r3, [r7, #14] + 800ca58: 687b ldr r3, [r7, #4] + 800ca5a: 781b ldrb r3, [r3, #0] + 800ca5c: 73bb strb r3, [r7, #14] now = HAL_GetTick(); - 800c9e6: f7f4 f92f bl 8000c48 - 800c9ea: 60b8 str r0, [r7, #8] + 800ca5e: f7f4 f8f3 bl 8000c48 + 800ca62: 60b8 str r0, [r7, #8] if (g_mode == APP_MODE_CONFIG) - 800c9ec: 4b3f ldr r3, [pc, #252] @ (800caec ) - 800c9ee: 781b ldrb r3, [r3, #0] - 800c9f0: 2b01 cmp r3, #1 - 800c9f2: d104 bne.n 800c9fe + 800ca64: 4b3f ldr r3, [pc, #252] @ (800cb64 ) + 800ca66: 781b ldrb r3, [r3, #0] + 800ca68: 2b01 cmp r3, #1 + 800ca6a: d104 bne.n 800ca76 { App_ConfigFeedByte(ch); - 800c9f4: 7bbb ldrb r3, [r7, #14] - 800c9f6: 4618 mov r0, r3 - 800c9f8: f000 f87e bl 800caf8 + 800ca6c: 7bbb ldrb r3, [r7, #14] + 800ca6e: 4618 mov r0, r3 + 800ca70: f000 f87e bl 800cb70 return; - 800c9fc: e073 b.n 800cae6 + 800ca74: e073 b.n 800cb5e } if (g_escape.active == 0U) - 800c9fe: 4b3c ldr r3, [pc, #240] @ (800caf0 ) - 800ca00: 781b ldrb r3, [r3, #0] - 800ca02: 2b00 cmp r3, #0 - 800ca04: d11f bne.n 800ca46 + 800ca76: 4b3c ldr r3, [pc, #240] @ (800cb68 ) + 800ca78: 781b ldrb r3, [r3, #0] + 800ca7a: 2b00 cmp r3, #0 + 800ca7c: d11f bne.n 800cabe { if (((now - g_uart_last_data_tick) >= CONFIG_ESCAPE_GUARD_MS) && (ch == '+')) - 800ca06: 4b3b ldr r3, [pc, #236] @ (800caf4 ) - 800ca08: 681b ldr r3, [r3, #0] - 800ca0a: 68ba ldr r2, [r7, #8] - 800ca0c: 1ad3 subs r3, r2, r3 - 800ca0e: f5b3 7f48 cmp.w r3, #800 @ 0x320 - 800ca12: d312 bcc.n 800ca3a - 800ca14: 7bbb ldrb r3, [r7, #14] - 800ca16: 2b2b cmp r3, #43 @ 0x2b - 800ca18: d10f bne.n 800ca3a + 800ca7e: 4b3b ldr r3, [pc, #236] @ (800cb6c ) + 800ca80: 681b ldr r3, [r3, #0] + 800ca82: 68ba ldr r2, [r7, #8] + 800ca84: 1ad3 subs r3, r2, r3 + 800ca86: f5b3 7f48 cmp.w r3, #800 @ 0x320 + 800ca8a: d312 bcc.n 800cab2 + 800ca8c: 7bbb ldrb r3, [r7, #14] + 800ca8e: 2b2b cmp r3, #43 @ 0x2b + 800ca90: d10f bne.n 800cab2 { g_escape.active = 1U; - 800ca1a: 4b35 ldr r3, [pc, #212] @ (800caf0 ) - 800ca1c: 2201 movs r2, #1 - 800ca1e: 701a strb r2, [r3, #0] + 800ca92: 4b35 ldr r3, [pc, #212] @ (800cb68 ) + 800ca94: 2201 movs r2, #1 + 800ca96: 701a strb r2, [r3, #0] g_escape.count = 1U; - 800ca20: 4b33 ldr r3, [pc, #204] @ (800caf0 ) - 800ca22: 2201 movs r2, #1 - 800ca24: 705a strb r2, [r3, #1] + 800ca98: 4b33 ldr r3, [pc, #204] @ (800cb68 ) + 800ca9a: 2201 movs r2, #1 + 800ca9c: 705a strb r2, [r3, #1] g_escape.bytes[0] = ch; - 800ca26: 4a32 ldr r2, [pc, #200] @ (800caf0 ) - 800ca28: 7bbb ldrb r3, [r7, #14] - 800ca2a: 7093 strb r3, [r2, #2] + 800ca9e: 4a32 ldr r2, [pc, #200] @ (800cb68 ) + 800caa0: 7bbb ldrb r3, [r7, #14] + 800caa2: 7093 strb r3, [r2, #2] g_escape.start_tick = now; - 800ca2c: 4a30 ldr r2, [pc, #192] @ (800caf0 ) - 800ca2e: 68bb ldr r3, [r7, #8] - 800ca30: 6093 str r3, [r2, #8] + 800caa4: 4a30 ldr r2, [pc, #192] @ (800cb68 ) + 800caa6: 68bb ldr r3, [r7, #8] + 800caa8: 6093 str r3, [r2, #8] g_escape.last_tick = now; - 800ca32: 4a2f ldr r2, [pc, #188] @ (800caf0 ) - 800ca34: 68bb ldr r3, [r7, #8] - 800ca36: 60d3 str r3, [r2, #12] + 800caaa: 4a2f ldr r2, [pc, #188] @ (800cb68 ) + 800caac: 68bb ldr r3, [r7, #8] + 800caae: 60d3 str r3, [r2, #12] return; - 800ca38: e055 b.n 800cae6 + 800cab0: e055 b.n 800cb5e } App_DataModeFeedByte(ch, now); - 800ca3a: 7bbb ldrb r3, [r7, #14] - 800ca3c: 68b9 ldr r1, [r7, #8] - 800ca3e: 4618 mov r0, r3 - 800ca40: f7ff fef4 bl 800c82c + 800cab2: 7bbb ldrb r3, [r7, #14] + 800cab4: 68b9 ldr r1, [r7, #8] + 800cab6: 4618 mov r0, r3 + 800cab8: f7ff fef4 bl 800c8a4 return; - 800ca44: e04f b.n 800cae6 + 800cabc: e04f b.n 800cb5e } if ((ch == '+') && (g_escape.count < 3U)) - 800ca46: 7bbb ldrb r3, [r7, #14] - 800ca48: 2b2b cmp r3, #43 @ 0x2b - 800ca4a: d112 bne.n 800ca72 - 800ca4c: 4b28 ldr r3, [pc, #160] @ (800caf0 ) - 800ca4e: 785b ldrb r3, [r3, #1] - 800ca50: 2b02 cmp r3, #2 - 800ca52: d80e bhi.n 800ca72 + 800cabe: 7bbb ldrb r3, [r7, #14] + 800cac0: 2b2b cmp r3, #43 @ 0x2b + 800cac2: d112 bne.n 800caea + 800cac4: 4b28 ldr r3, [pc, #160] @ (800cb68 ) + 800cac6: 785b ldrb r3, [r3, #1] + 800cac8: 2b02 cmp r3, #2 + 800caca: d80e bhi.n 800caea { g_escape.bytes[g_escape.count++] = ch; - 800ca54: 4b26 ldr r3, [pc, #152] @ (800caf0 ) - 800ca56: 785b ldrb r3, [r3, #1] - 800ca58: 1c5a adds r2, r3, #1 - 800ca5a: b2d1 uxtb r1, r2 - 800ca5c: 4a24 ldr r2, [pc, #144] @ (800caf0 ) - 800ca5e: 7051 strb r1, [r2, #1] - 800ca60: 461a mov r2, r3 - 800ca62: 4b23 ldr r3, [pc, #140] @ (800caf0 ) - 800ca64: 4413 add r3, r2 - 800ca66: 7bba ldrb r2, [r7, #14] - 800ca68: 709a strb r2, [r3, #2] + 800cacc: 4b26 ldr r3, [pc, #152] @ (800cb68 ) + 800cace: 785b ldrb r3, [r3, #1] + 800cad0: 1c5a adds r2, r3, #1 + 800cad2: b2d1 uxtb r1, r2 + 800cad4: 4a24 ldr r2, [pc, #144] @ (800cb68 ) + 800cad6: 7051 strb r1, [r2, #1] + 800cad8: 461a mov r2, r3 + 800cada: 4b23 ldr r3, [pc, #140] @ (800cb68 ) + 800cadc: 4413 add r3, r2 + 800cade: 7bba ldrb r2, [r7, #14] + 800cae0: 709a strb r2, [r3, #2] g_escape.last_tick = now; - 800ca6a: 4a21 ldr r2, [pc, #132] @ (800caf0 ) - 800ca6c: 68bb ldr r3, [r7, #8] - 800ca6e: 60d3 str r3, [r2, #12] + 800cae2: 4a21 ldr r2, [pc, #132] @ (800cb68 ) + 800cae4: 68bb ldr r3, [r7, #8] + 800cae6: 60d3 str r3, [r2, #12] return; - 800ca70: e039 b.n 800cae6 + 800cae8: e039 b.n 800cb5e } for (i = 0U; i < g_escape.count; i++) - 800ca72: 2300 movs r3, #0 - 800ca74: 73fb strb r3, [r7, #15] - 800ca76: e00a b.n 800ca8e + 800caea: 2300 movs r3, #0 + 800caec: 73fb strb r3, [r7, #15] + 800caee: e00a b.n 800cb06 { App_DataModeFeedByte(g_escape.bytes[i], now); - 800ca78: 7bfb ldrb r3, [r7, #15] - 800ca7a: 4a1d ldr r2, [pc, #116] @ (800caf0 ) - 800ca7c: 4413 add r3, r2 - 800ca7e: 789b ldrb r3, [r3, #2] - 800ca80: 68b9 ldr r1, [r7, #8] - 800ca82: 4618 mov r0, r3 - 800ca84: f7ff fed2 bl 800c82c + 800caf0: 7bfb ldrb r3, [r7, #15] + 800caf2: 4a1d ldr r2, [pc, #116] @ (800cb68 ) + 800caf4: 4413 add r3, r2 + 800caf6: 789b ldrb r3, [r3, #2] + 800caf8: 68b9 ldr r1, [r7, #8] + 800cafa: 4618 mov r0, r3 + 800cafc: f7ff fed2 bl 800c8a4 for (i = 0U; i < g_escape.count; i++) - 800ca88: 7bfb ldrb r3, [r7, #15] - 800ca8a: 3301 adds r3, #1 - 800ca8c: 73fb strb r3, [r7, #15] - 800ca8e: 4b18 ldr r3, [pc, #96] @ (800caf0 ) - 800ca90: 785b ldrb r3, [r3, #1] - 800ca92: 7bfa ldrb r2, [r7, #15] - 800ca94: 429a cmp r2, r3 - 800ca96: d3ef bcc.n 800ca78 + 800cb00: 7bfb ldrb r3, [r7, #15] + 800cb02: 3301 adds r3, #1 + 800cb04: 73fb strb r3, [r7, #15] + 800cb06: 4b18 ldr r3, [pc, #96] @ (800cb68 ) + 800cb08: 785b ldrb r3, [r3, #1] + 800cb0a: 7bfa ldrb r2, [r7, #15] + 800cb0c: 429a cmp r2, r3 + 800cb0e: d3ef bcc.n 800caf0 } g_escape.active = 0U; - 800ca98: 4b15 ldr r3, [pc, #84] @ (800caf0 ) - 800ca9a: 2200 movs r2, #0 - 800ca9c: 701a strb r2, [r3, #0] + 800cb10: 4b15 ldr r3, [pc, #84] @ (800cb68 ) + 800cb12: 2200 movs r2, #0 + 800cb14: 701a strb r2, [r3, #0] g_escape.count = 0U; - 800ca9e: 4b14 ldr r3, [pc, #80] @ (800caf0 ) - 800caa0: 2200 movs r2, #0 - 800caa2: 705a strb r2, [r3, #1] + 800cb16: 4b14 ldr r3, [pc, #80] @ (800cb68 ) + 800cb18: 2200 movs r2, #0 + 800cb1a: 705a strb r2, [r3, #1] if (((now - g_uart_last_data_tick) >= CONFIG_ESCAPE_GUARD_MS) && (ch == '+')) - 800caa4: 4b13 ldr r3, [pc, #76] @ (800caf4 ) - 800caa6: 681b ldr r3, [r3, #0] - 800caa8: 68ba ldr r2, [r7, #8] - 800caaa: 1ad3 subs r3, r2, r3 - 800caac: f5b3 7f48 cmp.w r3, #800 @ 0x320 - 800cab0: d312 bcc.n 800cad8 - 800cab2: 7bbb ldrb r3, [r7, #14] - 800cab4: 2b2b cmp r3, #43 @ 0x2b - 800cab6: d10f bne.n 800cad8 + 800cb1c: 4b13 ldr r3, [pc, #76] @ (800cb6c ) + 800cb1e: 681b ldr r3, [r3, #0] + 800cb20: 68ba ldr r2, [r7, #8] + 800cb22: 1ad3 subs r3, r2, r3 + 800cb24: f5b3 7f48 cmp.w r3, #800 @ 0x320 + 800cb28: d312 bcc.n 800cb50 + 800cb2a: 7bbb ldrb r3, [r7, #14] + 800cb2c: 2b2b cmp r3, #43 @ 0x2b + 800cb2e: d10f bne.n 800cb50 { g_escape.active = 1U; - 800cab8: 4b0d ldr r3, [pc, #52] @ (800caf0 ) - 800caba: 2201 movs r2, #1 - 800cabc: 701a strb r2, [r3, #0] + 800cb30: 4b0d ldr r3, [pc, #52] @ (800cb68 ) + 800cb32: 2201 movs r2, #1 + 800cb34: 701a strb r2, [r3, #0] g_escape.count = 1U; - 800cabe: 4b0c ldr r3, [pc, #48] @ (800caf0 ) - 800cac0: 2201 movs r2, #1 - 800cac2: 705a strb r2, [r3, #1] + 800cb36: 4b0c ldr r3, [pc, #48] @ (800cb68 ) + 800cb38: 2201 movs r2, #1 + 800cb3a: 705a strb r2, [r3, #1] g_escape.bytes[0] = ch; - 800cac4: 4a0a ldr r2, [pc, #40] @ (800caf0 ) - 800cac6: 7bbb ldrb r3, [r7, #14] - 800cac8: 7093 strb r3, [r2, #2] + 800cb3c: 4a0a ldr r2, [pc, #40] @ (800cb68 ) + 800cb3e: 7bbb ldrb r3, [r7, #14] + 800cb40: 7093 strb r3, [r2, #2] g_escape.start_tick = now; - 800caca: 4a09 ldr r2, [pc, #36] @ (800caf0 ) - 800cacc: 68bb ldr r3, [r7, #8] - 800cace: 6093 str r3, [r2, #8] + 800cb42: 4a09 ldr r2, [pc, #36] @ (800cb68 ) + 800cb44: 68bb ldr r3, [r7, #8] + 800cb46: 6093 str r3, [r2, #8] g_escape.last_tick = now; - 800cad0: 4a07 ldr r2, [pc, #28] @ (800caf0 ) - 800cad2: 68bb ldr r3, [r7, #8] - 800cad4: 60d3 str r3, [r2, #12] + 800cb48: 4a07 ldr r2, [pc, #28] @ (800cb68 ) + 800cb4a: 68bb ldr r3, [r7, #8] + 800cb4c: 60d3 str r3, [r2, #12] return; - 800cad6: e006 b.n 800cae6 + 800cb4e: e006 b.n 800cb5e } App_DataModeFeedByte(ch, now); - 800cad8: 7bbb ldrb r3, [r7, #14] - 800cada: 68b9 ldr r1, [r7, #8] - 800cadc: 4618 mov r0, r3 - 800cade: f7ff fea5 bl 800c82c - 800cae2: e000 b.n 800cae6 + 800cb50: 7bbb ldrb r3, [r7, #14] + 800cb52: 68b9 ldr r1, [r7, #8] + 800cb54: 4618 mov r0, r3 + 800cb56: f7ff fea5 bl 800c8a4 + 800cb5a: e000 b.n 800cb5e return; - 800cae4: bf00 nop + 800cb5c: bf00 nop } - 800cae6: 3710 adds r7, #16 - 800cae8: 46bd mov sp, r7 - 800caea: bd80 pop {r7, pc} - 800caec: 20000b90 .word 0x20000b90 - 800caf0: 20000b80 .word 0x20000b80 - 800caf4: 20000b7c .word 0x20000b7c + 800cb5e: 3710 adds r7, #16 + 800cb60: 46bd mov sp, r7 + 800cb62: bd80 pop {r7, pc} + 800cb64: 20000bc8 .word 0x20000bc8 + 800cb68: 20000bb8 .word 0x20000bb8 + 800cb6c: 20000bb4 .word 0x20000bb4 -0800caf8 : +0800cb70 : static void App_ConfigFeedByte(uint8_t ch) { - 800caf8: b580 push {r7, lr} - 800cafa: b082 sub sp, #8 - 800cafc: af00 add r7, sp, #0 - 800cafe: 4603 mov r3, r0 - 800cb00: 71fb strb r3, [r7, #7] + 800cb70: b580 push {r7, lr} + 800cb72: b082 sub sp, #8 + 800cb74: af00 add r7, sp, #0 + 800cb76: 4603 mov r3, r0 + 800cb78: 71fb strb r3, [r7, #7] if ((ch == '\r') || (ch == '\n')) - 800cb02: 79fb ldrb r3, [r7, #7] - 800cb04: 2b0d cmp r3, #13 - 800cb06: d002 beq.n 800cb0e - 800cb08: 79fb ldrb r3, [r7, #7] - 800cb0a: 2b0a cmp r3, #10 - 800cb0c: d115 bne.n 800cb3a + 800cb7a: 79fb ldrb r3, [r7, #7] + 800cb7c: 2b0d cmp r3, #13 + 800cb7e: d002 beq.n 800cb86 + 800cb80: 79fb ldrb r3, [r7, #7] + 800cb82: 2b0a cmp r3, #10 + 800cb84: d115 bne.n 800cbb2 { if (g_cfg_line_len > 0U) - 800cb0e: 4b26 ldr r3, [pc, #152] @ (800cba8 ) - 800cb10: 881b ldrh r3, [r3, #0] - 800cb12: 2b00 cmp r3, #0 - 800cb14: d00e beq.n 800cb34 + 800cb86: 4b26 ldr r3, [pc, #152] @ (800cc20 ) + 800cb88: 881b ldrh r3, [r3, #0] + 800cb8a: 2b00 cmp r3, #0 + 800cb8c: d00e beq.n 800cbac { g_cfg_line[g_cfg_line_len] = '\0'; - 800cb16: 4b24 ldr r3, [pc, #144] @ (800cba8 ) - 800cb18: 881b ldrh r3, [r3, #0] - 800cb1a: 461a mov r2, r3 - 800cb1c: 4b23 ldr r3, [pc, #140] @ (800cbac ) - 800cb1e: 2100 movs r1, #0 - 800cb20: 5499 strb r1, [r3, r2] + 800cb8e: 4b24 ldr r3, [pc, #144] @ (800cc20 ) + 800cb90: 881b ldrh r3, [r3, #0] + 800cb92: 461a mov r2, r3 + 800cb94: 4b23 ldr r3, [pc, #140] @ (800cc24 ) + 800cb96: 2100 movs r1, #0 + 800cb98: 5499 strb r1, [r3, r2] App_Printf("\r\n"); - 800cb22: 4823 ldr r0, [pc, #140] @ (800cbb0 ) - 800cb24: f000 fb76 bl 800d214 + 800cb9a: 4823 ldr r0, [pc, #140] @ (800cc28 ) + 800cb9c: f000 fb76 bl 800d28c App_ConfigExecuteLine(g_cfg_line); - 800cb28: 4820 ldr r0, [pc, #128] @ (800cbac ) - 800cb2a: f000 f847 bl 800cbbc + 800cba0: 4820 ldr r0, [pc, #128] @ (800cc24 ) + 800cba2: f000 f847 bl 800cc34 g_cfg_line_len = 0U; - 800cb2e: 4b1e ldr r3, [pc, #120] @ (800cba8 ) - 800cb30: 2200 movs r2, #0 - 800cb32: 801a strh r2, [r3, #0] + 800cba6: 4b1e ldr r3, [pc, #120] @ (800cc20 ) + 800cba8: 2200 movs r2, #0 + 800cbaa: 801a strh r2, [r3, #0] } App_PrintConfigPrompt(); - 800cb34: f000 fa54 bl 800cfe0 + 800cbac: f000 fa54 bl 800d058 return; - 800cb38: e032 b.n 800cba0 + 800cbb0: e032 b.n 800cc18 } if ((ch == 0x08U) || (ch == 0x7FU)) - 800cb3a: 79fb ldrb r3, [r7, #7] - 800cb3c: 2b08 cmp r3, #8 - 800cb3e: d002 beq.n 800cb46 - 800cb40: 79fb ldrb r3, [r7, #7] - 800cb42: 2b7f cmp r3, #127 @ 0x7f - 800cb44: d10e bne.n 800cb64 + 800cbb2: 79fb ldrb r3, [r7, #7] + 800cbb4: 2b08 cmp r3, #8 + 800cbb6: d002 beq.n 800cbbe + 800cbb8: 79fb ldrb r3, [r7, #7] + 800cbba: 2b7f cmp r3, #127 @ 0x7f + 800cbbc: d10e bne.n 800cbdc { if (g_cfg_line_len > 0U) - 800cb46: 4b18 ldr r3, [pc, #96] @ (800cba8 ) - 800cb48: 881b ldrh r3, [r3, #0] - 800cb4a: 2b00 cmp r3, #0 - 800cb4c: d027 beq.n 800cb9e + 800cbbe: 4b18 ldr r3, [pc, #96] @ (800cc20 ) + 800cbc0: 881b ldrh r3, [r3, #0] + 800cbc2: 2b00 cmp r3, #0 + 800cbc4: d027 beq.n 800cc16 { g_cfg_line_len--; - 800cb4e: 4b16 ldr r3, [pc, #88] @ (800cba8 ) - 800cb50: 881b ldrh r3, [r3, #0] - 800cb52: 3b01 subs r3, #1 - 800cb54: b29a uxth r2, r3 - 800cb56: 4b14 ldr r3, [pc, #80] @ (800cba8 ) - 800cb58: 801a strh r2, [r3, #0] + 800cbc6: 4b16 ldr r3, [pc, #88] @ (800cc20 ) + 800cbc8: 881b ldrh r3, [r3, #0] + 800cbca: 3b01 subs r3, #1 + 800cbcc: b29a uxth r2, r3 + 800cbce: 4b14 ldr r3, [pc, #80] @ (800cc20 ) + 800cbd0: 801a strh r2, [r3, #0] App_Write((const uint8_t *)"\b \b", 3U); - 800cb5a: 2103 movs r1, #3 - 800cb5c: 4815 ldr r0, [pc, #84] @ (800cbb4 ) - 800cb5e: f000 fb85 bl 800d26c + 800cbd2: 2103 movs r1, #3 + 800cbd4: 4815 ldr r0, [pc, #84] @ (800cc2c ) + 800cbd6: f000 fb85 bl 800d2e4 } return; - 800cb62: e01c b.n 800cb9e + 800cbda: e01c b.n 800cc16 } if ((isprint(ch) != 0) && (g_cfg_line_len < (CONFIG_LINE_SIZE - 1U))) - 800cb64: 79fb ldrb r3, [r7, #7] - 800cb66: 3301 adds r3, #1 - 800cb68: 4a13 ldr r2, [pc, #76] @ (800cbb8 ) - 800cb6a: 4413 add r3, r2 - 800cb6c: 781b ldrb r3, [r3, #0] - 800cb6e: f003 0397 and.w r3, r3, #151 @ 0x97 - 800cb72: 2b00 cmp r3, #0 - 800cb74: d014 beq.n 800cba0 - 800cb76: 4b0c ldr r3, [pc, #48] @ (800cba8 ) - 800cb78: 881b ldrh r3, [r3, #0] - 800cb7a: 2b5e cmp r3, #94 @ 0x5e - 800cb7c: d810 bhi.n 800cba0 + 800cbdc: 79fb ldrb r3, [r7, #7] + 800cbde: 3301 adds r3, #1 + 800cbe0: 4a13 ldr r2, [pc, #76] @ (800cc30 ) + 800cbe2: 4413 add r3, r2 + 800cbe4: 781b ldrb r3, [r3, #0] + 800cbe6: f003 0397 and.w r3, r3, #151 @ 0x97 + 800cbea: 2b00 cmp r3, #0 + 800cbec: d014 beq.n 800cc18 + 800cbee: 4b0c ldr r3, [pc, #48] @ (800cc20 ) + 800cbf0: 881b ldrh r3, [r3, #0] + 800cbf2: 2b5e cmp r3, #94 @ 0x5e + 800cbf4: d810 bhi.n 800cc18 { g_cfg_line[g_cfg_line_len++] = (char)ch; - 800cb7e: 4b0a ldr r3, [pc, #40] @ (800cba8 ) - 800cb80: 881b ldrh r3, [r3, #0] - 800cb82: 1c5a adds r2, r3, #1 - 800cb84: b291 uxth r1, r2 - 800cb86: 4a08 ldr r2, [pc, #32] @ (800cba8 ) - 800cb88: 8011 strh r1, [r2, #0] - 800cb8a: 461a mov r2, r3 - 800cb8c: 79f9 ldrb r1, [r7, #7] - 800cb8e: 4b07 ldr r3, [pc, #28] @ (800cbac ) - 800cb90: 5499 strb r1, [r3, r2] + 800cbf6: 4b0a ldr r3, [pc, #40] @ (800cc20 ) + 800cbf8: 881b ldrh r3, [r3, #0] + 800cbfa: 1c5a adds r2, r3, #1 + 800cbfc: b291 uxth r1, r2 + 800cbfe: 4a08 ldr r2, [pc, #32] @ (800cc20 ) + 800cc00: 8011 strh r1, [r2, #0] + 800cc02: 461a mov r2, r3 + 800cc04: 79f9 ldrb r1, [r7, #7] + 800cc06: 4b07 ldr r3, [pc, #28] @ (800cc24 ) + 800cc08: 5499 strb r1, [r3, r2] App_Write(&ch, 1U); - 800cb92: 1dfb adds r3, r7, #7 - 800cb94: 2101 movs r1, #1 - 800cb96: 4618 mov r0, r3 - 800cb98: f000 fb68 bl 800d26c - 800cb9c: e000 b.n 800cba0 + 800cc0a: 1dfb adds r3, r7, #7 + 800cc0c: 2101 movs r1, #1 + 800cc0e: 4618 mov r0, r3 + 800cc10: f000 fb68 bl 800d2e4 + 800cc14: e000 b.n 800cc18 return; - 800cb9e: bf00 nop + 800cc16: bf00 nop } } - 800cba0: 3708 adds r7, #8 - 800cba2: 46bd mov sp, r7 - 800cba4: bd80 pop {r7, pc} - 800cba6: bf00 nop - 800cba8: 20000bf4 .word 0x20000bf4 - 800cbac: 20000b94 .word 0x20000b94 - 800cbb0: 0800fbe0 .word 0x0800fbe0 - 800cbb4: 0800fbe4 .word 0x0800fbe4 - 800cbb8: 08010518 .word 0x08010518 + 800cc18: 3708 adds r7, #8 + 800cc1a: 46bd mov sp, r7 + 800cc1c: bd80 pop {r7, pc} + 800cc1e: bf00 nop + 800cc20: 20000c2c .word 0x20000c2c + 800cc24: 20000bcc .word 0x20000bcc + 800cc28: 0800fc08 .word 0x0800fc08 + 800cc2c: 0800fc0c .word 0x0800fc0c + 800cc30: 08010540 .word 0x08010540 -0800cbbc : +0800cc34 : static void App_ConfigExecuteLine(char *line) { - 800cbbc: b580 push {r7, lr} - 800cbbe: b086 sub sp, #24 - 800cbc0: af00 add r7, sp, #0 - 800cbc2: 6078 str r0, [r7, #4] + 800cc34: b580 push {r7, lr} + 800cc36: b086 sub sp, #24 + 800cc38: af00 add r7, sp, #0 + 800cc3a: 6078 str r0, [r7, #4] char *arg; uint32_t u32; uint8_t sync[3]; line = App_SkipSpaces(line); - 800cbc4: 6878 ldr r0, [r7, #4] - 800cbc6: f000 fc19 bl 800d3fc - 800cbca: 6078 str r0, [r7, #4] + 800cc3c: 6878 ldr r0, [r7, #4] + 800cc3e: f000 fc19 bl 800d474 + 800cc42: 6078 str r0, [r7, #4] if (*line == '\0') - 800cbcc: 687b ldr r3, [r7, #4] - 800cbce: 781b ldrb r3, [r3, #0] - 800cbd0: 2b00 cmp r3, #0 - 800cbd2: f000 81ef beq.w 800cfb4 + 800cc44: 687b ldr r3, [r7, #4] + 800cc46: 781b ldrb r3, [r3, #0] + 800cc48: 2b00 cmp r3, #0 + 800cc4a: f000 81ef beq.w 800d02c { return; } if ((strcmp(line, "help") == 0) || (strcmp(line, "?") == 0)) - 800cbd6: 49a0 ldr r1, [pc, #640] @ (800ce58 ) - 800cbd8: 6878 ldr r0, [r7, #4] - 800cbda: f7f3 fad1 bl 8000180 - 800cbde: 4603 mov r3, r0 - 800cbe0: 2b00 cmp r3, #0 - 800cbe2: d006 beq.n 800cbf2 - 800cbe4: 499d ldr r1, [pc, #628] @ (800ce5c ) - 800cbe6: 6878 ldr r0, [r7, #4] - 800cbe8: f7f3 faca bl 8000180 - 800cbec: 4603 mov r3, r0 - 800cbee: 2b00 cmp r3, #0 - 800cbf0: d102 bne.n 800cbf8 + 800cc4e: 49a0 ldr r1, [pc, #640] @ (800ced0 ) + 800cc50: 6878 ldr r0, [r7, #4] + 800cc52: f7f3 fa95 bl 8000180 + 800cc56: 4603 mov r3, r0 + 800cc58: 2b00 cmp r3, #0 + 800cc5a: d006 beq.n 800cc6a + 800cc5c: 499d ldr r1, [pc, #628] @ (800ced4 ) + 800cc5e: 6878 ldr r0, [r7, #4] + 800cc60: f7f3 fa8e bl 8000180 + 800cc64: 4603 mov r3, r0 + 800cc66: 2b00 cmp r3, #0 + 800cc68: d102 bne.n 800cc70 { App_PrintHelp(); - 800cbf2: f000 fa05 bl 800d000 + 800cc6a: f000 fa05 bl 800d078 return; - 800cbf6: e1de b.n 800cfb6 + 800cc6e: e1de b.n 800d02e } if ((strcmp(line, "show") == 0) || (strcmp(line, "status") == 0)) - 800cbf8: 4999 ldr r1, [pc, #612] @ (800ce60 ) - 800cbfa: 6878 ldr r0, [r7, #4] - 800cbfc: f7f3 fac0 bl 8000180 - 800cc00: 4603 mov r3, r0 - 800cc02: 2b00 cmp r3, #0 - 800cc04: d006 beq.n 800cc14 - 800cc06: 4997 ldr r1, [pc, #604] @ (800ce64 ) - 800cc08: 6878 ldr r0, [r7, #4] - 800cc0a: f7f3 fab9 bl 8000180 - 800cc0e: 4603 mov r3, r0 - 800cc10: 2b00 cmp r3, #0 - 800cc12: d102 bne.n 800cc1a + 800cc70: 4999 ldr r1, [pc, #612] @ (800ced8 ) + 800cc72: 6878 ldr r0, [r7, #4] + 800cc74: f7f3 fa84 bl 8000180 + 800cc78: 4603 mov r3, r0 + 800cc7a: 2b00 cmp r3, #0 + 800cc7c: d006 beq.n 800cc8c + 800cc7e: 4997 ldr r1, [pc, #604] @ (800cedc ) + 800cc80: 6878 ldr r0, [r7, #4] + 800cc82: f7f3 fa7d bl 8000180 + 800cc86: 4603 mov r3, r0 + 800cc88: 2b00 cmp r3, #0 + 800cc8a: d102 bne.n 800cc92 { App_PrintStatus(); - 800cc14: f000 fa44 bl 800d0a0 + 800cc8c: f000 fa44 bl 800d118 return; - 800cc18: e1cd b.n 800cfb6 + 800cc90: e1cd b.n 800d02e } if (strcmp(line, "exit") == 0) - 800cc1a: 4993 ldr r1, [pc, #588] @ (800ce68 ) - 800cc1c: 6878 ldr r0, [r7, #4] - 800cc1e: f7f3 faaf bl 8000180 - 800cc22: 4603 mov r3, r0 - 800cc24: 2b00 cmp r3, #0 - 800cc26: d102 bne.n 800cc2e + 800cc92: 4993 ldr r1, [pc, #588] @ (800cee0 ) + 800cc94: 6878 ldr r0, [r7, #4] + 800cc96: f7f3 fa73 bl 8000180 + 800cc9a: 4603 mov r3, r0 + 800cc9c: 2b00 cmp r3, #0 + 800cc9e: d102 bne.n 800cca6 { App_ExitConfigMode(); - 800cc28: f7ff fdc4 bl 800c7b4 + 800cca0: f7ff fdc4 bl 800c82c return; - 800cc2c: e1c3 b.n 800cfb6 + 800cca4: e1c3 b.n 800d02e } if (strcmp(line, "save") == 0) - 800cc2e: 498f ldr r1, [pc, #572] @ (800ce6c ) - 800cc30: 6878 ldr r0, [r7, #4] - 800cc32: f7f3 faa5 bl 8000180 - 800cc36: 4603 mov r3, r0 - 800cc38: 2b00 cmp r3, #0 - 800cc3a: d102 bne.n 800cc42 + 800cca6: 498f ldr r1, [pc, #572] @ (800cee4 ) + 800cca8: 6878 ldr r0, [r7, #4] + 800ccaa: f7f3 fa69 bl 8000180 + 800ccae: 4603 mov r3, r0 + 800ccb0: 2b00 cmp r3, #0 + 800ccb2: d102 bne.n 800ccba { App_ApplyConfig(); - 800cc3c: f7ff fcb0 bl 800c5a0 + 800ccb4: f7ff fcb0 bl 800c618 return; - 800cc40: e1b9 b.n 800cfb6 + 800ccb8: e1b9 b.n 800d02e } if (strcmp(line, "defaults") == 0) - 800cc42: 498b ldr r1, [pc, #556] @ (800ce70 ) - 800cc44: 6878 ldr r0, [r7, #4] - 800cc46: f7f3 fa9b bl 8000180 - 800cc4a: 4603 mov r3, r0 - 800cc4c: 2b00 cmp r3, #0 - 800cc4e: d106 bne.n 800cc5e + 800ccba: 498b ldr r1, [pc, #556] @ (800cee8 ) + 800ccbc: 6878 ldr r0, [r7, #4] + 800ccbe: f7f3 fa5f bl 8000180 + 800ccc2: 4603 mov r3, r0 + 800ccc4: 2b00 cmp r3, #0 + 800ccc6: d106 bne.n 800ccd6 { Config_LoadDefaults(&g_cfg); - 800cc50: 4888 ldr r0, [pc, #544] @ (800ce74 ) - 800cc52: f000 fcf7 bl 800d644 + 800ccc8: 4888 ldr r0, [pc, #544] @ (800ceec ) + 800ccca: f000 fccf bl 800d66c App_Printf("defaults restored\r\n"); - 800cc56: 4888 ldr r0, [pc, #544] @ (800ce78 ) - 800cc58: f000 fadc bl 800d214 + 800ccce: 4888 ldr r0, [pc, #544] @ (800cef0 ) + 800ccd0: f000 fadc bl 800d28c return; - 800cc5c: e1ab b.n 800cfb6 + 800ccd4: e1ab b.n 800d02e } if (strncmp(line, "freq ", 5) == 0) - 800cc5e: 2205 movs r2, #5 - 800cc60: 4986 ldr r1, [pc, #536] @ (800ce7c ) - 800cc62: 6878 ldr r0, [r7, #4] - 800cc64: f002 f97a bl 800ef5c - 800cc68: 4603 mov r3, r0 - 800cc6a: 2b00 cmp r3, #0 - 800cc6c: d11d bne.n 800ccaa + 800ccd6: 2205 movs r2, #5 + 800ccd8: 4986 ldr r1, [pc, #536] @ (800cef4 ) + 800ccda: 6878 ldr r0, [r7, #4] + 800ccdc: f002 f952 bl 800ef84 + 800cce0: 4603 mov r3, r0 + 800cce2: 2b00 cmp r3, #0 + 800cce4: d11d bne.n 800cd22 { u32 = strtoul(&line[5], NULL, 10); - 800cc6e: 687b ldr r3, [r7, #4] - 800cc70: 3305 adds r3, #5 - 800cc72: 220a movs r2, #10 - 800cc74: 2100 movs r1, #0 - 800cc76: 4618 mov r0, r3 - 800cc78: f002 f922 bl 800eec0 - 800cc7c: 6138 str r0, [r7, #16] + 800cce6: 687b ldr r3, [r7, #4] + 800cce8: 3305 adds r3, #5 + 800ccea: 220a movs r2, #10 + 800ccec: 2100 movs r1, #0 + 800ccee: 4618 mov r0, r3 + 800ccf0: f002 f8fa bl 800eee8 + 800ccf4: 6138 str r0, [r7, #16] if (u32 < 150000000UL || u32 > 960000000UL) - 800cc7e: 693b ldr r3, [r7, #16] - 800cc80: 4a7f ldr r2, [pc, #508] @ (800ce80 ) - 800cc82: 4293 cmp r3, r2 - 800cc84: d903 bls.n 800cc8e - 800cc86: 693b ldr r3, [r7, #16] - 800cc88: 4a7e ldr r2, [pc, #504] @ (800ce84 ) - 800cc8a: 4293 cmp r3, r2 - 800cc8c: d903 bls.n 800cc96 + 800ccf6: 693b ldr r3, [r7, #16] + 800ccf8: 4a7f ldr r2, [pc, #508] @ (800cef8 ) + 800ccfa: 4293 cmp r3, r2 + 800ccfc: d903 bls.n 800cd06 + 800ccfe: 693b ldr r3, [r7, #16] + 800cd00: 4a7e ldr r2, [pc, #504] @ (800cefc ) + 800cd02: 4293 cmp r3, r2 + 800cd04: d903 bls.n 800cd0e { App_Printf("bad frequency\r\n"); - 800cc8e: 487e ldr r0, [pc, #504] @ (800ce88 ) - 800cc90: f000 fac0 bl 800d214 + 800cd06: 487e ldr r0, [pc, #504] @ (800cf00 ) + 800cd08: f000 fac0 bl 800d28c return; - 800cc94: e18f b.n 800cfb6 + 800cd0c: e18f b.n 800d02e } g_cfg.rf_frequency = u32; - 800cc96: 4a77 ldr r2, [pc, #476] @ (800ce74 ) - 800cc98: 693b ldr r3, [r7, #16] - 800cc9a: 6013 str r3, [r2, #0] + 800cd0e: 4a77 ldr r2, [pc, #476] @ (800ceec ) + 800cd10: 693b ldr r3, [r7, #16] + 800cd12: 6013 str r3, [r2, #0] App_Printf("freq=%lu\r\n", (unsigned long)g_cfg.rf_frequency); - 800cc9c: 4b75 ldr r3, [pc, #468] @ (800ce74 ) - 800cc9e: 681b ldr r3, [r3, #0] - 800cca0: 4619 mov r1, r3 - 800cca2: 487a ldr r0, [pc, #488] @ (800ce8c ) - 800cca4: f000 fab6 bl 800d214 + 800cd14: 4b75 ldr r3, [pc, #468] @ (800ceec ) + 800cd16: 681b ldr r3, [r3, #0] + 800cd18: 4619 mov r1, r3 + 800cd1a: 487a ldr r0, [pc, #488] @ (800cf04 ) + 800cd1c: f000 fab6 bl 800d28c return; - 800cca8: e185 b.n 800cfb6 + 800cd20: e185 b.n 800d02e } if (strncmp(line, "power ", 6) == 0) - 800ccaa: 2206 movs r2, #6 - 800ccac: 4978 ldr r1, [pc, #480] @ (800ce90 ) - 800ccae: 6878 ldr r0, [r7, #4] - 800ccb0: f002 f954 bl 800ef5c - 800ccb4: 4603 mov r3, r0 - 800ccb6: 2b00 cmp r3, #0 - 800ccb8: d11e bne.n 800ccf8 + 800cd22: 2206 movs r2, #6 + 800cd24: 4978 ldr r1, [pc, #480] @ (800cf08 ) + 800cd26: 6878 ldr r0, [r7, #4] + 800cd28: f002 f92c bl 800ef84 + 800cd2c: 4603 mov r3, r0 + 800cd2e: 2b00 cmp r3, #0 + 800cd30: d11e bne.n 800cd70 { long pwr = strtol(&line[6], NULL, 10); - 800ccba: 687b ldr r3, [r7, #4] - 800ccbc: 3306 adds r3, #6 - 800ccbe: 220a movs r2, #10 - 800ccc0: 2100 movs r1, #0 - 800ccc2: 4618 mov r0, r3 - 800ccc4: f002 f884 bl 800edd0 - 800ccc8: 60f8 str r0, [r7, #12] + 800cd32: 687b ldr r3, [r7, #4] + 800cd34: 3306 adds r3, #6 + 800cd36: 220a movs r2, #10 + 800cd38: 2100 movs r1, #0 + 800cd3a: 4618 mov r0, r3 + 800cd3c: f002 f85c bl 800edf8 + 800cd40: 60f8 str r0, [r7, #12] if ((pwr < -9L) || (pwr > 22L)) - 800ccca: 68fb ldr r3, [r7, #12] - 800cccc: f113 0f09 cmn.w r3, #9 - 800ccd0: db02 blt.n 800ccd8 - 800ccd2: 68fb ldr r3, [r7, #12] - 800ccd4: 2b16 cmp r3, #22 - 800ccd6: dd03 ble.n 800cce0 + 800cd42: 68fb ldr r3, [r7, #12] + 800cd44: f113 0f09 cmn.w r3, #9 + 800cd48: db02 blt.n 800cd50 + 800cd4a: 68fb ldr r3, [r7, #12] + 800cd4c: 2b16 cmp r3, #22 + 800cd4e: dd03 ble.n 800cd58 { App_Printf("bad power\r\n"); - 800ccd8: 486e ldr r0, [pc, #440] @ (800ce94 ) - 800ccda: f000 fa9b bl 800d214 + 800cd50: 486e ldr r0, [pc, #440] @ (800cf0c ) + 800cd52: f000 fa9b bl 800d28c return; - 800ccde: e16a b.n 800cfb6 + 800cd56: e16a b.n 800d02e } g_cfg.tx_power = (int8_t)pwr; - 800cce0: 68fb ldr r3, [r7, #12] - 800cce2: b25a sxtb r2, r3 - 800cce4: 4b63 ldr r3, [pc, #396] @ (800ce74 ) - 800cce6: 711a strb r2, [r3, #4] + 800cd58: 68fb ldr r3, [r7, #12] + 800cd5a: b25a sxtb r2, r3 + 800cd5c: 4b63 ldr r3, [pc, #396] @ (800ceec ) + 800cd5e: 711a strb r2, [r3, #4] App_Printf("power=%d\r\n", g_cfg.tx_power); - 800cce8: 4b62 ldr r3, [pc, #392] @ (800ce74 ) - 800ccea: f993 3004 ldrsb.w r3, [r3, #4] - 800ccee: 4619 mov r1, r3 - 800ccf0: 4869 ldr r0, [pc, #420] @ (800ce98 ) - 800ccf2: f000 fa8f bl 800d214 + 800cd60: 4b62 ldr r3, [pc, #392] @ (800ceec ) + 800cd62: f993 3004 ldrsb.w r3, [r3, #4] + 800cd66: 4619 mov r1, r3 + 800cd68: 4869 ldr r0, [pc, #420] @ (800cf10 ) + 800cd6a: f000 fa8f bl 800d28c return; - 800ccf6: e15e b.n 800cfb6 + 800cd6e: e15e b.n 800d02e } if (strncmp(line, "bitrate ", 8) == 0) - 800ccf8: 2208 movs r2, #8 - 800ccfa: 4968 ldr r1, [pc, #416] @ (800ce9c ) - 800ccfc: 6878 ldr r0, [r7, #4] - 800ccfe: f002 f92d bl 800ef5c - 800cd02: 4603 mov r3, r0 - 800cd04: 2b00 cmp r3, #0 - 800cd06: d11d bne.n 800cd44 + 800cd70: 2208 movs r2, #8 + 800cd72: 4968 ldr r1, [pc, #416] @ (800cf14 ) + 800cd74: 6878 ldr r0, [r7, #4] + 800cd76: f002 f905 bl 800ef84 + 800cd7a: 4603 mov r3, r0 + 800cd7c: 2b00 cmp r3, #0 + 800cd7e: d11d bne.n 800cdbc { u32 = strtoul(&line[8], NULL, 10); - 800cd08: 687b ldr r3, [r7, #4] - 800cd0a: 3308 adds r3, #8 - 800cd0c: 220a movs r2, #10 - 800cd0e: 2100 movs r1, #0 - 800cd10: 4618 mov r0, r3 - 800cd12: f002 f8d5 bl 800eec0 - 800cd16: 6138 str r0, [r7, #16] + 800cd80: 687b ldr r3, [r7, #4] + 800cd82: 3308 adds r3, #8 + 800cd84: 220a movs r2, #10 + 800cd86: 2100 movs r1, #0 + 800cd88: 4618 mov r0, r3 + 800cd8a: f002 f8ad bl 800eee8 + 800cd8e: 6138 str r0, [r7, #16] if ((u32 < 600UL) || (u32 > 300000UL)) - 800cd18: 693b ldr r3, [r7, #16] - 800cd1a: f5b3 7f16 cmp.w r3, #600 @ 0x258 - 800cd1e: d303 bcc.n 800cd28 - 800cd20: 693b ldr r3, [r7, #16] - 800cd22: 4a5f ldr r2, [pc, #380] @ (800cea0 ) - 800cd24: 4293 cmp r3, r2 - 800cd26: d903 bls.n 800cd30 + 800cd90: 693b ldr r3, [r7, #16] + 800cd92: f5b3 7f16 cmp.w r3, #600 @ 0x258 + 800cd96: d303 bcc.n 800cda0 + 800cd98: 693b ldr r3, [r7, #16] + 800cd9a: 4a5f ldr r2, [pc, #380] @ (800cf18 ) + 800cd9c: 4293 cmp r3, r2 + 800cd9e: d903 bls.n 800cda8 { App_Printf("bad bitrate\r\n"); - 800cd28: 485e ldr r0, [pc, #376] @ (800cea4 ) - 800cd2a: f000 fa73 bl 800d214 + 800cda0: 485e ldr r0, [pc, #376] @ (800cf1c ) + 800cda2: f000 fa73 bl 800d28c return; - 800cd2e: e142 b.n 800cfb6 + 800cda6: e142 b.n 800d02e } g_cfg.fsk_bitrate = u32; - 800cd30: 4a50 ldr r2, [pc, #320] @ (800ce74 ) - 800cd32: 693b ldr r3, [r7, #16] - 800cd34: 6093 str r3, [r2, #8] + 800cda8: 4a50 ldr r2, [pc, #320] @ (800ceec ) + 800cdaa: 693b ldr r3, [r7, #16] + 800cdac: 6093 str r3, [r2, #8] App_Printf("bitrate=%lu\r\n", (unsigned long)g_cfg.fsk_bitrate); - 800cd36: 4b4f ldr r3, [pc, #316] @ (800ce74 ) - 800cd38: 689b ldr r3, [r3, #8] - 800cd3a: 4619 mov r1, r3 - 800cd3c: 485a ldr r0, [pc, #360] @ (800cea8 ) - 800cd3e: f000 fa69 bl 800d214 + 800cdae: 4b4f ldr r3, [pc, #316] @ (800ceec ) + 800cdb0: 689b ldr r3, [r3, #8] + 800cdb2: 4619 mov r1, r3 + 800cdb4: 485a ldr r0, [pc, #360] @ (800cf20 ) + 800cdb6: f000 fa69 bl 800d28c return; - 800cd42: e138 b.n 800cfb6 + 800cdba: e138 b.n 800d02e } if (strncmp(line, "bandwidth ", 10) == 0) - 800cd44: 220a movs r2, #10 - 800cd46: 4959 ldr r1, [pc, #356] @ (800ceac ) - 800cd48: 6878 ldr r0, [r7, #4] - 800cd4a: f002 f907 bl 800ef5c - 800cd4e: 4603 mov r3, r0 - 800cd50: 2b00 cmp r3, #0 - 800cd52: d11e bne.n 800cd92 + 800cdbc: 220a movs r2, #10 + 800cdbe: 4959 ldr r1, [pc, #356] @ (800cf24 ) + 800cdc0: 6878 ldr r0, [r7, #4] + 800cdc2: f002 f8df bl 800ef84 + 800cdc6: 4603 mov r3, r0 + 800cdc8: 2b00 cmp r3, #0 + 800cdca: d11e bne.n 800ce0a { u32 = strtoul(&line[10], NULL, 10); - 800cd54: 687b ldr r3, [r7, #4] - 800cd56: 330a adds r3, #10 - 800cd58: 220a movs r2, #10 - 800cd5a: 2100 movs r1, #0 - 800cd5c: 4618 mov r0, r3 - 800cd5e: f002 f8af bl 800eec0 - 800cd62: 6138 str r0, [r7, #16] + 800cdcc: 687b ldr r3, [r7, #4] + 800cdce: 330a adds r3, #10 + 800cdd0: 220a movs r2, #10 + 800cdd2: 2100 movs r1, #0 + 800cdd4: 4618 mov r0, r3 + 800cdd6: f002 f887 bl 800eee8 + 800cdda: 6138 str r0, [r7, #16] if ((u32 < 2600UL) || (u32 > 250000UL)) - 800cd64: 693b ldr r3, [r7, #16] - 800cd66: f640 2227 movw r2, #2599 @ 0xa27 - 800cd6a: 4293 cmp r3, r2 - 800cd6c: d903 bls.n 800cd76 - 800cd6e: 693b ldr r3, [r7, #16] - 800cd70: 4a4f ldr r2, [pc, #316] @ (800ceb0 ) - 800cd72: 4293 cmp r3, r2 - 800cd74: d903 bls.n 800cd7e + 800cddc: 693b ldr r3, [r7, #16] + 800cdde: f640 2227 movw r2, #2599 @ 0xa27 + 800cde2: 4293 cmp r3, r2 + 800cde4: d903 bls.n 800cdee + 800cde6: 693b ldr r3, [r7, #16] + 800cde8: 4a4f ldr r2, [pc, #316] @ (800cf28 ) + 800cdea: 4293 cmp r3, r2 + 800cdec: d903 bls.n 800cdf6 { App_Printf("bad bandwidth\r\n"); - 800cd76: 484f ldr r0, [pc, #316] @ (800ceb4 ) - 800cd78: f000 fa4c bl 800d214 + 800cdee: 484f ldr r0, [pc, #316] @ (800cf2c ) + 800cdf0: f000 fa4c bl 800d28c return; - 800cd7c: e11b b.n 800cfb6 + 800cdf4: e11b b.n 800d02e } g_cfg.fsk_bandwidth = u32; - 800cd7e: 4a3d ldr r2, [pc, #244] @ (800ce74 ) - 800cd80: 693b ldr r3, [r7, #16] - 800cd82: 60d3 str r3, [r2, #12] + 800cdf6: 4a3d ldr r2, [pc, #244] @ (800ceec ) + 800cdf8: 693b ldr r3, [r7, #16] + 800cdfa: 60d3 str r3, [r2, #12] App_Printf("bandwidth=%lu\r\n", (unsigned long)g_cfg.fsk_bandwidth); - 800cd84: 4b3b ldr r3, [pc, #236] @ (800ce74 ) - 800cd86: 68db ldr r3, [r3, #12] - 800cd88: 4619 mov r1, r3 - 800cd8a: 484b ldr r0, [pc, #300] @ (800ceb8 ) - 800cd8c: f000 fa42 bl 800d214 + 800cdfc: 4b3b ldr r3, [pc, #236] @ (800ceec ) + 800cdfe: 68db ldr r3, [r3, #12] + 800ce00: 4619 mov r1, r3 + 800ce02: 484b ldr r0, [pc, #300] @ (800cf30 ) + 800ce04: f000 fa42 bl 800d28c return; - 800cd90: e111 b.n 800cfb6 + 800ce08: e111 b.n 800d02e } if (strncmp(line, "fdev ", 5) == 0) - 800cd92: 2205 movs r2, #5 - 800cd94: 4949 ldr r1, [pc, #292] @ (800cebc ) - 800cd96: 6878 ldr r0, [r7, #4] - 800cd98: f002 f8e0 bl 800ef5c - 800cd9c: 4603 mov r3, r0 - 800cd9e: 2b00 cmp r3, #0 - 800cda0: d119 bne.n 800cdd6 + 800ce0a: 2205 movs r2, #5 + 800ce0c: 4949 ldr r1, [pc, #292] @ (800cf34 ) + 800ce0e: 6878 ldr r0, [r7, #4] + 800ce10: f002 f8b8 bl 800ef84 + 800ce14: 4603 mov r3, r0 + 800ce16: 2b00 cmp r3, #0 + 800ce18: d119 bne.n 800ce4e { u32 = strtoul(&line[5], NULL, 10); - 800cda2: 687b ldr r3, [r7, #4] - 800cda4: 3305 adds r3, #5 - 800cda6: 220a movs r2, #10 - 800cda8: 2100 movs r1, #0 - 800cdaa: 4618 mov r0, r3 - 800cdac: f002 f888 bl 800eec0 - 800cdb0: 6138 str r0, [r7, #16] + 800ce1a: 687b ldr r3, [r7, #4] + 800ce1c: 3305 adds r3, #5 + 800ce1e: 220a movs r2, #10 + 800ce20: 2100 movs r1, #0 + 800ce22: 4618 mov r0, r3 + 800ce24: f002 f860 bl 800eee8 + 800ce28: 6138 str r0, [r7, #16] if (u32 > 200000UL) - 800cdb2: 693b ldr r3, [r7, #16] - 800cdb4: 4a42 ldr r2, [pc, #264] @ (800cec0 ) - 800cdb6: 4293 cmp r3, r2 - 800cdb8: d903 bls.n 800cdc2 + 800ce2a: 693b ldr r3, [r7, #16] + 800ce2c: 4a42 ldr r2, [pc, #264] @ (800cf38 ) + 800ce2e: 4293 cmp r3, r2 + 800ce30: d903 bls.n 800ce3a { App_Printf("bad fdev\r\n"); - 800cdba: 4842 ldr r0, [pc, #264] @ (800cec4 ) - 800cdbc: f000 fa2a bl 800d214 + 800ce32: 4842 ldr r0, [pc, #264] @ (800cf3c ) + 800ce34: f000 fa2a bl 800d28c return; - 800cdc0: e0f9 b.n 800cfb6 + 800ce38: e0f9 b.n 800d02e } g_cfg.fsk_fdev = u32; - 800cdc2: 4a2c ldr r2, [pc, #176] @ (800ce74 ) - 800cdc4: 693b ldr r3, [r7, #16] - 800cdc6: 6113 str r3, [r2, #16] + 800ce3a: 4a2c ldr r2, [pc, #176] @ (800ceec ) + 800ce3c: 693b ldr r3, [r7, #16] + 800ce3e: 6113 str r3, [r2, #16] App_Printf("fdev=%lu\r\n", (unsigned long)g_cfg.fsk_fdev); - 800cdc8: 4b2a ldr r3, [pc, #168] @ (800ce74 ) - 800cdca: 691b ldr r3, [r3, #16] - 800cdcc: 4619 mov r1, r3 - 800cdce: 483e ldr r0, [pc, #248] @ (800cec8 ) - 800cdd0: f000 fa20 bl 800d214 + 800ce40: 4b2a ldr r3, [pc, #168] @ (800ceec ) + 800ce42: 691b ldr r3, [r3, #16] + 800ce44: 4619 mov r1, r3 + 800ce46: 483e ldr r0, [pc, #248] @ (800cf40 ) + 800ce48: f000 fa20 bl 800d28c return; - 800cdd4: e0ef b.n 800cfb6 + 800ce4c: e0ef b.n 800d02e } if (strncmp(line, "preamble ", 9) == 0) - 800cdd6: 2209 movs r2, #9 - 800cdd8: 493c ldr r1, [pc, #240] @ (800cecc ) - 800cdda: 6878 ldr r0, [r7, #4] - 800cddc: f002 f8be bl 800ef5c - 800cde0: 4603 mov r3, r0 - 800cde2: 2b00 cmp r3, #0 - 800cde4: d11d bne.n 800ce22 + 800ce4e: 2209 movs r2, #9 + 800ce50: 493c ldr r1, [pc, #240] @ (800cf44 ) + 800ce52: 6878 ldr r0, [r7, #4] + 800ce54: f002 f896 bl 800ef84 + 800ce58: 4603 mov r3, r0 + 800ce5a: 2b00 cmp r3, #0 + 800ce5c: d11d bne.n 800ce9a { u32 = strtoul(&line[9], NULL, 10); - 800cde6: 687b ldr r3, [r7, #4] - 800cde8: 3309 adds r3, #9 - 800cdea: 220a movs r2, #10 - 800cdec: 2100 movs r1, #0 - 800cdee: 4618 mov r0, r3 - 800cdf0: f002 f866 bl 800eec0 - 800cdf4: 6138 str r0, [r7, #16] + 800ce5e: 687b ldr r3, [r7, #4] + 800ce60: 3309 adds r3, #9 + 800ce62: 220a movs r2, #10 + 800ce64: 2100 movs r1, #0 + 800ce66: 4618 mov r0, r3 + 800ce68: f002 f83e bl 800eee8 + 800ce6c: 6138 str r0, [r7, #16] if ((u32 < 2UL) || (u32 > 65535UL)) - 800cdf6: 693b ldr r3, [r7, #16] - 800cdf8: 2b01 cmp r3, #1 - 800cdfa: d903 bls.n 800ce04 - 800cdfc: 693b ldr r3, [r7, #16] - 800cdfe: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 800ce02: d303 bcc.n 800ce0c + 800ce6e: 693b ldr r3, [r7, #16] + 800ce70: 2b01 cmp r3, #1 + 800ce72: d903 bls.n 800ce7c + 800ce74: 693b ldr r3, [r7, #16] + 800ce76: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 800ce7a: d303 bcc.n 800ce84 { App_Printf("bad preamble\r\n"); - 800ce04: 4832 ldr r0, [pc, #200] @ (800ced0 ) - 800ce06: f000 fa05 bl 800d214 + 800ce7c: 4832 ldr r0, [pc, #200] @ (800cf48 ) + 800ce7e: f000 fa05 bl 800d28c return; - 800ce0a: e0d4 b.n 800cfb6 + 800ce82: e0d4 b.n 800d02e } g_cfg.fsk_preamble_len = (uint16_t)u32; - 800ce0c: 693b ldr r3, [r7, #16] - 800ce0e: b29a uxth r2, r3 - 800ce10: 4b18 ldr r3, [pc, #96] @ (800ce74 ) - 800ce12: 829a strh r2, [r3, #20] + 800ce84: 693b ldr r3, [r7, #16] + 800ce86: b29a uxth r2, r3 + 800ce88: 4b18 ldr r3, [pc, #96] @ (800ceec ) + 800ce8a: 829a strh r2, [r3, #20] App_Printf("preamble=%u\r\n", g_cfg.fsk_preamble_len); - 800ce14: 4b17 ldr r3, [pc, #92] @ (800ce74 ) - 800ce16: 8a9b ldrh r3, [r3, #20] - 800ce18: 4619 mov r1, r3 - 800ce1a: 482e ldr r0, [pc, #184] @ (800ced4 ) - 800ce1c: f000 f9fa bl 800d214 + 800ce8c: 4b17 ldr r3, [pc, #92] @ (800ceec ) + 800ce8e: 8a9b ldrh r3, [r3, #20] + 800ce90: 4619 mov r1, r3 + 800ce92: 482e ldr r0, [pc, #184] @ (800cf4c ) + 800ce94: f000 f9fa bl 800d28c return; - 800ce20: e0c9 b.n 800cfb6 + 800ce98: e0c9 b.n 800d02e } if (strncmp(line, "timeout ", 8) == 0) - 800ce22: 2208 movs r2, #8 - 800ce24: 492c ldr r1, [pc, #176] @ (800ced8 ) - 800ce26: 6878 ldr r0, [r7, #4] - 800ce28: f002 f898 bl 800ef5c - 800ce2c: 4603 mov r3, r0 - 800ce2e: 2b00 cmp r3, #0 - 800ce30: d161 bne.n 800cef6 + 800ce9a: 2208 movs r2, #8 + 800ce9c: 492c ldr r1, [pc, #176] @ (800cf50 ) + 800ce9e: 6878 ldr r0, [r7, #4] + 800cea0: f002 f870 bl 800ef84 + 800cea4: 4603 mov r3, r0 + 800cea6: 2b00 cmp r3, #0 + 800cea8: d161 bne.n 800cf6e { u32 = strtoul(&line[8], NULL, 10); - 800ce32: 687b ldr r3, [r7, #4] - 800ce34: 3308 adds r3, #8 - 800ce36: 220a movs r2, #10 - 800ce38: 2100 movs r1, #0 - 800ce3a: 4618 mov r0, r3 - 800ce3c: f002 f840 bl 800eec0 - 800ce40: 6138 str r0, [r7, #16] + 800ceaa: 687b ldr r3, [r7, #4] + 800ceac: 3308 adds r3, #8 + 800ceae: 220a movs r2, #10 + 800ceb0: 2100 movs r1, #0 + 800ceb2: 4618 mov r0, r3 + 800ceb4: f002 f818 bl 800eee8 + 800ceb8: 6138 str r0, [r7, #16] if ((u32 < 1UL) || (u32 > 1000UL)) - 800ce42: 693b ldr r3, [r7, #16] - 800ce44: 2b00 cmp r3, #0 - 800ce46: d003 beq.n 800ce50 - 800ce48: 693b ldr r3, [r7, #16] - 800ce4a: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800ce4e: d947 bls.n 800cee0 + 800ceba: 693b ldr r3, [r7, #16] + 800cebc: 2b00 cmp r3, #0 + 800cebe: d003 beq.n 800cec8 + 800cec0: 693b ldr r3, [r7, #16] + 800cec2: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800cec6: d947 bls.n 800cf58 { App_Printf("bad timeout\r\n"); - 800ce50: 4822 ldr r0, [pc, #136] @ (800cedc ) - 800ce52: f000 f9df bl 800d214 + 800cec8: 4822 ldr r0, [pc, #136] @ (800cf54 ) + 800ceca: f000 f9df bl 800d28c return; - 800ce56: e0ae b.n 800cfb6 - 800ce58: 0800fbe8 .word 0x0800fbe8 - 800ce5c: 0800fbf0 .word 0x0800fbf0 - 800ce60: 0800fbf4 .word 0x0800fbf4 - 800ce64: 0800fbfc .word 0x0800fbfc - 800ce68: 0800fc04 .word 0x0800fc04 - 800ce6c: 0800fc0c .word 0x0800fc0c - 800ce70: 0800fc14 .word 0x0800fc14 - 800ce74: 20000604 .word 0x20000604 - 800ce78: 0800fc20 .word 0x0800fc20 - 800ce7c: 0800fc34 .word 0x0800fc34 - 800ce80: 08f0d17f .word 0x08f0d17f - 800ce84: 39387000 .word 0x39387000 - 800ce88: 0800fc3c .word 0x0800fc3c - 800ce8c: 0800fc4c .word 0x0800fc4c - 800ce90: 0800fc58 .word 0x0800fc58 - 800ce94: 0800fc60 .word 0x0800fc60 - 800ce98: 0800fc6c .word 0x0800fc6c - 800ce9c: 0800fc78 .word 0x0800fc78 - 800cea0: 000493e0 .word 0x000493e0 - 800cea4: 0800fc84 .word 0x0800fc84 - 800cea8: 0800fc94 .word 0x0800fc94 - 800ceac: 0800fca4 .word 0x0800fca4 - 800ceb0: 0003d090 .word 0x0003d090 - 800ceb4: 0800fcb0 .word 0x0800fcb0 - 800ceb8: 0800fcc0 .word 0x0800fcc0 - 800cebc: 0800fcd0 .word 0x0800fcd0 - 800cec0: 00030d40 .word 0x00030d40 - 800cec4: 0800fcd8 .word 0x0800fcd8 - 800cec8: 0800fce4 .word 0x0800fce4 - 800cecc: 0800fcf0 .word 0x0800fcf0 - 800ced0: 0800fcfc .word 0x0800fcfc - 800ced4: 0800fd0c .word 0x0800fd0c - 800ced8: 0800fd1c .word 0x0800fd1c - 800cedc: 0800fd28 .word 0x0800fd28 + 800cece: e0ae b.n 800d02e + 800ced0: 0800fc10 .word 0x0800fc10 + 800ced4: 0800fc18 .word 0x0800fc18 + 800ced8: 0800fc1c .word 0x0800fc1c + 800cedc: 0800fc24 .word 0x0800fc24 + 800cee0: 0800fc2c .word 0x0800fc2c + 800cee4: 0800fc34 .word 0x0800fc34 + 800cee8: 0800fc3c .word 0x0800fc3c + 800ceec: 20000604 .word 0x20000604 + 800cef0: 0800fc48 .word 0x0800fc48 + 800cef4: 0800fc5c .word 0x0800fc5c + 800cef8: 08f0d17f .word 0x08f0d17f + 800cefc: 39387000 .word 0x39387000 + 800cf00: 0800fc64 .word 0x0800fc64 + 800cf04: 0800fc74 .word 0x0800fc74 + 800cf08: 0800fc80 .word 0x0800fc80 + 800cf0c: 0800fc88 .word 0x0800fc88 + 800cf10: 0800fc94 .word 0x0800fc94 + 800cf14: 0800fca0 .word 0x0800fca0 + 800cf18: 000493e0 .word 0x000493e0 + 800cf1c: 0800fcac .word 0x0800fcac + 800cf20: 0800fcbc .word 0x0800fcbc + 800cf24: 0800fccc .word 0x0800fccc + 800cf28: 0003d090 .word 0x0003d090 + 800cf2c: 0800fcd8 .word 0x0800fcd8 + 800cf30: 0800fce8 .word 0x0800fce8 + 800cf34: 0800fcf8 .word 0x0800fcf8 + 800cf38: 00030d40 .word 0x00030d40 + 800cf3c: 0800fd00 .word 0x0800fd00 + 800cf40: 0800fd0c .word 0x0800fd0c + 800cf44: 0800fd18 .word 0x0800fd18 + 800cf48: 0800fd24 .word 0x0800fd24 + 800cf4c: 0800fd34 .word 0x0800fd34 + 800cf50: 0800fd44 .word 0x0800fd44 + 800cf54: 0800fd50 .word 0x0800fd50 } g_cfg.uart_packet_timeout_ms = (uint16_t)u32; - 800cee0: 693b ldr r3, [r7, #16] - 800cee2: b29a uxth r2, r3 - 800cee4: 4b35 ldr r3, [pc, #212] @ (800cfbc ) - 800cee6: 835a strh r2, [r3, #26] + 800cf58: 693b ldr r3, [r7, #16] + 800cf5a: b29a uxth r2, r3 + 800cf5c: 4b35 ldr r3, [pc, #212] @ (800d034 ) + 800cf5e: 835a strh r2, [r3, #26] App_Printf("timeout=%u\r\n", g_cfg.uart_packet_timeout_ms); - 800cee8: 4b34 ldr r3, [pc, #208] @ (800cfbc ) - 800ceea: 8b5b ldrh r3, [r3, #26] - 800ceec: 4619 mov r1, r3 - 800ceee: 4834 ldr r0, [pc, #208] @ (800cfc0 ) - 800cef0: f000 f990 bl 800d214 + 800cf60: 4b34 ldr r3, [pc, #208] @ (800d034 ) + 800cf62: 8b5b ldrh r3, [r3, #26] + 800cf64: 4619 mov r1, r3 + 800cf66: 4834 ldr r0, [pc, #208] @ (800d038 ) + 800cf68: f000 f990 bl 800d28c return; - 800cef4: e05f b.n 800cfb6 + 800cf6c: e05f b.n 800d02e } if (strncmp(line, "uart ", 5) == 0) - 800cef6: 2205 movs r2, #5 - 800cef8: 4932 ldr r1, [pc, #200] @ (800cfc4 ) - 800cefa: 6878 ldr r0, [r7, #4] - 800cefc: f002 f82e bl 800ef5c - 800cf00: 4603 mov r3, r0 - 800cf02: 2b00 cmp r3, #0 - 800cf04: d122 bne.n 800cf4c + 800cf6e: 2205 movs r2, #5 + 800cf70: 4932 ldr r1, [pc, #200] @ (800d03c ) + 800cf72: 6878 ldr r0, [r7, #4] + 800cf74: f002 f806 bl 800ef84 + 800cf78: 4603 mov r3, r0 + 800cf7a: 2b00 cmp r3, #0 + 800cf7c: d122 bne.n 800cfc4 { u32 = strtoul(&line[5], NULL, 10); - 800cf06: 687b ldr r3, [r7, #4] - 800cf08: 3305 adds r3, #5 - 800cf0a: 220a movs r2, #10 - 800cf0c: 2100 movs r1, #0 - 800cf0e: 4618 mov r0, r3 - 800cf10: f001 ffd6 bl 800eec0 - 800cf14: 6138 str r0, [r7, #16] + 800cf7e: 687b ldr r3, [r7, #4] + 800cf80: 3305 adds r3, #5 + 800cf82: 220a movs r2, #10 + 800cf84: 2100 movs r1, #0 + 800cf86: 4618 mov r0, r3 + 800cf88: f001 ffae bl 800eee8 + 800cf8c: 6138 str r0, [r7, #16] if ((u32 < 1200UL) || (u32 > 921600UL)) - 800cf16: 693b ldr r3, [r7, #16] - 800cf18: f5b3 6f96 cmp.w r3, #1200 @ 0x4b0 - 800cf1c: d303 bcc.n 800cf26 - 800cf1e: 693b ldr r3, [r7, #16] - 800cf20: f5b3 2f61 cmp.w r3, #921600 @ 0xe1000 - 800cf24: d903 bls.n 800cf2e + 800cf8e: 693b ldr r3, [r7, #16] + 800cf90: f5b3 6f96 cmp.w r3, #1200 @ 0x4b0 + 800cf94: d303 bcc.n 800cf9e + 800cf96: 693b ldr r3, [r7, #16] + 800cf98: f5b3 2f61 cmp.w r3, #921600 @ 0xe1000 + 800cf9c: d903 bls.n 800cfa6 { App_Printf("bad uart baudrate\r\n"); - 800cf26: 4828 ldr r0, [pc, #160] @ (800cfc8 ) - 800cf28: f000 f974 bl 800d214 + 800cf9e: 4828 ldr r0, [pc, #160] @ (800d040 ) + 800cfa0: f000 f974 bl 800d28c return; - 800cf2c: e043 b.n 800cfb6 + 800cfa4: e043 b.n 800d02e } g_cfg.uart_baudrate = u32; - 800cf2e: 4a23 ldr r2, [pc, #140] @ (800cfbc ) - 800cf30: 693b ldr r3, [r7, #16] - 800cf32: 61d3 str r3, [r2, #28] + 800cfa6: 4a23 ldr r2, [pc, #140] @ (800d034 ) + 800cfa8: 693b ldr r3, [r7, #16] + 800cfaa: 61d3 str r3, [r2, #28] App_Printf("switching uart to %lu baud\r\n", (unsigned long)g_cfg.uart_baudrate); - 800cf34: 4b21 ldr r3, [pc, #132] @ (800cfbc ) - 800cf36: 69db ldr r3, [r3, #28] - 800cf38: 4619 mov r1, r3 - 800cf3a: 4824 ldr r0, [pc, #144] @ (800cfcc ) - 800cf3c: f000 f96a bl 800d214 + 800cfac: 4b21 ldr r3, [pc, #132] @ (800d034 ) + 800cfae: 69db ldr r3, [r3, #28] + 800cfb0: 4619 mov r1, r3 + 800cfb2: 4824 ldr r0, [pc, #144] @ (800d044 ) + 800cfb4: f000 f96a bl 800d28c App_ReconfigureUart(g_cfg.uart_baudrate); - 800cf40: 4b1e ldr r3, [pc, #120] @ (800cfbc ) - 800cf42: 69db ldr r3, [r3, #28] - 800cf44: 4618 mov r0, r3 - 800cf46: f000 f9ab bl 800d2a0 + 800cfb8: 4b1e ldr r3, [pc, #120] @ (800d034 ) + 800cfba: 69db ldr r3, [r3, #28] + 800cfbc: 4618 mov r0, r3 + 800cfbe: f000 f9ab bl 800d318 return; - 800cf4a: e034 b.n 800cfb6 + 800cfc2: e034 b.n 800d02e } if (strncmp(line, "sync ", 5) == 0) - 800cf4c: 2205 movs r2, #5 - 800cf4e: 4920 ldr r1, [pc, #128] @ (800cfd0 ) - 800cf50: 6878 ldr r0, [r7, #4] - 800cf52: f002 f803 bl 800ef5c - 800cf56: 4603 mov r3, r0 - 800cf58: 2b00 cmp r3, #0 - 800cf5a: d126 bne.n 800cfaa + 800cfc4: 2205 movs r2, #5 + 800cfc6: 4920 ldr r1, [pc, #128] @ (800d048 ) + 800cfc8: 6878 ldr r0, [r7, #4] + 800cfca: f001 ffdb bl 800ef84 + 800cfce: 4603 mov r3, r0 + 800cfd0: 2b00 cmp r3, #0 + 800cfd2: d126 bne.n 800d022 { arg = App_SkipSpaces(&line[5]); - 800cf5c: 687b ldr r3, [r7, #4] - 800cf5e: 3305 adds r3, #5 - 800cf60: 4618 mov r0, r3 - 800cf62: f000 fa4b bl 800d3fc - 800cf66: 6178 str r0, [r7, #20] + 800cfd4: 687b ldr r3, [r7, #4] + 800cfd6: 3305 adds r3, #5 + 800cfd8: 4618 mov r0, r3 + 800cfda: f000 fa4b bl 800d474 + 800cfde: 6178 str r0, [r7, #20] if (App_ParseHexSyncWord(arg, sync) == 0U) - 800cf68: f107 0308 add.w r3, r7, #8 - 800cf6c: 4619 mov r1, r3 - 800cf6e: 6978 ldr r0, [r7, #20] - 800cf70: f000 f9ce bl 800d310 - 800cf74: 4603 mov r3, r0 - 800cf76: 2b00 cmp r3, #0 - 800cf78: d103 bne.n 800cf82 + 800cfe0: f107 0308 add.w r3, r7, #8 + 800cfe4: 4619 mov r1, r3 + 800cfe6: 6978 ldr r0, [r7, #20] + 800cfe8: f000 f9ce bl 800d388 + 800cfec: 4603 mov r3, r0 + 800cfee: 2b00 cmp r3, #0 + 800cff0: d103 bne.n 800cffa { App_Printf("bad sync, use 6 hex chars, e.g. C194C1\r\n"); - 800cf7a: 4816 ldr r0, [pc, #88] @ (800cfd4 ) - 800cf7c: f000 f94a bl 800d214 + 800cff2: 4816 ldr r0, [pc, #88] @ (800d04c ) + 800cff4: f000 f94a bl 800d28c return; - 800cf80: e019 b.n 800cfb6 + 800cff8: e019 b.n 800d02e } memcpy(g_cfg.syncword, sync, sizeof(sync)); - 800cf82: 4b0e ldr r3, [pc, #56] @ (800cfbc ) - 800cf84: 3316 adds r3, #22 - 800cf86: f107 0208 add.w r2, r7, #8 - 800cf8a: 8811 ldrh r1, [r2, #0] - 800cf8c: 7892 ldrb r2, [r2, #2] - 800cf8e: 8019 strh r1, [r3, #0] - 800cf90: 709a strb r2, [r3, #2] + 800cffa: 4b0e ldr r3, [pc, #56] @ (800d034 ) + 800cffc: 3316 adds r3, #22 + 800cffe: f107 0208 add.w r2, r7, #8 + 800d002: 8811 ldrh r1, [r2, #0] + 800d004: 7892 ldrb r2, [r2, #2] + 800d006: 8019 strh r1, [r3, #0] + 800d008: 709a strb r2, [r3, #2] App_Printf("sync=%02X%02X%02X\r\n", g_cfg.syncword[0], g_cfg.syncword[1], g_cfg.syncword[2]); - 800cf92: 4b0a ldr r3, [pc, #40] @ (800cfbc ) - 800cf94: 7d9b ldrb r3, [r3, #22] - 800cf96: 4619 mov r1, r3 - 800cf98: 4b08 ldr r3, [pc, #32] @ (800cfbc ) - 800cf9a: 7ddb ldrb r3, [r3, #23] - 800cf9c: 461a mov r2, r3 - 800cf9e: 4b07 ldr r3, [pc, #28] @ (800cfbc ) - 800cfa0: 7e1b ldrb r3, [r3, #24] - 800cfa2: 480d ldr r0, [pc, #52] @ (800cfd8 ) - 800cfa4: f000 f936 bl 800d214 + 800d00a: 4b0a ldr r3, [pc, #40] @ (800d034 ) + 800d00c: 7d9b ldrb r3, [r3, #22] + 800d00e: 4619 mov r1, r3 + 800d010: 4b08 ldr r3, [pc, #32] @ (800d034 ) + 800d012: 7ddb ldrb r3, [r3, #23] + 800d014: 461a mov r2, r3 + 800d016: 4b07 ldr r3, [pc, #28] @ (800d034 ) + 800d018: 7e1b ldrb r3, [r3, #24] + 800d01a: 480d ldr r0, [pc, #52] @ (800d050 ) + 800d01c: f000 f936 bl 800d28c return; - 800cfa8: e005 b.n 800cfb6 + 800d020: e005 b.n 800d02e } App_Printf("unknown command: %s\r\n", line); - 800cfaa: 6879 ldr r1, [r7, #4] - 800cfac: 480b ldr r0, [pc, #44] @ (800cfdc ) - 800cfae: f000 f931 bl 800d214 - 800cfb2: e000 b.n 800cfb6 + 800d022: 6879 ldr r1, [r7, #4] + 800d024: 480b ldr r0, [pc, #44] @ (800d054 ) + 800d026: f000 f931 bl 800d28c + 800d02a: e000 b.n 800d02e return; - 800cfb4: bf00 nop + 800d02c: bf00 nop } - 800cfb6: 3718 adds r7, #24 - 800cfb8: 46bd mov sp, r7 - 800cfba: bd80 pop {r7, pc} - 800cfbc: 20000604 .word 0x20000604 - 800cfc0: 0800fd38 .word 0x0800fd38 - 800cfc4: 0800fd48 .word 0x0800fd48 - 800cfc8: 0800fd50 .word 0x0800fd50 - 800cfcc: 0800fd64 .word 0x0800fd64 - 800cfd0: 0800fd84 .word 0x0800fd84 - 800cfd4: 0800fd8c .word 0x0800fd8c - 800cfd8: 0800fdb8 .word 0x0800fdb8 - 800cfdc: 0800fdcc .word 0x0800fdcc + 800d02e: 3718 adds r7, #24 + 800d030: 46bd mov sp, r7 + 800d032: bd80 pop {r7, pc} + 800d034: 20000604 .word 0x20000604 + 800d038: 0800fd60 .word 0x0800fd60 + 800d03c: 0800fd70 .word 0x0800fd70 + 800d040: 0800fd78 .word 0x0800fd78 + 800d044: 0800fd8c .word 0x0800fd8c + 800d048: 0800fdac .word 0x0800fdac + 800d04c: 0800fdb4 .word 0x0800fdb4 + 800d050: 0800fde0 .word 0x0800fde0 + 800d054: 0800fdf4 .word 0x0800fdf4 -0800cfe0 : +0800d058 : static void App_PrintConfigPrompt(void) { - 800cfe0: b580 push {r7, lr} - 800cfe2: af00 add r7, sp, #0 + 800d058: b580 push {r7, lr} + 800d05a: af00 add r7, sp, #0 if (g_mode == APP_MODE_CONFIG) - 800cfe4: 4b04 ldr r3, [pc, #16] @ (800cff8 ) - 800cfe6: 781b ldrb r3, [r3, #0] - 800cfe8: 2b01 cmp r3, #1 - 800cfea: d102 bne.n 800cff2 + 800d05c: 4b04 ldr r3, [pc, #16] @ (800d070 ) + 800d05e: 781b ldrb r3, [r3, #0] + 800d060: 2b01 cmp r3, #1 + 800d062: d102 bne.n 800d06a { App_Printf("cfg> "); - 800cfec: 4803 ldr r0, [pc, #12] @ (800cffc ) - 800cfee: f000 f911 bl 800d214 + 800d064: 4803 ldr r0, [pc, #12] @ (800d074 ) + 800d066: f000 f911 bl 800d28c } } - 800cff2: bf00 nop - 800cff4: bd80 pop {r7, pc} - 800cff6: bf00 nop - 800cff8: 20000b90 .word 0x20000b90 - 800cffc: 0800fde4 .word 0x0800fde4 + 800d06a: bf00 nop + 800d06c: bd80 pop {r7, pc} + 800d06e: bf00 nop + 800d070: 20000bc8 .word 0x20000bc8 + 800d074: 0800fe0c .word 0x0800fe0c -0800d000 : +0800d078 : static void App_PrintHelp(void) { - 800d000: b580 push {r7, lr} - 800d002: af00 add r7, sp, #0 + 800d078: b580 push {r7, lr} + 800d07a: af00 add r7, sp, #0 App_Printf("commands:\r\n"); - 800d004: 4817 ldr r0, [pc, #92] @ (800d064 ) - 800d006: f000 f905 bl 800d214 + 800d07c: 4817 ldr r0, [pc, #92] @ (800d0dc ) + 800d07e: f000 f905 bl 800d28c App_Printf(" help - this help\r\n"); - 800d00a: 4817 ldr r0, [pc, #92] @ (800d068 ) - 800d00c: f000 f902 bl 800d214 + 800d082: 4817 ldr r0, [pc, #92] @ (800d0e0 ) + 800d084: f000 f902 bl 800d28c App_Printf(" show - current config and counters\r\n"); - 800d010: 4816 ldr r0, [pc, #88] @ (800d06c ) - 800d012: f000 f8ff bl 800d214 + 800d088: 4816 ldr r0, [pc, #88] @ (800d0e4 ) + 800d08a: f000 f8ff bl 800d28c App_Printf(" freq - rf frequency\r\n"); - 800d016: 4816 ldr r0, [pc, #88] @ (800d070 ) - 800d018: f000 f8fc bl 800d214 + 800d08e: 4816 ldr r0, [pc, #88] @ (800d0e8 ) + 800d090: f000 f8fc bl 800d28c App_Printf(" power - tx power (-9..22)\r\n"); - 800d01c: 4815 ldr r0, [pc, #84] @ (800d074 ) - 800d01e: f000 f8f9 bl 800d214 + 800d094: 4815 ldr r0, [pc, #84] @ (800d0ec ) + 800d096: f000 f8f9 bl 800d28c App_Printf(" bitrate - fsk bitrate\r\n"); - 800d022: 4815 ldr r0, [pc, #84] @ (800d078 ) - 800d024: f000 f8f6 bl 800d214 + 800d09a: 4815 ldr r0, [pc, #84] @ (800d0f0 ) + 800d09c: f000 f8f6 bl 800d28c App_Printf(" bandwidth - fsk rx bandwidth\r\n"); - 800d028: 4814 ldr r0, [pc, #80] @ (800d07c ) - 800d02a: f000 f8f3 bl 800d214 + 800d0a0: 4814 ldr r0, [pc, #80] @ (800d0f4 ) + 800d0a2: f000 f8f3 bl 800d28c App_Printf(" fdev - fsk frequency deviation\r\n"); - 800d02e: 4814 ldr r0, [pc, #80] @ (800d080 ) - 800d030: f000 f8f0 bl 800d214 + 800d0a6: 4814 ldr r0, [pc, #80] @ (800d0f8 ) + 800d0a8: f000 f8f0 bl 800d28c App_Printf(" preamble - fsk preamble length\r\n"); - 800d034: 4813 ldr r0, [pc, #76] @ (800d084 ) - 800d036: f000 f8ed bl 800d214 + 800d0ac: 4813 ldr r0, [pc, #76] @ (800d0fc ) + 800d0ae: f000 f8ed bl 800d28c App_Printf(" sync - 3-byte syncword, example C194C1\r\n"); - 800d03a: 4813 ldr r0, [pc, #76] @ (800d088 ) - 800d03c: f000 f8ea bl 800d214 + 800d0b2: 4813 ldr r0, [pc, #76] @ (800d100 ) + 800d0b4: f000 f8ea bl 800d28c App_Printf(" timeout - uart silence before rf packet send\r\n"); - 800d040: 4812 ldr r0, [pc, #72] @ (800d08c ) - 800d042: f000 f8e7 bl 800d214 + 800d0b8: 4812 ldr r0, [pc, #72] @ (800d104 ) + 800d0ba: f000 f8e7 bl 800d28c App_Printf(" uart - change uart baudrate\r\n"); - 800d046: 4812 ldr r0, [pc, #72] @ (800d090 ) - 800d048: f000 f8e4 bl 800d214 + 800d0be: 4812 ldr r0, [pc, #72] @ (800d108 ) + 800d0c0: f000 f8e4 bl 800d28c App_Printf(" save - save and apply changes\r\n"); - 800d04c: 4811 ldr r0, [pc, #68] @ (800d094 ) - 800d04e: f000 f8e1 bl 800d214 + 800d0c4: 4811 ldr r0, [pc, #68] @ (800d10c ) + 800d0c6: f000 f8e1 bl 800d28c App_Printf(" defaults - restore default config\r\n"); - 800d052: 4811 ldr r0, [pc, #68] @ (800d098 ) - 800d054: f000 f8de bl 800d214 + 800d0ca: 4811 ldr r0, [pc, #68] @ (800d110 ) + 800d0cc: f000 f8de bl 800d28c App_Printf(" exit - return to transparent bridge mode\r\n"); - 800d058: 4810 ldr r0, [pc, #64] @ (800d09c ) - 800d05a: f000 f8db bl 800d214 + 800d0d0: 4810 ldr r0, [pc, #64] @ (800d114 ) + 800d0d2: f000 f8db bl 800d28c } - 800d05e: bf00 nop - 800d060: bd80 pop {r7, pc} - 800d062: bf00 nop - 800d064: 0800fdec .word 0x0800fdec - 800d068: 0800fdf8 .word 0x0800fdf8 - 800d06c: 0800fe20 .word 0x0800fe20 - 800d070: 0800fe58 .word 0x0800fe58 - 800d074: 0800fe80 .word 0x0800fe80 - 800d078: 0800feb0 .word 0x0800feb0 - 800d07c: 0800fed8 .word 0x0800fed8 - 800d080: 0800ff04 .word 0x0800ff04 - 800d084: 0800ff38 .word 0x0800ff38 - 800d088: 0800ff68 .word 0x0800ff68 - 800d08c: 0800ffa4 .word 0x0800ffa4 - 800d090: 0800ffe4 .word 0x0800ffe4 - 800d094: 08010014 .word 0x08010014 - 800d098: 08010048 .word 0x08010048 - 800d09c: 0801007c .word 0x0801007c + 800d0d6: bf00 nop + 800d0d8: bd80 pop {r7, pc} + 800d0da: bf00 nop + 800d0dc: 0800fe14 .word 0x0800fe14 + 800d0e0: 0800fe20 .word 0x0800fe20 + 800d0e4: 0800fe48 .word 0x0800fe48 + 800d0e8: 0800fe80 .word 0x0800fe80 + 800d0ec: 0800fea8 .word 0x0800fea8 + 800d0f0: 0800fed8 .word 0x0800fed8 + 800d0f4: 0800ff00 .word 0x0800ff00 + 800d0f8: 0800ff2c .word 0x0800ff2c + 800d0fc: 0800ff60 .word 0x0800ff60 + 800d100: 0800ff90 .word 0x0800ff90 + 800d104: 0800ffcc .word 0x0800ffcc + 800d108: 0801000c .word 0x0801000c + 800d10c: 0801003c .word 0x0801003c + 800d110: 08010070 .word 0x08010070 + 800d114: 080100a4 .word 0x080100a4 -0800d0a0 : +0800d118 : static void App_PrintStatus(void) { - 800d0a0: b580 push {r7, lr} - 800d0a2: af00 add r7, sp, #0 + 800d118: b580 push {r7, lr} + 800d11a: af00 add r7, sp, #0 App_Printf("mode=%s\r\n", (g_mode == APP_MODE_CONFIG) ? "config" : "data"); - 800d0a4: 4b3d ldr r3, [pc, #244] @ (800d19c ) - 800d0a6: 781b ldrb r3, [r3, #0] - 800d0a8: 2b01 cmp r3, #1 - 800d0aa: d101 bne.n 800d0b0 - 800d0ac: 4b3c ldr r3, [pc, #240] @ (800d1a0 ) - 800d0ae: e000 b.n 800d0b2 - 800d0b0: 4b3c ldr r3, [pc, #240] @ (800d1a4 ) - 800d0b2: 4619 mov r1, r3 - 800d0b4: 483c ldr r0, [pc, #240] @ (800d1a8 ) - 800d0b6: f000 f8ad bl 800d214 - App_Printf("freq=%lu Hz\r\n", (unsigned long)g_cfg.rf_frequency); - 800d0ba: 4b3c ldr r3, [pc, #240] @ (800d1ac ) - 800d0bc: 681b ldr r3, [r3, #0] - 800d0be: 4619 mov r1, r3 - 800d0c0: 483b ldr r0, [pc, #236] @ (800d1b0 ) - 800d0c2: f000 f8a7 bl 800d214 - App_Printf("power=%d dBm\r\n", g_cfg.tx_power); - 800d0c6: 4b39 ldr r3, [pc, #228] @ (800d1ac ) - 800d0c8: f993 3004 ldrsb.w r3, [r3, #4] - 800d0cc: 4619 mov r1, r3 - 800d0ce: 4839 ldr r0, [pc, #228] @ (800d1b4 ) - 800d0d0: f000 f8a0 bl 800d214 - App_Printf("bitrate=%lu bps\r\n", (unsigned long)g_cfg.fsk_bitrate); - 800d0d4: 4b35 ldr r3, [pc, #212] @ (800d1ac ) - 800d0d6: 689b ldr r3, [r3, #8] - 800d0d8: 4619 mov r1, r3 - 800d0da: 4837 ldr r0, [pc, #220] @ (800d1b8 ) - 800d0dc: f000 f89a bl 800d214 - App_Printf("bandwidth=%lu Hz\r\n", (unsigned long)g_cfg.fsk_bandwidth); - 800d0e0: 4b32 ldr r3, [pc, #200] @ (800d1ac ) - 800d0e2: 68db ldr r3, [r3, #12] - 800d0e4: 4619 mov r1, r3 - 800d0e6: 4835 ldr r0, [pc, #212] @ (800d1bc ) - 800d0e8: f000 f894 bl 800d214 - App_Printf("fdev=%lu Hz\r\n", (unsigned long)g_cfg.fsk_fdev); - 800d0ec: 4b2f ldr r3, [pc, #188] @ (800d1ac ) - 800d0ee: 691b ldr r3, [r3, #16] - 800d0f0: 4619 mov r1, r3 - 800d0f2: 4833 ldr r0, [pc, #204] @ (800d1c0 ) - 800d0f4: f000 f88e bl 800d214 - App_Printf("preamble=%u bytes\r\n", g_cfg.fsk_preamble_len); - 800d0f8: 4b2c ldr r3, [pc, #176] @ (800d1ac ) - 800d0fa: 8a9b ldrh r3, [r3, #20] - 800d0fc: 4619 mov r1, r3 - 800d0fe: 4831 ldr r0, [pc, #196] @ (800d1c4 ) - 800d100: f000 f888 bl 800d214 - App_Printf("sync=%02X%02X%02X\r\n", g_cfg.syncword[0], g_cfg.syncword[1], g_cfg.syncword[2]); - 800d104: 4b29 ldr r3, [pc, #164] @ (800d1ac ) - 800d106: 7d9b ldrb r3, [r3, #22] - 800d108: 4619 mov r1, r3 - 800d10a: 4b28 ldr r3, [pc, #160] @ (800d1ac ) - 800d10c: 7ddb ldrb r3, [r3, #23] - 800d10e: 461a mov r2, r3 - 800d110: 4b26 ldr r3, [pc, #152] @ (800d1ac ) - 800d112: 7e1b ldrb r3, [r3, #24] - 800d114: 482c ldr r0, [pc, #176] @ (800d1c8 ) - 800d116: f000 f87d bl 800d214 - App_Printf("uart_baud=%lu\r\n", (unsigned long)g_cfg.uart_baudrate); - 800d11a: 4b24 ldr r3, [pc, #144] @ (800d1ac ) - 800d11c: 69db ldr r3, [r3, #28] - 800d11e: 4619 mov r1, r3 - 800d120: 482a ldr r0, [pc, #168] @ (800d1cc ) - 800d122: f000 f877 bl 800d214 - App_Printf("uart_pkt_timeout=%u ms\r\n", g_cfg.uart_packet_timeout_ms); - 800d126: 4b21 ldr r3, [pc, #132] @ (800d1ac ) - 800d128: 8b5b ldrh r3, [r3, #26] + 800d11c: 4b3d ldr r3, [pc, #244] @ (800d214 ) + 800d11e: 781b ldrb r3, [r3, #0] + 800d120: 2b01 cmp r3, #1 + 800d122: d101 bne.n 800d128 + 800d124: 4b3c ldr r3, [pc, #240] @ (800d218 ) + 800d126: e000 b.n 800d12a + 800d128: 4b3c ldr r3, [pc, #240] @ (800d21c ) 800d12a: 4619 mov r1, r3 - 800d12c: 4828 ldr r0, [pc, #160] @ (800d1d0 ) - 800d12e: f000 f871 bl 800d214 + 800d12c: 483c ldr r0, [pc, #240] @ (800d220 ) + 800d12e: f000 f8ad bl 800d28c + App_Printf("freq=%lu Hz\r\n", (unsigned long)g_cfg.rf_frequency); + 800d132: 4b3c ldr r3, [pc, #240] @ (800d224 ) + 800d134: 681b ldr r3, [r3, #0] + 800d136: 4619 mov r1, r3 + 800d138: 483b ldr r0, [pc, #236] @ (800d228 ) + 800d13a: f000 f8a7 bl 800d28c + App_Printf("power=%d dBm\r\n", g_cfg.tx_power); + 800d13e: 4b39 ldr r3, [pc, #228] @ (800d224 ) + 800d140: f993 3004 ldrsb.w r3, [r3, #4] + 800d144: 4619 mov r1, r3 + 800d146: 4839 ldr r0, [pc, #228] @ (800d22c ) + 800d148: f000 f8a0 bl 800d28c + App_Printf("bitrate=%lu bps\r\n", (unsigned long)g_cfg.fsk_bitrate); + 800d14c: 4b35 ldr r3, [pc, #212] @ (800d224 ) + 800d14e: 689b ldr r3, [r3, #8] + 800d150: 4619 mov r1, r3 + 800d152: 4837 ldr r0, [pc, #220] @ (800d230 ) + 800d154: f000 f89a bl 800d28c + App_Printf("bandwidth=%lu Hz\r\n", (unsigned long)g_cfg.fsk_bandwidth); + 800d158: 4b32 ldr r3, [pc, #200] @ (800d224 ) + 800d15a: 68db ldr r3, [r3, #12] + 800d15c: 4619 mov r1, r3 + 800d15e: 4835 ldr r0, [pc, #212] @ (800d234 ) + 800d160: f000 f894 bl 800d28c + App_Printf("fdev=%lu Hz\r\n", (unsigned long)g_cfg.fsk_fdev); + 800d164: 4b2f ldr r3, [pc, #188] @ (800d224 ) + 800d166: 691b ldr r3, [r3, #16] + 800d168: 4619 mov r1, r3 + 800d16a: 4833 ldr r0, [pc, #204] @ (800d238 ) + 800d16c: f000 f88e bl 800d28c + App_Printf("preamble=%u bytes\r\n", g_cfg.fsk_preamble_len); + 800d170: 4b2c ldr r3, [pc, #176] @ (800d224 ) + 800d172: 8a9b ldrh r3, [r3, #20] + 800d174: 4619 mov r1, r3 + 800d176: 4831 ldr r0, [pc, #196] @ (800d23c ) + 800d178: f000 f888 bl 800d28c + App_Printf("sync=%02X%02X%02X\r\n", g_cfg.syncword[0], g_cfg.syncword[1], g_cfg.syncword[2]); + 800d17c: 4b29 ldr r3, [pc, #164] @ (800d224 ) + 800d17e: 7d9b ldrb r3, [r3, #22] + 800d180: 4619 mov r1, r3 + 800d182: 4b28 ldr r3, [pc, #160] @ (800d224 ) + 800d184: 7ddb ldrb r3, [r3, #23] + 800d186: 461a mov r2, r3 + 800d188: 4b26 ldr r3, [pc, #152] @ (800d224 ) + 800d18a: 7e1b ldrb r3, [r3, #24] + 800d18c: 482c ldr r0, [pc, #176] @ (800d240 ) + 800d18e: f000 f87d bl 800d28c + App_Printf("uart_baud=%lu\r\n", (unsigned long)g_cfg.uart_baudrate); + 800d192: 4b24 ldr r3, [pc, #144] @ (800d224 ) + 800d194: 69db ldr r3, [r3, #28] + 800d196: 4619 mov r1, r3 + 800d198: 482a ldr r0, [pc, #168] @ (800d244 ) + 800d19a: f000 f877 bl 800d28c + App_Printf("uart_pkt_timeout=%u ms\r\n", g_cfg.uart_packet_timeout_ms); + 800d19e: 4b21 ldr r3, [pc, #132] @ (800d224 ) + 800d1a0: 8b5b ldrh r3, [r3, #26] + 800d1a2: 4619 mov r1, r3 + 800d1a4: 4828 ldr r0, [pc, #160] @ (800d248 ) + 800d1a6: f000 f871 bl 800d28c App_Printf("tx_queue=%u/%u\r\n", g_tx_q_count, TX_QUEUE_DEPTH); - 800d132: 4b28 ldr r3, [pc, #160] @ (800d1d4 ) - 800d134: 781b ldrb r3, [r3, #0] - 800d136: 2204 movs r2, #4 - 800d138: 4619 mov r1, r3 - 800d13a: 4827 ldr r0, [pc, #156] @ (800d1d8 ) - 800d13c: f000 f86a bl 800d214 + 800d1aa: 4b28 ldr r3, [pc, #160] @ (800d24c ) + 800d1ac: 781b ldrb r3, [r3, #0] + 800d1ae: 2204 movs r2, #4 + 800d1b0: 4619 mov r1, r3 + 800d1b2: 4827 ldr r0, [pc, #156] @ (800d250 ) + 800d1b4: f000 f86a bl 800d28c App_Printf("last_rx_rssi=%d dBm\r\n", (int)g_last_rx_rssi); - 800d140: 4b26 ldr r3, [pc, #152] @ (800d1dc ) - 800d142: 881b ldrh r3, [r3, #0] - 800d144: b21b sxth r3, r3 - 800d146: 4619 mov r1, r3 - 800d148: 4825 ldr r0, [pc, #148] @ (800d1e0 ) - 800d14a: f000 f863 bl 800d214 + 800d1b8: 4b26 ldr r3, [pc, #152] @ (800d254 ) + 800d1ba: 881b ldrh r3, [r3, #0] + 800d1bc: b21b sxth r3, r3 + 800d1be: 4619 mov r1, r3 + 800d1c0: 4825 ldr r0, [pc, #148] @ (800d258 ) + 800d1c2: f000 f863 bl 800d28c App_Printf("last_rx_cfo=%d\r\n", (int)g_last_rx_cfo); - 800d14e: 4b25 ldr r3, [pc, #148] @ (800d1e4 ) - 800d150: 781b ldrb r3, [r3, #0] - 800d152: b25b sxtb r3, r3 - 800d154: 4619 mov r1, r3 - 800d156: 4824 ldr r0, [pc, #144] @ (800d1e8 ) - 800d158: f000 f85c bl 800d214 + 800d1c6: 4b25 ldr r3, [pc, #148] @ (800d25c ) + 800d1c8: 781b ldrb r3, [r3, #0] + 800d1ca: b25b sxtb r3, r3 + 800d1cc: 4619 mov r1, r3 + 800d1ce: 4824 ldr r0, [pc, #144] @ (800d260 ) + 800d1d0: f000 f85c bl 800d28c App_Printf("stat_uart_packets_tx=%lu\r\n", (unsigned long)g_stat_uart_packets_tx); - 800d15c: 4b23 ldr r3, [pc, #140] @ (800d1ec ) - 800d15e: 681b ldr r3, [r3, #0] - 800d160: 4619 mov r1, r3 - 800d162: 4823 ldr r0, [pc, #140] @ (800d1f0 ) - 800d164: f000 f856 bl 800d214 + 800d1d4: 4b23 ldr r3, [pc, #140] @ (800d264 ) + 800d1d6: 681b ldr r3, [r3, #0] + 800d1d8: 4619 mov r1, r3 + 800d1da: 4823 ldr r0, [pc, #140] @ (800d268 ) + 800d1dc: f000 f856 bl 800d28c App_Printf("stat_uart_bytes_tx=%lu\r\n", (unsigned long)g_stat_uart_bytes_tx); - 800d168: 4b22 ldr r3, [pc, #136] @ (800d1f4 ) - 800d16a: 681b ldr r3, [r3, #0] - 800d16c: 4619 mov r1, r3 - 800d16e: 4822 ldr r0, [pc, #136] @ (800d1f8 ) - 800d170: f000 f850 bl 800d214 + 800d1e0: 4b22 ldr r3, [pc, #136] @ (800d26c ) + 800d1e2: 681b ldr r3, [r3, #0] + 800d1e4: 4619 mov r1, r3 + 800d1e6: 4822 ldr r0, [pc, #136] @ (800d270 ) + 800d1e8: f000 f850 bl 800d28c App_Printf("stat_radio_packets_rx=%lu\r\n", (unsigned long)g_stat_radio_packets_rx); - 800d174: 4b21 ldr r3, [pc, #132] @ (800d1fc ) - 800d176: 681b ldr r3, [r3, #0] - 800d178: 4619 mov r1, r3 - 800d17a: 4821 ldr r0, [pc, #132] @ (800d200 ) - 800d17c: f000 f84a bl 800d214 + 800d1ec: 4b21 ldr r3, [pc, #132] @ (800d274 ) + 800d1ee: 681b ldr r3, [r3, #0] + 800d1f0: 4619 mov r1, r3 + 800d1f2: 4821 ldr r0, [pc, #132] @ (800d278 ) + 800d1f4: f000 f84a bl 800d28c App_Printf("stat_radio_bytes_rx=%lu\r\n", (unsigned long)g_stat_radio_bytes_rx); - 800d180: 4b20 ldr r3, [pc, #128] @ (800d204 ) - 800d182: 681b ldr r3, [r3, #0] - 800d184: 4619 mov r1, r3 - 800d186: 4820 ldr r0, [pc, #128] @ (800d208 ) - 800d188: f000 f844 bl 800d214 + 800d1f8: 4b20 ldr r3, [pc, #128] @ (800d27c ) + 800d1fa: 681b ldr r3, [r3, #0] + 800d1fc: 4619 mov r1, r3 + 800d1fe: 4820 ldr r0, [pc, #128] @ (800d280 ) + 800d200: f000 f844 bl 800d28c App_Printf("stat_queue_overflow=%lu\r\n", (unsigned long)g_stat_queue_overflow); - 800d18c: 4b1f ldr r3, [pc, #124] @ (800d20c ) - 800d18e: 681b ldr r3, [r3, #0] - 800d190: 4619 mov r1, r3 - 800d192: 481f ldr r0, [pc, #124] @ (800d210 ) - 800d194: f000 f83e bl 800d214 + 800d204: 4b1f ldr r3, [pc, #124] @ (800d284 ) + 800d206: 681b ldr r3, [r3, #0] + 800d208: 4619 mov r1, r3 + 800d20a: 481f ldr r0, [pc, #124] @ (800d288 ) + 800d20c: f000 f83e bl 800d28c } - 800d198: bf00 nop - 800d19a: bd80 pop {r7, pc} - 800d19c: 20000b90 .word 0x20000b90 - 800d1a0: 080100bc .word 0x080100bc - 800d1a4: 080100c4 .word 0x080100c4 - 800d1a8: 080100cc .word 0x080100cc - 800d1ac: 20000604 .word 0x20000604 - 800d1b0: 080100d8 .word 0x080100d8 - 800d1b4: 080100e8 .word 0x080100e8 - 800d1b8: 080100f8 .word 0x080100f8 - 800d1bc: 0801010c .word 0x0801010c - 800d1c0: 08010120 .word 0x08010120 - 800d1c4: 08010130 .word 0x08010130 - 800d1c8: 0800fdb8 .word 0x0800fdb8 - 800d1cc: 08010144 .word 0x08010144 - 800d1d0: 08010154 .word 0x08010154 - 800d1d4: 20000a9a .word 0x20000a9a - 800d1d8: 08010170 .word 0x08010170 - 800d1dc: 2000062a .word 0x2000062a - 800d1e0: 08010184 .word 0x08010184 - 800d1e4: 2000062c .word 0x2000062c - 800d1e8: 0801019c .word 0x0801019c - 800d1ec: 20000bf8 .word 0x20000bf8 - 800d1f0: 080101b0 .word 0x080101b0 - 800d1f4: 20000bfc .word 0x20000bfc - 800d1f8: 080101cc .word 0x080101cc - 800d1fc: 20000c00 .word 0x20000c00 - 800d200: 080101e8 .word 0x080101e8 - 800d204: 20000c04 .word 0x20000c04 - 800d208: 08010204 .word 0x08010204 - 800d20c: 20000c08 .word 0x20000c08 - 800d210: 08010220 .word 0x08010220 + 800d210: bf00 nop + 800d212: bd80 pop {r7, pc} + 800d214: 20000bc8 .word 0x20000bc8 + 800d218: 080100e4 .word 0x080100e4 + 800d21c: 080100ec .word 0x080100ec + 800d220: 080100f4 .word 0x080100f4 + 800d224: 20000604 .word 0x20000604 + 800d228: 08010100 .word 0x08010100 + 800d22c: 08010110 .word 0x08010110 + 800d230: 08010120 .word 0x08010120 + 800d234: 08010134 .word 0x08010134 + 800d238: 08010148 .word 0x08010148 + 800d23c: 08010158 .word 0x08010158 + 800d240: 0800fde0 .word 0x0800fde0 + 800d244: 0801016c .word 0x0801016c + 800d248: 0801017c .word 0x0801017c + 800d24c: 20000ad2 .word 0x20000ad2 + 800d250: 08010198 .word 0x08010198 + 800d254: 2000062a .word 0x2000062a + 800d258: 080101ac .word 0x080101ac + 800d25c: 2000062c .word 0x2000062c + 800d260: 080101c4 .word 0x080101c4 + 800d264: 20000c30 .word 0x20000c30 + 800d268: 080101d8 .word 0x080101d8 + 800d26c: 20000c34 .word 0x20000c34 + 800d270: 080101f4 .word 0x080101f4 + 800d274: 20000c38 .word 0x20000c38 + 800d278: 08010210 .word 0x08010210 + 800d27c: 20000c3c .word 0x20000c3c + 800d280: 0801022c .word 0x0801022c + 800d284: 20000c40 .word 0x20000c40 + 800d288: 08010248 .word 0x08010248 -0800d214 : +0800d28c : static void App_Printf(const char *fmt, ...) { - 800d214: b40f push {r0, r1, r2, r3} - 800d216: b580 push {r7, lr} - 800d218: b0b2 sub sp, #200 @ 0xc8 - 800d21a: af00 add r7, sp, #0 + 800d28c: b40f push {r0, r1, r2, r3} + 800d28e: b580 push {r7, lr} + 800d290: b0b2 sub sp, #200 @ 0xc8 + 800d292: af00 add r7, sp, #0 char buffer[192]; va_list ap; int len; va_start(ap, fmt); - 800d21c: f107 03d4 add.w r3, r7, #212 @ 0xd4 - 800d220: 603b str r3, [r7, #0] + 800d294: f107 03d4 add.w r3, r7, #212 @ 0xd4 + 800d298: 603b str r3, [r7, #0] len = vsnprintf(buffer, sizeof(buffer), fmt, ap); - 800d222: 1d38 adds r0, r7, #4 - 800d224: 683b ldr r3, [r7, #0] - 800d226: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0 - 800d22a: 21c0 movs r1, #192 @ 0xc0 - 800d22c: f001 fe80 bl 800ef30 - 800d230: f8c7 00c4 str.w r0, [r7, #196] @ 0xc4 + 800d29a: 1d38 adds r0, r7, #4 + 800d29c: 683b ldr r3, [r7, #0] + 800d29e: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0 + 800d2a2: 21c0 movs r1, #192 @ 0xc0 + 800d2a4: f001 fe58 bl 800ef58 + 800d2a8: f8c7 00c4 str.w r0, [r7, #196] @ 0xc4 va_end(ap); if (len <= 0) - 800d234: f8d7 30c4 ldr.w r3, [r7, #196] @ 0xc4 - 800d238: 2b00 cmp r3, #0 - 800d23a: dd0f ble.n 800d25c + 800d2ac: f8d7 30c4 ldr.w r3, [r7, #196] @ 0xc4 + 800d2b0: 2b00 cmp r3, #0 + 800d2b2: dd0f ble.n 800d2d4 { return; } if ((size_t)len >= sizeof(buffer)) - 800d23c: f8d7 30c4 ldr.w r3, [r7, #196] @ 0xc4 - 800d240: 2bbf cmp r3, #191 @ 0xbf - 800d242: d902 bls.n 800d24a + 800d2b4: f8d7 30c4 ldr.w r3, [r7, #196] @ 0xc4 + 800d2b8: 2bbf cmp r3, #191 @ 0xbf + 800d2ba: d902 bls.n 800d2c2 { len = (int)(sizeof(buffer) - 1U); - 800d244: 23bf movs r3, #191 @ 0xbf - 800d246: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4 + 800d2bc: 23bf movs r3, #191 @ 0xbf + 800d2be: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4 } App_Write((const uint8_t *)buffer, (uint16_t)len); - 800d24a: f8d7 30c4 ldr.w r3, [r7, #196] @ 0xc4 - 800d24e: b29a uxth r2, r3 - 800d250: 1d3b adds r3, r7, #4 - 800d252: 4611 mov r1, r2 - 800d254: 4618 mov r0, r3 - 800d256: f000 f809 bl 800d26c - 800d25a: e000 b.n 800d25e + 800d2c2: f8d7 30c4 ldr.w r3, [r7, #196] @ 0xc4 + 800d2c6: b29a uxth r2, r3 + 800d2c8: 1d3b adds r3, r7, #4 + 800d2ca: 4611 mov r1, r2 + 800d2cc: 4618 mov r0, r3 + 800d2ce: f000 f809 bl 800d2e4 + 800d2d2: e000 b.n 800d2d6 return; - 800d25c: bf00 nop + 800d2d4: bf00 nop } - 800d25e: 37c8 adds r7, #200 @ 0xc8 - 800d260: 46bd mov sp, r7 - 800d262: e8bd 4080 ldmia.w sp!, {r7, lr} - 800d266: b004 add sp, #16 - 800d268: 4770 bx lr + 800d2d6: 37c8 adds r7, #200 @ 0xc8 + 800d2d8: 46bd mov sp, r7 + 800d2da: e8bd 4080 ldmia.w sp!, {r7, lr} + 800d2de: b004 add sp, #16 + 800d2e0: 4770 bx lr ... -0800d26c : +0800d2e4 : static void App_Write(const uint8_t *data, uint16_t len) { - 800d26c: b580 push {r7, lr} - 800d26e: b082 sub sp, #8 - 800d270: af00 add r7, sp, #0 - 800d272: 6078 str r0, [r7, #4] - 800d274: 460b mov r3, r1 - 800d276: 807b strh r3, [r7, #2] + 800d2e4: b580 push {r7, lr} + 800d2e6: b082 sub sp, #8 + 800d2e8: af00 add r7, sp, #0 + 800d2ea: 6078 str r0, [r7, #4] + 800d2ec: 460b mov r3, r1 + 800d2ee: 807b strh r3, [r7, #2] if ((data == NULL) || (len == 0U)) - 800d278: 687b ldr r3, [r7, #4] - 800d27a: 2b00 cmp r3, #0 - 800d27c: d00a beq.n 800d294 - 800d27e: 887b ldrh r3, [r7, #2] - 800d280: 2b00 cmp r3, #0 - 800d282: d007 beq.n 800d294 + 800d2f0: 687b ldr r3, [r7, #4] + 800d2f2: 2b00 cmp r3, #0 + 800d2f4: d00a beq.n 800d30c + 800d2f6: 887b ldrh r3, [r7, #2] + 800d2f8: 2b00 cmp r3, #0 + 800d2fa: d007 beq.n 800d30c { return; } (void)HAL_UART_Transmit(&huart2, (uint8_t *)data, len, 1000U); - 800d284: 887a ldrh r2, [r7, #2] - 800d286: f44f 737a mov.w r3, #1000 @ 0x3e8 - 800d28a: 6879 ldr r1, [r7, #4] - 800d28c: 4803 ldr r0, [pc, #12] @ (800d29c ) - 800d28e: f7f8 f9f8 bl 8005682 - 800d292: e000 b.n 800d296 + 800d2fc: 887a ldrh r2, [r7, #2] + 800d2fe: f44f 737a mov.w r3, #1000 @ 0x3e8 + 800d302: 6879 ldr r1, [r7, #4] + 800d304: 4803 ldr r0, [pc, #12] @ (800d314 ) + 800d306: f7f8 f9bc bl 8005682 + 800d30a: e000 b.n 800d30e return; - 800d294: bf00 nop + 800d30c: bf00 nop } - 800d296: 3708 adds r7, #8 - 800d298: 46bd mov sp, r7 - 800d29a: bd80 pop {r7, pc} - 800d29c: 200000dc .word 0x200000dc + 800d30e: 3708 adds r7, #8 + 800d310: 46bd mov sp, r7 + 800d312: bd80 pop {r7, pc} + 800d314: 200000dc .word 0x200000dc -0800d2a0 : +0800d318 : static void App_ReconfigureUart(uint32_t baudrate) { - 800d2a0: b580 push {r7, lr} - 800d2a2: b082 sub sp, #8 - 800d2a4: af00 add r7, sp, #0 - 800d2a6: 6078 str r0, [r7, #4] + 800d318: b580 push {r7, lr} + 800d31a: b082 sub sp, #8 + 800d31c: af00 add r7, sp, #0 + 800d31e: 6078 str r0, [r7, #4] huart2.Init.BaudRate = baudrate; - 800d2a8: 4a17 ldr r2, [pc, #92] @ (800d308 ) - 800d2aa: 687b ldr r3, [r7, #4] - 800d2ac: 6053 str r3, [r2, #4] + 800d320: 4a17 ldr r2, [pc, #92] @ (800d380 ) + 800d322: 687b ldr r3, [r7, #4] + 800d324: 6053 str r3, [r2, #4] (void)HAL_UART_AbortReceive(&huart2); - 800d2ae: 4816 ldr r0, [pc, #88] @ (800d308 ) - 800d2b0: f7f8 fb4c bl 800594c + 800d326: 4816 ldr r0, [pc, #88] @ (800d380 ) + 800d328: f7f8 fb10 bl 800594c if (HAL_UART_Init(&huart2) != HAL_OK) - 800d2b4: 4814 ldr r0, [pc, #80] @ (800d308 ) - 800d2b6: f7f8 f994 bl 80055e2 - 800d2ba: 4603 mov r3, r0 - 800d2bc: 2b00 cmp r3, #0 - 800d2be: d001 beq.n 800d2c4 + 800d32c: 4814 ldr r0, [pc, #80] @ (800d380 ) + 800d32e: f7f8 f958 bl 80055e2 + 800d332: 4603 mov r3, r0 + 800d334: 2b00 cmp r3, #0 + 800d336: d001 beq.n 800d33c { Error_Handler(); - 800d2c0: f7f3 fa86 bl 80007d0 + 800d338: f7f3 fa4a bl 80007d0 } if (HAL_UARTEx_SetTxFifoThreshold(&huart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) - 800d2c4: 2100 movs r1, #0 - 800d2c6: 4810 ldr r0, [pc, #64] @ (800d308 ) - 800d2c8: f7fa fc0f bl 8007aea - 800d2cc: 4603 mov r3, r0 - 800d2ce: 2b00 cmp r3, #0 - 800d2d0: d001 beq.n 800d2d6 + 800d33c: 2100 movs r1, #0 + 800d33e: 4810 ldr r0, [pc, #64] @ (800d380 ) + 800d340: f7fa fbd3 bl 8007aea + 800d344: 4603 mov r3, r0 + 800d346: 2b00 cmp r3, #0 + 800d348: d001 beq.n 800d34e { Error_Handler(); - 800d2d2: f7f3 fa7d bl 80007d0 + 800d34a: f7f3 fa41 bl 80007d0 } if (HAL_UARTEx_SetRxFifoThreshold(&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) - 800d2d6: 2100 movs r1, #0 - 800d2d8: 480b ldr r0, [pc, #44] @ (800d308 ) - 800d2da: f7fa fc44 bl 8007b66 - 800d2de: 4603 mov r3, r0 - 800d2e0: 2b00 cmp r3, #0 - 800d2e2: d001 beq.n 800d2e8 + 800d34e: 2100 movs r1, #0 + 800d350: 480b ldr r0, [pc, #44] @ (800d380 ) + 800d352: f7fa fc08 bl 8007b66 + 800d356: 4603 mov r3, r0 + 800d358: 2b00 cmp r3, #0 + 800d35a: d001 beq.n 800d360 { Error_Handler(); - 800d2e4: f7f3 fa74 bl 80007d0 + 800d35c: f7f3 fa38 bl 80007d0 } if (HAL_UARTEx_EnableFifoMode(&huart2) != HAL_OK) - 800d2e8: 4807 ldr r0, [pc, #28] @ (800d308 ) - 800d2ea: f7fa fbc3 bl 8007a74 - 800d2ee: 4603 mov r3, r0 - 800d2f0: 2b00 cmp r3, #0 - 800d2f2: d001 beq.n 800d2f8 + 800d360: 4807 ldr r0, [pc, #28] @ (800d380 ) + 800d362: f7fa fb87 bl 8007a74 + 800d366: 4603 mov r3, r0 + 800d368: 2b00 cmp r3, #0 + 800d36a: d001 beq.n 800d370 { Error_Handler(); - 800d2f4: f7f3 fa6c bl 80007d0 + 800d36c: f7f3 fa30 bl 80007d0 } (void)vcom_ReceiveInit(UartRxByteCallback); - 800d2f8: 4804 ldr r0, [pc, #16] @ (800d30c ) - 800d2fa: f7f4 f957 bl 80015ac + 800d370: 4804 ldr r0, [pc, #16] @ (800d384 ) + 800d372: f7f4 f91b bl 80015ac } - 800d2fe: bf00 nop - 800d300: 3708 adds r7, #8 - 800d302: 46bd mov sp, r7 - 800d304: bd80 pop {r7, pc} - 800d306: bf00 nop - 800d308: 200000dc .word 0x200000dc - 800d30c: 0800c9b9 .word 0x0800c9b9 + 800d376: bf00 nop + 800d378: 3708 adds r7, #8 + 800d37a: 46bd mov sp, r7 + 800d37c: bd80 pop {r7, pc} + 800d37e: bf00 nop + 800d380: 200000dc .word 0x200000dc + 800d384: 0800ca31 .word 0x0800ca31 -0800d310 : +0800d388 : static uint8_t App_ParseHexSyncWord(const char *text, uint8_t out[3]) { - 800d310: b580 push {r7, lr} - 800d312: b088 sub sp, #32 - 800d314: af00 add r7, sp, #0 - 800d316: 6078 str r0, [r7, #4] - 800d318: 6039 str r1, [r7, #0] + 800d388: b580 push {r7, lr} + 800d38a: b088 sub sp, #32 + 800d38c: af00 add r7, sp, #0 + 800d38e: 6078 str r0, [r7, #4] + 800d390: 6039 str r1, [r7, #0] char buf[7]; char *endptr; unsigned long value; size_t i; size_t n = 0U; - 800d31a: 2300 movs r3, #0 - 800d31c: 61bb str r3, [r7, #24] + 800d392: 2300 movs r3, #0 + 800d394: 61bb str r3, [r7, #24] if ((text == NULL) || (out == NULL)) - 800d31e: 687b ldr r3, [r7, #4] - 800d320: 2b00 cmp r3, #0 - 800d322: d002 beq.n 800d32a - 800d324: 683b ldr r3, [r7, #0] - 800d326: 2b00 cmp r3, #0 - 800d328: d117 bne.n 800d35a + 800d396: 687b ldr r3, [r7, #4] + 800d398: 2b00 cmp r3, #0 + 800d39a: d002 beq.n 800d3a2 + 800d39c: 683b ldr r3, [r7, #0] + 800d39e: 2b00 cmp r3, #0 + 800d3a0: d117 bne.n 800d3d2 { return 0U; - 800d32a: 2300 movs r3, #0 - 800d32c: e05f b.n 800d3ee + 800d3a2: 2300 movs r3, #0 + 800d3a4: e05f b.n 800d466 } while ((*text != '\0') && (n < 6U)) { if (isxdigit((unsigned char)*text) != 0) - 800d32e: 687b ldr r3, [r7, #4] - 800d330: 781b ldrb r3, [r3, #0] - 800d332: 3301 adds r3, #1 - 800d334: 4a30 ldr r2, [pc, #192] @ (800d3f8 ) - 800d336: 4413 add r3, r2 - 800d338: 781b ldrb r3, [r3, #0] - 800d33a: f003 0344 and.w r3, r3, #68 @ 0x44 - 800d33e: 2b00 cmp r3, #0 - 800d340: d008 beq.n 800d354 + 800d3a6: 687b ldr r3, [r7, #4] + 800d3a8: 781b ldrb r3, [r3, #0] + 800d3aa: 3301 adds r3, #1 + 800d3ac: 4a30 ldr r2, [pc, #192] @ (800d470 ) + 800d3ae: 4413 add r3, r2 + 800d3b0: 781b ldrb r3, [r3, #0] + 800d3b2: f003 0344 and.w r3, r3, #68 @ 0x44 + 800d3b6: 2b00 cmp r3, #0 + 800d3b8: d008 beq.n 800d3cc { buf[n++] = *text; - 800d342: 69bb ldr r3, [r7, #24] - 800d344: 1c5a adds r2, r3, #1 - 800d346: 61ba str r2, [r7, #24] - 800d348: 687a ldr r2, [r7, #4] - 800d34a: 7812 ldrb r2, [r2, #0] - 800d34c: 3320 adds r3, #32 - 800d34e: 443b add r3, r7 - 800d350: f803 2c14 strb.w r2, [r3, #-20] + 800d3ba: 69bb ldr r3, [r7, #24] + 800d3bc: 1c5a adds r2, r3, #1 + 800d3be: 61ba str r2, [r7, #24] + 800d3c0: 687a ldr r2, [r7, #4] + 800d3c2: 7812 ldrb r2, [r2, #0] + 800d3c4: 3320 adds r3, #32 + 800d3c6: 443b add r3, r7 + 800d3c8: f803 2c14 strb.w r2, [r3, #-20] } text++; - 800d354: 687b ldr r3, [r7, #4] - 800d356: 3301 adds r3, #1 - 800d358: 607b str r3, [r7, #4] + 800d3cc: 687b ldr r3, [r7, #4] + 800d3ce: 3301 adds r3, #1 + 800d3d0: 607b str r3, [r7, #4] while ((*text != '\0') && (n < 6U)) - 800d35a: 687b ldr r3, [r7, #4] - 800d35c: 781b ldrb r3, [r3, #0] - 800d35e: 2b00 cmp r3, #0 - 800d360: d002 beq.n 800d368 - 800d362: 69bb ldr r3, [r7, #24] - 800d364: 2b05 cmp r3, #5 - 800d366: d9e2 bls.n 800d32e + 800d3d2: 687b ldr r3, [r7, #4] + 800d3d4: 781b ldrb r3, [r3, #0] + 800d3d6: 2b00 cmp r3, #0 + 800d3d8: d002 beq.n 800d3e0 + 800d3da: 69bb ldr r3, [r7, #24] + 800d3dc: 2b05 cmp r3, #5 + 800d3de: d9e2 bls.n 800d3a6 } if (n != 6U) - 800d368: 69bb ldr r3, [r7, #24] - 800d36a: 2b06 cmp r3, #6 - 800d36c: d001 beq.n 800d372 + 800d3e0: 69bb ldr r3, [r7, #24] + 800d3e2: 2b06 cmp r3, #6 + 800d3e4: d001 beq.n 800d3ea { return 0U; - 800d36e: 2300 movs r3, #0 - 800d370: e03d b.n 800d3ee + 800d3e6: 2300 movs r3, #0 + 800d3e8: e03d b.n 800d466 } for (i = 0U; i < n; i++) - 800d372: 2300 movs r3, #0 - 800d374: 61fb str r3, [r7, #28] - 800d376: e011 b.n 800d39c + 800d3ea: 2300 movs r3, #0 + 800d3ec: 61fb str r3, [r7, #28] + 800d3ee: e011 b.n 800d414 { if (isxdigit((unsigned char)buf[i]) == 0) - 800d378: f107 020c add.w r2, r7, #12 - 800d37c: 69fb ldr r3, [r7, #28] - 800d37e: 4413 add r3, r2 - 800d380: 781b ldrb r3, [r3, #0] - 800d382: 3301 adds r3, #1 - 800d384: 4a1c ldr r2, [pc, #112] @ (800d3f8 ) - 800d386: 4413 add r3, r2 - 800d388: 781b ldrb r3, [r3, #0] - 800d38a: f003 0344 and.w r3, r3, #68 @ 0x44 - 800d38e: 2b00 cmp r3, #0 - 800d390: d101 bne.n 800d396 + 800d3f0: f107 020c add.w r2, r7, #12 + 800d3f4: 69fb ldr r3, [r7, #28] + 800d3f6: 4413 add r3, r2 + 800d3f8: 781b ldrb r3, [r3, #0] + 800d3fa: 3301 adds r3, #1 + 800d3fc: 4a1c ldr r2, [pc, #112] @ (800d470 ) + 800d3fe: 4413 add r3, r2 + 800d400: 781b ldrb r3, [r3, #0] + 800d402: f003 0344 and.w r3, r3, #68 @ 0x44 + 800d406: 2b00 cmp r3, #0 + 800d408: d101 bne.n 800d40e { return 0U; - 800d392: 2300 movs r3, #0 - 800d394: e02b b.n 800d3ee + 800d40a: 2300 movs r3, #0 + 800d40c: e02b b.n 800d466 for (i = 0U; i < n; i++) - 800d396: 69fb ldr r3, [r7, #28] - 800d398: 3301 adds r3, #1 - 800d39a: 61fb str r3, [r7, #28] - 800d39c: 69fa ldr r2, [r7, #28] - 800d39e: 69bb ldr r3, [r7, #24] - 800d3a0: 429a cmp r2, r3 - 800d3a2: d3e9 bcc.n 800d378 + 800d40e: 69fb ldr r3, [r7, #28] + 800d410: 3301 adds r3, #1 + 800d412: 61fb str r3, [r7, #28] + 800d414: 69fa ldr r2, [r7, #28] + 800d416: 69bb ldr r3, [r7, #24] + 800d418: 429a cmp r2, r3 + 800d41a: d3e9 bcc.n 800d3f0 } } buf[6] = '\0'; - 800d3a4: 2300 movs r3, #0 - 800d3a6: 74bb strb r3, [r7, #18] + 800d41c: 2300 movs r3, #0 + 800d41e: 74bb strb r3, [r7, #18] value = strtoul(buf, &endptr, 16); - 800d3a8: f107 0108 add.w r1, r7, #8 - 800d3ac: f107 030c add.w r3, r7, #12 - 800d3b0: 2210 movs r2, #16 - 800d3b2: 4618 mov r0, r3 - 800d3b4: f001 fd84 bl 800eec0 - 800d3b8: 6178 str r0, [r7, #20] + 800d420: f107 0108 add.w r1, r7, #8 + 800d424: f107 030c add.w r3, r7, #12 + 800d428: 2210 movs r2, #16 + 800d42a: 4618 mov r0, r3 + 800d42c: f001 fd5c bl 800eee8 + 800d430: 6178 str r0, [r7, #20] if ((endptr == NULL) || (*endptr != '\0')) - 800d3ba: 68bb ldr r3, [r7, #8] - 800d3bc: 2b00 cmp r3, #0 - 800d3be: d003 beq.n 800d3c8 - 800d3c0: 68bb ldr r3, [r7, #8] - 800d3c2: 781b ldrb r3, [r3, #0] - 800d3c4: 2b00 cmp r3, #0 - 800d3c6: d001 beq.n 800d3cc + 800d432: 68bb ldr r3, [r7, #8] + 800d434: 2b00 cmp r3, #0 + 800d436: d003 beq.n 800d440 + 800d438: 68bb ldr r3, [r7, #8] + 800d43a: 781b ldrb r3, [r3, #0] + 800d43c: 2b00 cmp r3, #0 + 800d43e: d001 beq.n 800d444 { return 0U; - 800d3c8: 2300 movs r3, #0 - 800d3ca: e010 b.n 800d3ee + 800d440: 2300 movs r3, #0 + 800d442: e010 b.n 800d466 } out[0] = (uint8_t)((value >> 16) & 0xFFU); - 800d3cc: 697b ldr r3, [r7, #20] - 800d3ce: 0c1b lsrs r3, r3, #16 - 800d3d0: b2da uxtb r2, r3 - 800d3d2: 683b ldr r3, [r7, #0] - 800d3d4: 701a strb r2, [r3, #0] + 800d444: 697b ldr r3, [r7, #20] + 800d446: 0c1b lsrs r3, r3, #16 + 800d448: b2da uxtb r2, r3 + 800d44a: 683b ldr r3, [r7, #0] + 800d44c: 701a strb r2, [r3, #0] out[1] = (uint8_t)((value >> 8) & 0xFFU); - 800d3d6: 697b ldr r3, [r7, #20] - 800d3d8: 0a1a lsrs r2, r3, #8 - 800d3da: 683b ldr r3, [r7, #0] - 800d3dc: 3301 adds r3, #1 - 800d3de: b2d2 uxtb r2, r2 - 800d3e0: 701a strb r2, [r3, #0] + 800d44e: 697b ldr r3, [r7, #20] + 800d450: 0a1a lsrs r2, r3, #8 + 800d452: 683b ldr r3, [r7, #0] + 800d454: 3301 adds r3, #1 + 800d456: b2d2 uxtb r2, r2 + 800d458: 701a strb r2, [r3, #0] out[2] = (uint8_t)(value & 0xFFU); - 800d3e2: 683b ldr r3, [r7, #0] - 800d3e4: 3302 adds r3, #2 - 800d3e6: 697a ldr r2, [r7, #20] - 800d3e8: b2d2 uxtb r2, r2 - 800d3ea: 701a strb r2, [r3, #0] + 800d45a: 683b ldr r3, [r7, #0] + 800d45c: 3302 adds r3, #2 + 800d45e: 697a ldr r2, [r7, #20] + 800d460: b2d2 uxtb r2, r2 + 800d462: 701a strb r2, [r3, #0] return 1U; - 800d3ec: 2301 movs r3, #1 + 800d464: 2301 movs r3, #1 } - 800d3ee: 4618 mov r0, r3 - 800d3f0: 3720 adds r7, #32 - 800d3f2: 46bd mov sp, r7 - 800d3f4: bd80 pop {r7, pc} - 800d3f6: bf00 nop - 800d3f8: 08010518 .word 0x08010518 + 800d466: 4618 mov r0, r3 + 800d468: 3720 adds r7, #32 + 800d46a: 46bd mov sp, r7 + 800d46c: bd80 pop {r7, pc} + 800d46e: bf00 nop + 800d470: 08010540 .word 0x08010540 -0800d3fc : +0800d474 : static char *App_SkipSpaces(char *s) { - 800d3fc: b480 push {r7} - 800d3fe: b083 sub sp, #12 - 800d400: af00 add r7, sp, #0 - 800d402: 6078 str r0, [r7, #4] + 800d474: b480 push {r7} + 800d476: b083 sub sp, #12 + 800d478: af00 add r7, sp, #0 + 800d47a: 6078 str r0, [r7, #4] while ((s != NULL) && (*s != '\0') && isspace((unsigned char)*s)) - 800d404: e002 b.n 800d40c + 800d47c: e002 b.n 800d484 { s++; - 800d406: 687b ldr r3, [r7, #4] - 800d408: 3301 adds r3, #1 - 800d40a: 607b str r3, [r7, #4] + 800d47e: 687b ldr r3, [r7, #4] + 800d480: 3301 adds r3, #1 + 800d482: 607b str r3, [r7, #4] while ((s != NULL) && (*s != '\0') && isspace((unsigned char)*s)) - 800d40c: 687b ldr r3, [r7, #4] - 800d40e: 2b00 cmp r3, #0 - 800d410: d00d beq.n 800d42e - 800d412: 687b ldr r3, [r7, #4] - 800d414: 781b ldrb r3, [r3, #0] - 800d416: 2b00 cmp r3, #0 - 800d418: d009 beq.n 800d42e - 800d41a: 687b ldr r3, [r7, #4] - 800d41c: 781b ldrb r3, [r3, #0] - 800d41e: 3301 adds r3, #1 - 800d420: 4a06 ldr r2, [pc, #24] @ (800d43c ) - 800d422: 4413 add r3, r2 - 800d424: 781b ldrb r3, [r3, #0] - 800d426: f003 0308 and.w r3, r3, #8 - 800d42a: 2b00 cmp r3, #0 - 800d42c: d1eb bne.n 800d406 + 800d484: 687b ldr r3, [r7, #4] + 800d486: 2b00 cmp r3, #0 + 800d488: d00d beq.n 800d4a6 + 800d48a: 687b ldr r3, [r7, #4] + 800d48c: 781b ldrb r3, [r3, #0] + 800d48e: 2b00 cmp r3, #0 + 800d490: d009 beq.n 800d4a6 + 800d492: 687b ldr r3, [r7, #4] + 800d494: 781b ldrb r3, [r3, #0] + 800d496: 3301 adds r3, #1 + 800d498: 4a06 ldr r2, [pc, #24] @ (800d4b4 ) + 800d49a: 4413 add r3, r2 + 800d49c: 781b ldrb r3, [r3, #0] + 800d49e: f003 0308 and.w r3, r3, #8 + 800d4a2: 2b00 cmp r3, #0 + 800d4a4: d1eb bne.n 800d47e } return s; - 800d42e: 687b ldr r3, [r7, #4] + 800d4a6: 687b ldr r3, [r7, #4] } - 800d430: 4618 mov r0, r3 - 800d432: 370c adds r7, #12 - 800d434: 46bd mov sp, r7 - 800d436: bc80 pop {r7} - 800d438: 4770 bx lr - 800d43a: bf00 nop - 800d43c: 08010518 .word 0x08010518 - -0800d440 : + 800d4a8: 4618 mov r0, r3 + 800d4aa: 370c adds r7, #12 + 800d4ac: 46bd mov sp, r7 + 800d4ae: bc80 pop {r7} + 800d4b0: 4770 bx lr + 800d4b2: bf00 nop + 800d4b4: 08010540 .word 0x08010540 +0800d4b8 : static void App_LedTxPulse(void) { - 800d440: b580 push {r7, lr} - 800d442: af00 add r7, sp, #0 + 800d4b8: b580 push {r7, lr} + 800d4ba: af00 add r7, sp, #0 + TimerStop(&g_led_tx_timer); + 800d4bc: 4808 ldr r0, [pc, #32] @ (800d4e0 ) + 800d4be: f000 ffb1 bl 800e424 HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); - 800d444: 2201 movs r2, #1 - 800d446: f44f 4100 mov.w r1, #32768 @ 0x8000 - 800d44a: 4807 ldr r0, [pc, #28] @ (800d468 ) - 800d44c: f7f5 fc3c bl 8002cc8 - g_led_tx_until = HAL_GetTick() + LED_PULSE_MS; - 800d450: f7f3 fbfa bl 8000c48 - 800d454: 4603 mov r3, r0 - 800d456: 3332 adds r3, #50 @ 0x32 - 800d458: 4a04 ldr r2, [pc, #16] @ (800d46c ) - 800d45a: 6013 str r3, [r2, #0] - g_led_tx_active = 1U; - 800d45c: 4b04 ldr r3, [pc, #16] @ (800d470 ) - 800d45e: 2201 movs r2, #1 - 800d460: 701a strb r2, [r3, #0] + 800d4c2: 2201 movs r2, #1 + 800d4c4: f44f 4100 mov.w r1, #32768 @ 0x8000 + 800d4c8: 4806 ldr r0, [pc, #24] @ (800d4e4 ) + 800d4ca: f7f5 fbfd bl 8002cc8 + TimerSetValue(&g_led_tx_timer, LED_PULSE_MS); + 800d4ce: 2132 movs r1, #50 @ 0x32 + 800d4d0: 4803 ldr r0, [pc, #12] @ (800d4e0 ) + 800d4d2: f001 f817 bl 800e504 + TimerStart(&g_led_tx_timer); + 800d4d6: 4802 ldr r0, [pc, #8] @ (800d4e0 ) + 800d4d8: f000 ff36 bl 800e348 } - 800d462: bf00 nop - 800d464: bd80 pop {r7, pc} - 800d466: bf00 nop - 800d468: 48000400 .word 0x48000400 - 800d46c: 20000630 .word 0x20000630 - 800d470: 2000063c .word 0x2000063c + 800d4dc: bf00 nop + 800d4de: bd80 pop {r7, pc} + 800d4e0: 20000630 .word 0x20000630 + 800d4e4: 48000400 .word 0x48000400 -0800d474 : +0800d4e8 : static void App_LedRxPulse(void) { - 800d474: b580 push {r7, lr} - 800d476: af00 add r7, sp, #0 + 800d4e8: b580 push {r7, lr} + 800d4ea: af00 add r7, sp, #0 + TimerStop(&g_led_rx_timer); + 800d4ec: 4808 ldr r0, [pc, #32] @ (800d510 ) + 800d4ee: f000 ff99 bl 800e424 HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); - 800d478: 2201 movs r2, #1 - 800d47a: f44f 7100 mov.w r1, #512 @ 0x200 - 800d47e: 4807 ldr r0, [pc, #28] @ (800d49c ) - 800d480: f7f5 fc22 bl 8002cc8 - g_led_rx_until = HAL_GetTick() + LED_PULSE_MS; - 800d484: f7f3 fbe0 bl 8000c48 - 800d488: 4603 mov r3, r0 - 800d48a: 3332 adds r3, #50 @ 0x32 - 800d48c: 4a04 ldr r2, [pc, #16] @ (800d4a0 ) - 800d48e: 6013 str r3, [r2, #0] - g_led_rx_active = 1U; - 800d490: 4b04 ldr r3, [pc, #16] @ (800d4a4 ) - 800d492: 2201 movs r2, #1 - 800d494: 701a strb r2, [r3, #0] + 800d4f2: 2201 movs r2, #1 + 800d4f4: f44f 7100 mov.w r1, #512 @ 0x200 + 800d4f8: 4806 ldr r0, [pc, #24] @ (800d514 ) + 800d4fa: f7f5 fbe5 bl 8002cc8 + TimerSetValue(&g_led_rx_timer, LED_PULSE_MS); + 800d4fe: 2132 movs r1, #50 @ 0x32 + 800d500: 4803 ldr r0, [pc, #12] @ (800d510 ) + 800d502: f000 ffff bl 800e504 + TimerStart(&g_led_rx_timer); + 800d506: 4802 ldr r0, [pc, #8] @ (800d510 ) + 800d508: f000 ff1e bl 800e348 } - 800d496: bf00 nop - 800d498: bd80 pop {r7, pc} - 800d49a: bf00 nop - 800d49c: 48000400 .word 0x48000400 - 800d4a0: 20000634 .word 0x20000634 - 800d4a4: 2000063d .word 0x2000063d + 800d50c: bf00 nop + 800d50e: bd80 pop {r7, pc} + 800d510: 20000648 .word 0x20000648 + 800d514: 48000400 .word 0x48000400 -0800d4a8 : +0800d518 : static void App_LedErrPulse(void) { - 800d4a8: b580 push {r7, lr} - 800d4aa: af00 add r7, sp, #0 + 800d518: b580 push {r7, lr} + 800d51a: af00 add r7, sp, #0 + TimerStop(&g_led_err_timer); + 800d51c: 4808 ldr r0, [pc, #32] @ (800d540 ) + 800d51e: f000 ff81 bl 800e424 HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); - 800d4ac: 2201 movs r2, #1 - 800d4ae: f44f 6100 mov.w r1, #2048 @ 0x800 - 800d4b2: 4807 ldr r0, [pc, #28] @ (800d4d0 ) - 800d4b4: f7f5 fc08 bl 8002cc8 - g_led_err_until = HAL_GetTick() + LED_PULSE_MS; - 800d4b8: f7f3 fbc6 bl 8000c48 - 800d4bc: 4603 mov r3, r0 - 800d4be: 3332 adds r3, #50 @ 0x32 - 800d4c0: 4a04 ldr r2, [pc, #16] @ (800d4d4 ) - 800d4c2: 6013 str r3, [r2, #0] - g_led_err_active = 1U; - 800d4c4: 4b04 ldr r3, [pc, #16] @ (800d4d8 ) - 800d4c6: 2201 movs r2, #1 - 800d4c8: 701a strb r2, [r3, #0] -} - 800d4ca: bf00 nop - 800d4cc: bd80 pop {r7, pc} - 800d4ce: bf00 nop - 800d4d0: 48000400 .word 0x48000400 - 800d4d4: 20000638 .word 0x20000638 - 800d4d8: 2000063e .word 0x2000063e - -0800d4dc : - -static void App_ProcessLeds(void) -{ - 800d4dc: b580 push {r7, lr} - 800d4de: b082 sub sp, #8 - 800d4e0: af00 add r7, sp, #0 - uint32_t now = HAL_GetTick(); - 800d4e2: f7f3 fbb1 bl 8000c48 - 800d4e6: 6078 str r0, [r7, #4] - - if (g_led_tx_active && ((int32_t)(now - g_led_tx_until) >= 0)) - 800d4e8: 4b1e ldr r3, [pc, #120] @ (800d564 ) - 800d4ea: 781b ldrb r3, [r3, #0] - 800d4ec: 2b00 cmp r3, #0 - 800d4ee: d00e beq.n 800d50e - 800d4f0: 4b1d ldr r3, [pc, #116] @ (800d568 ) - 800d4f2: 681b ldr r3, [r3, #0] - 800d4f4: 687a ldr r2, [r7, #4] - 800d4f6: 1ad3 subs r3, r2, r3 - 800d4f8: 2b00 cmp r3, #0 - 800d4fa: db08 blt.n 800d50e - { - HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); - 800d4fc: 2200 movs r2, #0 - 800d4fe: f44f 4100 mov.w r1, #32768 @ 0x8000 - 800d502: 481a ldr r0, [pc, #104] @ (800d56c ) - 800d504: f7f5 fbe0 bl 8002cc8 - g_led_tx_active = 0U; - 800d508: 4b16 ldr r3, [pc, #88] @ (800d564 ) - 800d50a: 2200 movs r2, #0 - 800d50c: 701a strb r2, [r3, #0] - } - - if (g_led_rx_active && ((int32_t)(now - g_led_rx_until) >= 0)) - 800d50e: 4b18 ldr r3, [pc, #96] @ (800d570 ) - 800d510: 781b ldrb r3, [r3, #0] - 800d512: 2b00 cmp r3, #0 - 800d514: d00e beq.n 800d534 - 800d516: 4b17 ldr r3, [pc, #92] @ (800d574 ) - 800d518: 681b ldr r3, [r3, #0] - 800d51a: 687a ldr r2, [r7, #4] - 800d51c: 1ad3 subs r3, r2, r3 - 800d51e: 2b00 cmp r3, #0 - 800d520: db08 blt.n 800d534 - { - HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); - 800d522: 2200 movs r2, #0 - 800d524: f44f 7100 mov.w r1, #512 @ 0x200 - 800d528: 4810 ldr r0, [pc, #64] @ (800d56c ) + 800d522: 2201 movs r2, #1 + 800d524: f44f 6100 mov.w r1, #2048 @ 0x800 + 800d528: 4806 ldr r0, [pc, #24] @ (800d544 ) 800d52a: f7f5 fbcd bl 8002cc8 - g_led_rx_active = 0U; - 800d52e: 4b10 ldr r3, [pc, #64] @ (800d570 ) - 800d530: 2200 movs r2, #0 - 800d532: 701a strb r2, [r3, #0] - } - - if (g_led_err_active && ((int32_t)(now - g_led_err_until) >= 0)) - 800d534: 4b10 ldr r3, [pc, #64] @ (800d578 ) - 800d536: 781b ldrb r3, [r3, #0] - 800d538: 2b00 cmp r3, #0 - 800d53a: d00e beq.n 800d55a - 800d53c: 4b0f ldr r3, [pc, #60] @ (800d57c ) - 800d53e: 681b ldr r3, [r3, #0] - 800d540: 687a ldr r2, [r7, #4] - 800d542: 1ad3 subs r3, r2, r3 - 800d544: 2b00 cmp r3, #0 - 800d546: db08 blt.n 800d55a - { - HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); - 800d548: 2200 movs r2, #0 - 800d54a: f44f 6100 mov.w r1, #2048 @ 0x800 - 800d54e: 4807 ldr r0, [pc, #28] @ (800d56c ) - 800d550: f7f5 fbba bl 8002cc8 - g_led_err_active = 0U; - 800d554: 4b08 ldr r3, [pc, #32] @ (800d578 ) - 800d556: 2200 movs r2, #0 - 800d558: 701a strb r2, [r3, #0] - } + TimerSetValue(&g_led_err_timer, LED_PULSE_MS); + 800d52e: 2132 movs r1, #50 @ 0x32 + 800d530: 4803 ldr r0, [pc, #12] @ (800d540 ) + 800d532: f000 ffe7 bl 800e504 + TimerStart(&g_led_err_timer); + 800d536: 4802 ldr r0, [pc, #8] @ (800d540 ) + 800d538: f000 ff06 bl 800e348 } - 800d55a: bf00 nop - 800d55c: 3708 adds r7, #8 - 800d55e: 46bd mov sp, r7 - 800d560: bd80 pop {r7, pc} - 800d562: bf00 nop - 800d564: 2000063c .word 0x2000063c - 800d568: 20000630 .word 0x20000630 - 800d56c: 48000400 .word 0x48000400 - 800d570: 2000063d .word 0x2000063d - 800d574: 20000634 .word 0x20000634 - 800d578: 2000063e .word 0x2000063e - 800d57c: 20000638 .word 0x20000638 - -0800d580 : - + 800d53c: bf00 nop + 800d53e: bd80 pop {r7, pc} + 800d540: 20000660 .word 0x20000660 + 800d544: 48000400 .word 0x48000400 +0800d548 : static void OnTxDone(void) { - 800d580: b480 push {r7} - 800d582: af00 add r7, sp, #0 + 800d548: b480 push {r7} + 800d54a: af00 add r7, sp, #0 g_radio_tx_done = 1U; - 800d584: 4b03 ldr r3, [pc, #12] @ (800d594 ) - 800d586: 2201 movs r2, #1 - 800d588: 701a strb r2, [r3, #0] + 800d54c: 4b03 ldr r3, [pc, #12] @ (800d55c ) + 800d54e: 2201 movs r2, #1 + 800d550: 701a strb r2, [r3, #0] } - 800d58a: bf00 nop - 800d58c: 46bd mov sp, r7 - 800d58e: bc80 pop {r7} - 800d590: 4770 bx lr - 800d592: bf00 nop - 800d594: 20000624 .word 0x20000624 + 800d552: bf00 nop + 800d554: 46bd mov sp, r7 + 800d556: bc80 pop {r7} + 800d558: 4770 bx lr + 800d55a: bf00 nop + 800d55c: 20000624 .word 0x20000624 + +0800d560 : + +static void App_LedTxOff(void *context) +{ + 800d560: b580 push {r7, lr} + 800d562: b082 sub sp, #8 + 800d564: af00 add r7, sp, #0 + 800d566: 6078 str r0, [r7, #4] + (void)context; + HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); + 800d568: 2200 movs r2, #0 + 800d56a: f44f 4100 mov.w r1, #32768 @ 0x8000 + 800d56e: 4803 ldr r0, [pc, #12] @ (800d57c ) + 800d570: f7f5 fbaa bl 8002cc8 +} + 800d574: bf00 nop + 800d576: 3708 adds r7, #8 + 800d578: 46bd mov sp, r7 + 800d57a: bd80 pop {r7, pc} + 800d57c: 48000400 .word 0x48000400 + +0800d580 : + +static void App_LedRxOff(void *context) +{ + 800d580: b580 push {r7, lr} + 800d582: b082 sub sp, #8 + 800d584: af00 add r7, sp, #0 + 800d586: 6078 str r0, [r7, #4] + (void)context; + HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); + 800d588: 2200 movs r2, #0 + 800d58a: f44f 7100 mov.w r1, #512 @ 0x200 + 800d58e: 4803 ldr r0, [pc, #12] @ (800d59c ) + 800d590: f7f5 fb9a bl 8002cc8 +} + 800d594: bf00 nop + 800d596: 3708 adds r7, #8 + 800d598: 46bd mov sp, r7 + 800d59a: bd80 pop {r7, pc} + 800d59c: 48000400 .word 0x48000400 + +0800d5a0 : + +static void App_LedErrOff(void *context) +{ + 800d5a0: b580 push {r7, lr} + 800d5a2: b082 sub sp, #8 + 800d5a4: af00 add r7, sp, #0 + 800d5a6: 6078 str r0, [r7, #4] + (void)context; + HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); + 800d5a8: 2200 movs r2, #0 + 800d5aa: f44f 6100 mov.w r1, #2048 @ 0x800 + 800d5ae: 4803 ldr r0, [pc, #12] @ (800d5bc ) + 800d5b0: f7f5 fb8a bl 8002cc8 +} + 800d5b4: bf00 nop + 800d5b6: 3708 adds r7, #8 + 800d5b8: 46bd mov sp, r7 + 800d5ba: bd80 pop {r7, pc} + 800d5bc: 48000400 .word 0x48000400 + +0800d5c0 : -0800d598 : static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t cfo) { - 800d598: b580 push {r7, lr} - 800d59a: b084 sub sp, #16 - 800d59c: af00 add r7, sp, #0 - 800d59e: 60f8 str r0, [r7, #12] - 800d5a0: 4608 mov r0, r1 - 800d5a2: 4611 mov r1, r2 - 800d5a4: 461a mov r2, r3 - 800d5a6: 4603 mov r3, r0 - 800d5a8: 817b strh r3, [r7, #10] - 800d5aa: 460b mov r3, r1 - 800d5ac: 813b strh r3, [r7, #8] - 800d5ae: 4613 mov r3, r2 - 800d5b0: 71fb strb r3, [r7, #7] + 800d5c0: b580 push {r7, lr} + 800d5c2: b084 sub sp, #16 + 800d5c4: af00 add r7, sp, #0 + 800d5c6: 60f8 str r0, [r7, #12] + 800d5c8: 4608 mov r0, r1 + 800d5ca: 4611 mov r1, r2 + 800d5cc: 461a mov r2, r3 + 800d5ce: 4603 mov r3, r0 + 800d5d0: 817b strh r3, [r7, #10] + 800d5d2: 460b mov r3, r1 + 800d5d4: 813b strh r3, [r7, #8] + 800d5d6: 4613 mov r3, r2 + 800d5d8: 71fb strb r3, [r7, #7] g_last_rx_rssi = rssi; - 800d5b2: 4a0d ldr r2, [pc, #52] @ (800d5e8 ) - 800d5b4: 893b ldrh r3, [r7, #8] - 800d5b6: 8013 strh r3, [r2, #0] + 800d5da: 4a0d ldr r2, [pc, #52] @ (800d610 ) + 800d5dc: 893b ldrh r3, [r7, #8] + 800d5de: 8013 strh r3, [r2, #0] g_last_rx_cfo = cfo; - 800d5b8: 4a0c ldr r2, [pc, #48] @ (800d5ec ) - 800d5ba: 79fb ldrb r3, [r7, #7] - 800d5bc: 7013 strb r3, [r2, #0] + 800d5e0: 4a0c ldr r2, [pc, #48] @ (800d614 ) + 800d5e2: 79fb ldrb r3, [r7, #7] + 800d5e4: 7013 strb r3, [r2, #0] if (size > RADIO_MAX_PAYLOAD_SIZE) - 800d5be: 897b ldrh r3, [r7, #10] - 800d5c0: 2bdc cmp r3, #220 @ 0xdc - 800d5c2: d901 bls.n 800d5c8 + 800d5e6: 897b ldrh r3, [r7, #10] + 800d5e8: 2bdc cmp r3, #220 @ 0xdc + 800d5ea: d901 bls.n 800d5f0 { size = RADIO_MAX_PAYLOAD_SIZE; - 800d5c4: 23dc movs r3, #220 @ 0xdc - 800d5c6: 817b strh r3, [r7, #10] + 800d5ec: 23dc movs r3, #220 @ 0xdc + 800d5ee: 817b strh r3, [r7, #10] } memcpy(g_rx_payload, payload, size); - 800d5c8: 897b ldrh r3, [r7, #10] - 800d5ca: 461a mov r2, r3 - 800d5cc: 68f9 ldr r1, [r7, #12] - 800d5ce: 4808 ldr r0, [pc, #32] @ (800d5f0 ) - 800d5d0: f001 fd02 bl 800efd8 + 800d5f0: 897b ldrh r3, [r7, #10] + 800d5f2: 461a mov r2, r3 + 800d5f4: 68f9 ldr r1, [r7, #12] + 800d5f6: 4808 ldr r0, [pc, #32] @ (800d618 ) + 800d5f8: f001 fd02 bl 800f000 g_rx_payload_len = size; - 800d5d4: 4a07 ldr r2, [pc, #28] @ (800d5f4 ) - 800d5d6: 897b ldrh r3, [r7, #10] - 800d5d8: 8013 strh r3, [r2, #0] + 800d5fc: 4a07 ldr r2, [pc, #28] @ (800d61c ) + 800d5fe: 897b ldrh r3, [r7, #10] + 800d600: 8013 strh r3, [r2, #0] g_radio_rx_done = 1U; - 800d5da: 4b07 ldr r3, [pc, #28] @ (800d5f8 ) - 800d5dc: 2201 movs r2, #1 - 800d5de: 701a strb r2, [r3, #0] + 800d602: 4b07 ldr r3, [pc, #28] @ (800d620 ) + 800d604: 2201 movs r2, #1 + 800d606: 701a strb r2, [r3, #0] } - 800d5e0: bf00 nop - 800d5e2: 3710 adds r7, #16 - 800d5e4: 46bd mov sp, r7 - 800d5e6: bd80 pop {r7, pc} - 800d5e8: 2000062a .word 0x2000062a - 800d5ec: 2000062c .word 0x2000062c - 800d5f0: 20000644 .word 0x20000644 - 800d5f4: 20000720 .word 0x20000720 - 800d5f8: 20000626 .word 0x20000626 + 800d608: bf00 nop + 800d60a: 3710 adds r7, #16 + 800d60c: 46bd mov sp, r7 + 800d60e: bd80 pop {r7, pc} + 800d610: 2000062a .word 0x2000062a + 800d614: 2000062c .word 0x2000062c + 800d618: 2000067c .word 0x2000067c + 800d61c: 20000758 .word 0x20000758 + 800d620: 20000626 .word 0x20000626 -0800d5fc : +0800d624 : static void OnTxTimeout(void) { - 800d5fc: b480 push {r7} - 800d5fe: af00 add r7, sp, #0 + 800d624: b480 push {r7} + 800d626: af00 add r7, sp, #0 g_radio_tx_timeout = 1U; - 800d600: 4b03 ldr r3, [pc, #12] @ (800d610 ) - 800d602: 2201 movs r2, #1 - 800d604: 701a strb r2, [r3, #0] + 800d628: 4b03 ldr r3, [pc, #12] @ (800d638 ) + 800d62a: 2201 movs r2, #1 + 800d62c: 701a strb r2, [r3, #0] } - 800d606: bf00 nop - 800d608: 46bd mov sp, r7 - 800d60a: bc80 pop {r7} - 800d60c: 4770 bx lr - 800d60e: bf00 nop - 800d610: 20000625 .word 0x20000625 + 800d62e: bf00 nop + 800d630: 46bd mov sp, r7 + 800d632: bc80 pop {r7} + 800d634: 4770 bx lr + 800d636: bf00 nop + 800d638: 20000625 .word 0x20000625 -0800d614 : +0800d63c : static void OnRxTimeout(void) { - 800d614: b480 push {r7} - 800d616: af00 add r7, sp, #0 + 800d63c: b480 push {r7} + 800d63e: af00 add r7, sp, #0 g_radio_rx_timeout = 1U; - 800d618: 4b03 ldr r3, [pc, #12] @ (800d628 ) - 800d61a: 2201 movs r2, #1 - 800d61c: 701a strb r2, [r3, #0] + 800d640: 4b03 ldr r3, [pc, #12] @ (800d650 ) + 800d642: 2201 movs r2, #1 + 800d644: 701a strb r2, [r3, #0] } - 800d61e: bf00 nop - 800d620: 46bd mov sp, r7 - 800d622: bc80 pop {r7} - 800d624: 4770 bx lr - 800d626: bf00 nop - 800d628: 20000627 .word 0x20000627 + 800d646: bf00 nop + 800d648: 46bd mov sp, r7 + 800d64a: bc80 pop {r7} + 800d64c: 4770 bx lr + 800d64e: bf00 nop + 800d650: 20000627 .word 0x20000627 -0800d62c : +0800d654 : static void OnRxError(void) { - 800d62c: b480 push {r7} - 800d62e: af00 add r7, sp, #0 + 800d654: b480 push {r7} + 800d656: af00 add r7, sp, #0 g_radio_rx_error = 1U; - 800d630: 4b03 ldr r3, [pc, #12] @ (800d640 ) - 800d632: 2201 movs r2, #1 - 800d634: 701a strb r2, [r3, #0] + 800d658: 4b03 ldr r3, [pc, #12] @ (800d668 ) + 800d65a: 2201 movs r2, #1 + 800d65c: 701a strb r2, [r3, #0] } - 800d636: bf00 nop - 800d638: 46bd mov sp, r7 - 800d63a: bc80 pop {r7} - 800d63c: 4770 bx lr - 800d63e: bf00 nop - 800d640: 20000628 .word 0x20000628 + 800d65e: bf00 nop + 800d660: 46bd mov sp, r7 + 800d662: bc80 pop {r7} + 800d664: 4770 bx lr + 800d666: bf00 nop + 800d668: 20000628 .word 0x20000628 -0800d644 : +0800d66c : #include "config_defaults.h" #include void Config_LoadDefaults(BridgeConfig_t *cfg) { - 800d644: b480 push {r7} - 800d646: b083 sub sp, #12 - 800d648: af00 add r7, sp, #0 - 800d64a: 6078 str r0, [r7, #4] + 800d66c: b480 push {r7} + 800d66e: b083 sub sp, #12 + 800d670: af00 add r7, sp, #0 + 800d672: 6078 str r0, [r7, #4] if (cfg == 0) - 800d64c: 687b ldr r3, [r7, #4] - 800d64e: 2b00 cmp r3, #0 - 800d650: d023 beq.n 800d69a + 800d674: 687b ldr r3, [r7, #4] + 800d676: 2b00 cmp r3, #0 + 800d678: d023 beq.n 800d6c2 { return; } cfg->rf_frequency = DEFAULT_RF_FREQUENCY; - 800d652: 687b ldr r3, [r7, #4] - 800d654: 4a13 ldr r2, [pc, #76] @ (800d6a4 ) - 800d656: 601a str r2, [r3, #0] + 800d67a: 687b ldr r3, [r7, #4] + 800d67c: 4a13 ldr r2, [pc, #76] @ (800d6cc ) + 800d67e: 601a str r2, [r3, #0] cfg->tx_power = DEFAULT_TX_OUTPUT_POWER; - 800d658: 687b ldr r3, [r7, #4] - 800d65a: 220e movs r2, #14 - 800d65c: 711a strb r2, [r3, #4] + 800d680: 687b ldr r3, [r7, #4] + 800d682: 220e movs r2, #14 + 800d684: 711a strb r2, [r3, #4] cfg->fsk_bitrate = DEFAULT_FSK_BITRATE; - 800d65e: 687b ldr r3, [r7, #4] - 800d660: f24c 3250 movw r2, #50000 @ 0xc350 - 800d664: 609a str r2, [r3, #8] + 800d686: 687b ldr r3, [r7, #4] + 800d688: f24c 3250 movw r2, #50000 @ 0xc350 + 800d68c: 609a str r2, [r3, #8] cfg->fsk_bandwidth = DEFAULT_FSK_BANDWIDTH; - 800d666: 687b ldr r3, [r7, #4] - 800d668: f24c 3250 movw r2, #50000 @ 0xc350 - 800d66c: 60da str r2, [r3, #12] + 800d68e: 687b ldr r3, [r7, #4] + 800d690: f24c 3250 movw r2, #50000 @ 0xc350 + 800d694: 60da str r2, [r3, #12] cfg->fsk_fdev = DEFAULT_FSK_FDEV; - 800d66e: 687b ldr r3, [r7, #4] - 800d670: f246 12a8 movw r2, #25000 @ 0x61a8 - 800d674: 611a str r2, [r3, #16] + 800d696: 687b ldr r3, [r7, #4] + 800d698: f246 12a8 movw r2, #25000 @ 0x61a8 + 800d69c: 611a str r2, [r3, #16] cfg->fsk_preamble_len = DEFAULT_FSK_PREAMBLE_LENGTH; - 800d676: 687b ldr r3, [r7, #4] - 800d678: 2204 movs r2, #4 - 800d67a: 829a strh r2, [r3, #20] + 800d69e: 687b ldr r3, [r7, #4] + 800d6a0: 2204 movs r2, #4 + 800d6a2: 829a strh r2, [r3, #20] static const uint8_t default_syncword[3] = DEFAULT_SYNCWORD; memcpy(cfg->syncword, default_syncword, sizeof(cfg->syncword)); - 800d67c: 687b ldr r3, [r7, #4] - 800d67e: 3316 adds r3, #22 - 800d680: 4a09 ldr r2, [pc, #36] @ (800d6a8 ) - 800d682: 8811 ldrh r1, [r2, #0] - 800d684: 7892 ldrb r2, [r2, #2] - 800d686: 8019 strh r1, [r3, #0] - 800d688: 709a strb r2, [r3, #2] + 800d6a4: 687b ldr r3, [r7, #4] + 800d6a6: 3316 adds r3, #22 + 800d6a8: 4a09 ldr r2, [pc, #36] @ (800d6d0 ) + 800d6aa: 8811 ldrh r1, [r2, #0] + 800d6ac: 7892 ldrb r2, [r2, #2] + 800d6ae: 8019 strh r1, [r3, #0] + 800d6b0: 709a strb r2, [r3, #2] cfg->uart_packet_timeout_ms = DEFAULT_UART_PACKET_TIMEOUT_MS; - 800d68a: 687b ldr r3, [r7, #4] - 800d68c: 2214 movs r2, #20 - 800d68e: 835a strh r2, [r3, #26] + 800d6b2: 687b ldr r3, [r7, #4] + 800d6b4: 2214 movs r2, #20 + 800d6b6: 835a strh r2, [r3, #26] cfg->uart_baudrate = DEFAULT_UART_BAUDRATE; - 800d690: 687b ldr r3, [r7, #4] - 800d692: f44f 32e1 mov.w r2, #115200 @ 0x1c200 - 800d696: 61da str r2, [r3, #28] - 800d698: e000 b.n 800d69c + 800d6b8: 687b ldr r3, [r7, #4] + 800d6ba: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 800d6be: 61da str r2, [r3, #28] + 800d6c0: e000 b.n 800d6c4 return; - 800d69a: bf00 nop - 800d69c: 370c adds r7, #12 - 800d69e: 46bd mov sp, r7 - 800d6a0: bc80 pop {r7} - 800d6a2: 4770 bx lr - 800d6a4: 19d094e0 .word 0x19d094e0 - 800d6a8: 08010504 .word 0x08010504 + 800d6c2: bf00 nop + 800d6c4: 370c adds r7, #12 + 800d6c6: 46bd mov sp, r7 + 800d6c8: bc80 pop {r7} + 800d6ca: 4770 bx lr + 800d6cc: 19d094e0 .word 0x19d094e0 + 800d6d0: 0801052c .word 0x0801052c -0800d6ac : +0800d6d4 : uint32_t checksum; BridgeConfig_t cfg; } FlashConfig_t; static uint32_t Config_CalcChecksum(const uint8_t *data, uint32_t len) { - 800d6ac: b480 push {r7} - 800d6ae: b085 sub sp, #20 - 800d6b0: af00 add r7, sp, #0 - 800d6b2: 6078 str r0, [r7, #4] - 800d6b4: 6039 str r1, [r7, #0] + 800d6d4: b480 push {r7} + 800d6d6: b085 sub sp, #20 + 800d6d8: af00 add r7, sp, #0 + 800d6da: 6078 str r0, [r7, #4] + 800d6dc: 6039 str r1, [r7, #0] uint32_t sum = 0; - 800d6b6: 2300 movs r3, #0 - 800d6b8: 60fb str r3, [r7, #12] + 800d6de: 2300 movs r3, #0 + 800d6e0: 60fb str r3, [r7, #12] uint32_t i; for (i = 0; i < len; i++) - 800d6ba: 2300 movs r3, #0 - 800d6bc: 60bb str r3, [r7, #8] - 800d6be: e00a b.n 800d6d6 + 800d6e2: 2300 movs r3, #0 + 800d6e4: 60bb str r3, [r7, #8] + 800d6e6: e00a b.n 800d6fe { sum += data[i]; - 800d6c0: 687a ldr r2, [r7, #4] - 800d6c2: 68bb ldr r3, [r7, #8] - 800d6c4: 4413 add r3, r2 - 800d6c6: 781b ldrb r3, [r3, #0] - 800d6c8: 461a mov r2, r3 - 800d6ca: 68fb ldr r3, [r7, #12] - 800d6cc: 4413 add r3, r2 - 800d6ce: 60fb str r3, [r7, #12] + 800d6e8: 687a ldr r2, [r7, #4] + 800d6ea: 68bb ldr r3, [r7, #8] + 800d6ec: 4413 add r3, r2 + 800d6ee: 781b ldrb r3, [r3, #0] + 800d6f0: 461a mov r2, r3 + 800d6f2: 68fb ldr r3, [r7, #12] + 800d6f4: 4413 add r3, r2 + 800d6f6: 60fb str r3, [r7, #12] for (i = 0; i < len; i++) - 800d6d0: 68bb ldr r3, [r7, #8] - 800d6d2: 3301 adds r3, #1 - 800d6d4: 60bb str r3, [r7, #8] - 800d6d6: 68ba ldr r2, [r7, #8] - 800d6d8: 683b ldr r3, [r7, #0] - 800d6da: 429a cmp r2, r3 - 800d6dc: d3f0 bcc.n 800d6c0 + 800d6f8: 68bb ldr r3, [r7, #8] + 800d6fa: 3301 adds r3, #1 + 800d6fc: 60bb str r3, [r7, #8] + 800d6fe: 68ba ldr r2, [r7, #8] + 800d700: 683b ldr r3, [r7, #0] + 800d702: 429a cmp r2, r3 + 800d704: d3f0 bcc.n 800d6e8 } return sum; - 800d6de: 68fb ldr r3, [r7, #12] + 800d706: 68fb ldr r3, [r7, #12] } - 800d6e0: 4618 mov r0, r3 - 800d6e2: 3714 adds r7, #20 - 800d6e4: 46bd mov sp, r7 - 800d6e6: bc80 pop {r7} - 800d6e8: 4770 bx lr + 800d708: 4618 mov r0, r3 + 800d70a: 3714 adds r7, #20 + 800d70c: 46bd mov sp, r7 + 800d70e: bc80 pop {r7} + 800d710: 4770 bx lr ... -0800d6ec : +0800d714 : bool Config_Load(BridgeConfig_t *cfg) { - 800d6ec: b580 push {r7, lr} - 800d6ee: b084 sub sp, #16 - 800d6f0: af00 add r7, sp, #0 - 800d6f2: 6078 str r0, [r7, #4] + 800d714: b580 push {r7, lr} + 800d716: b084 sub sp, #16 + 800d718: af00 add r7, sp, #0 + 800d71a: 6078 str r0, [r7, #4] const FlashConfig_t *stored; uint32_t calc; if (cfg == 0) - 800d6f4: 687b ldr r3, [r7, #4] - 800d6f6: 2b00 cmp r3, #0 - 800d6f8: d101 bne.n 800d6fe + 800d71c: 687b ldr r3, [r7, #4] + 800d71e: 2b00 cmp r3, #0 + 800d720: d101 bne.n 800d726 { return false; - 800d6fa: 2300 movs r3, #0 - 800d6fc: e01e b.n 800d73c + 800d722: 2300 movs r3, #0 + 800d724: e01e b.n 800d764 } stored = (const FlashConfig_t *)CONFIG_FLASH_ADDR; - 800d6fe: 4b11 ldr r3, [pc, #68] @ (800d744 ) - 800d700: 60fb str r3, [r7, #12] + 800d726: 4b11 ldr r3, [pc, #68] @ (800d76c ) + 800d728: 60fb str r3, [r7, #12] if (stored->magic != CONFIG_MAGIC) - 800d702: 68fb ldr r3, [r7, #12] - 800d704: 681b ldr r3, [r3, #0] - 800d706: 4a10 ldr r2, [pc, #64] @ (800d748 ) - 800d708: 4293 cmp r3, r2 - 800d70a: d001 beq.n 800d710 + 800d72a: 68fb ldr r3, [r7, #12] + 800d72c: 681b ldr r3, [r3, #0] + 800d72e: 4a10 ldr r2, [pc, #64] @ (800d770 ) + 800d730: 4293 cmp r3, r2 + 800d732: d001 beq.n 800d738 { return false; - 800d70c: 2300 movs r3, #0 - 800d70e: e015 b.n 800d73c + 800d734: 2300 movs r3, #0 + 800d736: e015 b.n 800d764 } calc = Config_CalcChecksum((const uint8_t *)&stored->cfg, sizeof(BridgeConfig_t)); - 800d710: 68fb ldr r3, [r7, #12] - 800d712: 3308 adds r3, #8 - 800d714: 2120 movs r1, #32 - 800d716: 4618 mov r0, r3 - 800d718: f7ff ffc8 bl 800d6ac - 800d71c: 60b8 str r0, [r7, #8] + 800d738: 68fb ldr r3, [r7, #12] + 800d73a: 3308 adds r3, #8 + 800d73c: 2120 movs r1, #32 + 800d73e: 4618 mov r0, r3 + 800d740: f7ff ffc8 bl 800d6d4 + 800d744: 60b8 str r0, [r7, #8] if (calc != stored->checksum) - 800d71e: 68fb ldr r3, [r7, #12] - 800d720: 685b ldr r3, [r3, #4] - 800d722: 68ba ldr r2, [r7, #8] - 800d724: 429a cmp r2, r3 - 800d726: d001 beq.n 800d72c + 800d746: 68fb ldr r3, [r7, #12] + 800d748: 685b ldr r3, [r3, #4] + 800d74a: 68ba ldr r2, [r7, #8] + 800d74c: 429a cmp r2, r3 + 800d74e: d001 beq.n 800d754 { return false; - 800d728: 2300 movs r3, #0 - 800d72a: e007 b.n 800d73c + 800d750: 2300 movs r3, #0 + 800d752: e007 b.n 800d764 } memcpy(cfg, &stored->cfg, sizeof(BridgeConfig_t)); - 800d72c: 68fb ldr r3, [r7, #12] - 800d72e: 3308 adds r3, #8 - 800d730: 2220 movs r2, #32 - 800d732: 4619 mov r1, r3 - 800d734: 6878 ldr r0, [r7, #4] - 800d736: f001 fc4f bl 800efd8 + 800d754: 68fb ldr r3, [r7, #12] + 800d756: 3308 adds r3, #8 + 800d758: 2220 movs r2, #32 + 800d75a: 4619 mov r1, r3 + 800d75c: 6878 ldr r0, [r7, #4] + 800d75e: f001 fc4f bl 800f000 return true; - 800d73a: 2301 movs r3, #1 + 800d762: 2301 movs r3, #1 } - 800d73c: 4618 mov r0, r3 - 800d73e: 3710 adds r7, #16 - 800d740: 46bd mov sp, r7 - 800d742: bd80 pop {r7, pc} - 800d744: 0803f800 .word 0x0803f800 - 800d748: 43464731 .word 0x43464731 + 800d764: 4618 mov r0, r3 + 800d766: 3710 adds r7, #16 + 800d768: 46bd mov sp, r7 + 800d76a: bd80 pop {r7, pc} + 800d76c: 0803f800 .word 0x0803f800 + 800d770: 43464731 .word 0x43464731 -0800d74c : +0800d774 : bool Config_Save(const BridgeConfig_t *cfg) { - 800d74c: b580 push {r7, lr} - 800d74e: b094 sub sp, #80 @ 0x50 - 800d750: af00 add r7, sp, #0 - 800d752: 6078 str r0, [r7, #4] + 800d774: b580 push {r7, lr} + 800d776: b094 sub sp, #80 @ 0x50 + 800d778: af00 add r7, sp, #0 + 800d77a: 6078 str r0, [r7, #4] FlashConfig_t temp; FLASH_EraseInitTypeDef erase; uint32_t page_error = 0; - 800d754: 2300 movs r3, #0 - 800d756: 60bb str r3, [r7, #8] + 800d77c: 2300 movs r3, #0 + 800d77e: 60bb str r3, [r7, #8] uint32_t addr; uint32_t i; const uint64_t *src64; uint32_t words64_count; if (cfg == 0) - 800d758: 687b ldr r3, [r7, #4] - 800d75a: 2b00 cmp r3, #0 - 800d75c: d101 bne.n 800d762 + 800d780: 687b ldr r3, [r7, #4] + 800d782: 2b00 cmp r3, #0 + 800d784: d101 bne.n 800d78a { return false; - 800d75e: 2300 movs r3, #0 - 800d760: e05f b.n 800d822 + 800d786: 2300 movs r3, #0 + 800d788: e05f b.n 800d84a } memset(&temp, 0xFF, sizeof(temp)); - 800d762: f107 0318 add.w r3, r7, #24 - 800d766: 2228 movs r2, #40 @ 0x28 - 800d768: 21ff movs r1, #255 @ 0xff - 800d76a: 4618 mov r0, r3 - 800d76c: f001 fbee bl 800ef4c + 800d78a: f107 0318 add.w r3, r7, #24 + 800d78e: 2228 movs r2, #40 @ 0x28 + 800d790: 21ff movs r1, #255 @ 0xff + 800d792: 4618 mov r0, r3 + 800d794: f001 fbee bl 800ef74 temp.magic = CONFIG_MAGIC; - 800d770: 4b2e ldr r3, [pc, #184] @ (800d82c ) - 800d772: 61bb str r3, [r7, #24] + 800d798: 4b2e ldr r3, [pc, #184] @ (800d854 ) + 800d79a: 61bb str r3, [r7, #24] memcpy(&temp.cfg, cfg, sizeof(BridgeConfig_t)); - 800d774: f107 0318 add.w r3, r7, #24 - 800d778: 3308 adds r3, #8 - 800d77a: 2220 movs r2, #32 - 800d77c: 6879 ldr r1, [r7, #4] - 800d77e: 4618 mov r0, r3 - 800d780: f001 fc2a bl 800efd8 + 800d79c: f107 0318 add.w r3, r7, #24 + 800d7a0: 3308 adds r3, #8 + 800d7a2: 2220 movs r2, #32 + 800d7a4: 6879 ldr r1, [r7, #4] + 800d7a6: 4618 mov r0, r3 + 800d7a8: f001 fc2a bl 800f000 temp.checksum = Config_CalcChecksum((const uint8_t *)&temp.cfg, sizeof(BridgeConfig_t)); - 800d784: f107 0318 add.w r3, r7, #24 - 800d788: 3308 adds r3, #8 - 800d78a: 2120 movs r1, #32 - 800d78c: 4618 mov r0, r3 - 800d78e: f7ff ff8d bl 800d6ac - 800d792: 4603 mov r3, r0 - 800d794: 61fb str r3, [r7, #28] + 800d7ac: f107 0318 add.w r3, r7, #24 + 800d7b0: 3308 adds r3, #8 + 800d7b2: 2120 movs r1, #32 + 800d7b4: 4618 mov r0, r3 + 800d7b6: f7ff ff8d bl 800d6d4 + 800d7ba: 4603 mov r3, r0 + 800d7bc: 61fb str r3, [r7, #28] HAL_FLASH_Unlock(); - 800d796: f7f4 fe91 bl 80024bc + 800d7be: f7f4 fe7d bl 80024bc memset(&erase, 0, sizeof(erase)); - 800d79a: f107 030c add.w r3, r7, #12 - 800d79e: 220c movs r2, #12 - 800d7a0: 2100 movs r1, #0 - 800d7a2: 4618 mov r0, r3 - 800d7a4: f001 fbd2 bl 800ef4c + 800d7c2: f107 030c add.w r3, r7, #12 + 800d7c6: 220c movs r2, #12 + 800d7c8: 2100 movs r1, #0 + 800d7ca: 4618 mov r0, r3 + 800d7cc: f001 fbd2 bl 800ef74 erase.TypeErase = FLASH_TYPEERASE_PAGES; - 800d7a8: 2302 movs r3, #2 - 800d7aa: 60fb str r3, [r7, #12] + 800d7d0: 2302 movs r3, #2 + 800d7d2: 60fb str r3, [r7, #12] erase.Page = (CONFIG_FLASH_ADDR - FLASH_BASE_ADDR) / FLASH_PAGE_SIZE; - 800d7ac: 237f movs r3, #127 @ 0x7f - 800d7ae: 613b str r3, [r7, #16] + 800d7d4: 237f movs r3, #127 @ 0x7f + 800d7d6: 613b str r3, [r7, #16] erase.NbPages = 1; - 800d7b0: 2301 movs r3, #1 - 800d7b2: 617b str r3, [r7, #20] + 800d7d8: 2301 movs r3, #1 + 800d7da: 617b str r3, [r7, #20] if (HAL_FLASHEx_Erase(&erase, &page_error) != HAL_OK) - 800d7b4: f107 0208 add.w r2, r7, #8 - 800d7b8: f107 030c add.w r3, r7, #12 - 800d7bc: 4611 mov r1, r2 - 800d7be: 4618 mov r0, r3 - 800d7c0: f7f4 ff7e bl 80026c0 - 800d7c4: 4603 mov r3, r0 - 800d7c6: 2b00 cmp r3, #0 - 800d7c8: d003 beq.n 800d7d2 + 800d7dc: f107 0208 add.w r2, r7, #8 + 800d7e0: f107 030c add.w r3, r7, #12 + 800d7e4: 4611 mov r1, r2 + 800d7e6: 4618 mov r0, r3 + 800d7e8: f7f4 ff6a bl 80026c0 + 800d7ec: 4603 mov r3, r0 + 800d7ee: 2b00 cmp r3, #0 + 800d7f0: d003 beq.n 800d7fa { HAL_FLASH_Lock(); - 800d7ca: f7f4 fe99 bl 8002500 + 800d7f2: f7f4 fe85 bl 8002500 return false; - 800d7ce: 2300 movs r3, #0 - 800d7d0: e027 b.n 800d822 + 800d7f6: 2300 movs r3, #0 + 800d7f8: e027 b.n 800d84a } addr = CONFIG_FLASH_ADDR; - 800d7d2: 4b17 ldr r3, [pc, #92] @ (800d830 ) - 800d7d4: 64fb str r3, [r7, #76] @ 0x4c + 800d7fa: 4b17 ldr r3, [pc, #92] @ (800d858 ) + 800d7fc: 64fb str r3, [r7, #76] @ 0x4c src64 = (const uint64_t *)&temp; - 800d7d6: f107 0318 add.w r3, r7, #24 - 800d7da: 647b str r3, [r7, #68] @ 0x44 + 800d7fe: f107 0318 add.w r3, r7, #24 + 800d802: 647b str r3, [r7, #68] @ 0x44 words64_count = (sizeof(FlashConfig_t) + 7U) / 8U; - 800d7dc: 2305 movs r3, #5 - 800d7de: 643b str r3, [r7, #64] @ 0x40 + 800d804: 2305 movs r3, #5 + 800d806: 643b str r3, [r7, #64] @ 0x40 for (i = 0; i < words64_count; i++) - 800d7e0: 2300 movs r3, #0 - 800d7e2: 64bb str r3, [r7, #72] @ 0x48 - 800d7e4: e016 b.n 800d814 + 800d808: 2300 movs r3, #0 + 800d80a: 64bb str r3, [r7, #72] @ 0x48 + 800d80c: e016 b.n 800d83c { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr, src64[i]) != HAL_OK) - 800d7e6: 6cbb ldr r3, [r7, #72] @ 0x48 - 800d7e8: 00db lsls r3, r3, #3 - 800d7ea: 6c7a ldr r2, [r7, #68] @ 0x44 - 800d7ec: 4413 add r3, r2 - 800d7ee: e9d3 2300 ldrd r2, r3, [r3] - 800d7f2: 6cf9 ldr r1, [r7, #76] @ 0x4c - 800d7f4: 2001 movs r0, #1 - 800d7f6: f7f4 fe1d bl 8002434 - 800d7fa: 4603 mov r3, r0 - 800d7fc: 2b00 cmp r3, #0 - 800d7fe: d003 beq.n 800d808 + 800d80e: 6cbb ldr r3, [r7, #72] @ 0x48 + 800d810: 00db lsls r3, r3, #3 + 800d812: 6c7a ldr r2, [r7, #68] @ 0x44 + 800d814: 4413 add r3, r2 + 800d816: e9d3 2300 ldrd r2, r3, [r3] + 800d81a: 6cf9 ldr r1, [r7, #76] @ 0x4c + 800d81c: 2001 movs r0, #1 + 800d81e: f7f4 fe09 bl 8002434 + 800d822: 4603 mov r3, r0 + 800d824: 2b00 cmp r3, #0 + 800d826: d003 beq.n 800d830 { HAL_FLASH_Lock(); - 800d800: f7f4 fe7e bl 8002500 + 800d828: f7f4 fe6a bl 8002500 return false; - 800d804: 2300 movs r3, #0 - 800d806: e00c b.n 800d822 + 800d82c: 2300 movs r3, #0 + 800d82e: e00c b.n 800d84a } addr += 8U; - 800d808: 6cfb ldr r3, [r7, #76] @ 0x4c - 800d80a: 3308 adds r3, #8 - 800d80c: 64fb str r3, [r7, #76] @ 0x4c + 800d830: 6cfb ldr r3, [r7, #76] @ 0x4c + 800d832: 3308 adds r3, #8 + 800d834: 64fb str r3, [r7, #76] @ 0x4c for (i = 0; i < words64_count; i++) - 800d80e: 6cbb ldr r3, [r7, #72] @ 0x48 - 800d810: 3301 adds r3, #1 - 800d812: 64bb str r3, [r7, #72] @ 0x48 - 800d814: 6cba ldr r2, [r7, #72] @ 0x48 - 800d816: 6c3b ldr r3, [r7, #64] @ 0x40 - 800d818: 429a cmp r2, r3 - 800d81a: d3e4 bcc.n 800d7e6 + 800d836: 6cbb ldr r3, [r7, #72] @ 0x48 + 800d838: 3301 adds r3, #1 + 800d83a: 64bb str r3, [r7, #72] @ 0x48 + 800d83c: 6cba ldr r2, [r7, #72] @ 0x48 + 800d83e: 6c3b ldr r3, [r7, #64] @ 0x40 + 800d840: 429a cmp r2, r3 + 800d842: d3e4 bcc.n 800d80e } HAL_FLASH_Lock(); - 800d81c: f7f4 fe70 bl 8002500 + 800d844: f7f4 fe5c bl 8002500 return true; - 800d820: 2301 movs r3, #1 + 800d848: 2301 movs r3, #1 } - 800d822: 4618 mov r0, r3 - 800d824: 3750 adds r7, #80 @ 0x50 - 800d826: 46bd mov sp, r7 - 800d828: bd80 pop {r7, pc} - 800d82a: bf00 nop - 800d82c: 43464731 .word 0x43464731 - 800d830: 0803f800 .word 0x0803f800 + 800d84a: 4618 mov r0, r3 + 800d84c: 3750 adds r7, #80 @ 0x50 + 800d84e: 46bd mov sp, r7 + 800d850: bd80 pop {r7, pc} + 800d852: bf00 nop + 800d854: 43464731 .word 0x43464731 + 800d858: 0803f800 .word 0x0803f800 -0800d834 : +0800d85c : /* USER CODE END PFP */ /* Exported functions --------------------------------------------------------*/ int32_t RBI_Init(void) { - 800d834: b580 push {r7, lr} - 800d836: af00 add r7, sp, #0 + 800d85c: b580 push {r7, lr} + 800d85e: af00 add r7, sp, #0 * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_Init(); - 800d838: f7f3 ff8e bl 8001758 - 800d83c: 4603 mov r3, r0 + 800d860: f7f3 ff7a bl 8001758 + 800d864: 4603 mov r3, r0 /* USER CODE BEGIN RBI_Init_2 */ #warning user to provide its board code or to call his board driver functions /* USER CODE END RBI_Init_2 */ return retcode; #endif /* USE_BSP_DRIVER */ } - 800d83e: 4618 mov r0, r3 - 800d840: bd80 pop {r7, pc} + 800d866: 4618 mov r0, r3 + 800d868: bd80 pop {r7, pc} -0800d842 : +0800d86a : return retcode; #endif /* USE_BSP_DRIVER */ } int32_t RBI_ConfigRFSwitch(RBI_Switch_TypeDef Config) { - 800d842: b580 push {r7, lr} - 800d844: b082 sub sp, #8 - 800d846: af00 add r7, sp, #0 - 800d848: 4603 mov r3, r0 - 800d84a: 71fb strb r3, [r7, #7] + 800d86a: b580 push {r7, lr} + 800d86c: b082 sub sp, #8 + 800d86e: af00 add r7, sp, #0 + 800d870: 4603 mov r3, r0 + 800d872: 71fb strb r3, [r7, #7] * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_ConfigRFSwitch((BSP_RADIO_Switch_TypeDef) Config); - 800d84c: 79fb ldrb r3, [r7, #7] - 800d84e: 4618 mov r0, r3 - 800d850: f7f3 ffc0 bl 80017d4 - 800d854: 4603 mov r3, r0 + 800d874: 79fb ldrb r3, [r7, #7] + 800d876: 4618 mov r0, r3 + 800d878: f7f3 ffac bl 80017d4 + 800d87c: 4603 mov r3, r0 /* USER CODE BEGIN RBI_ConfigRFSwitch_2 */ #warning user to provide its board code or to call his board driver functions /* USER CODE END RBI_ConfigRFSwitch_2 */ return retcode; #endif /* USE_BSP_DRIVER */ } - 800d856: 4618 mov r0, r3 - 800d858: 3708 adds r7, #8 - 800d85a: 46bd mov sp, r7 - 800d85c: bd80 pop {r7, pc} + 800d87e: 4618 mov r0, r3 + 800d880: 3708 adds r7, #8 + 800d882: 46bd mov sp, r7 + 800d884: bd80 pop {r7, pc} -0800d85e : +0800d886 : int32_t RBI_GetTxConfig(void) { - 800d85e: b580 push {r7, lr} - 800d860: af00 add r7, sp, #0 + 800d886: b580 push {r7, lr} + 800d888: af00 add r7, sp, #0 * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_GetTxConfig(); - 800d862: f7f4 f813 bl 800188c - 800d866: 4603 mov r3, r0 + 800d88a: f7f3 ffff bl 800188c + 800d88e: 4603 mov r3, r0 /* USER CODE BEGIN RBI_GetTxConfig_2 */ #warning user to provide its board code or to call his board driver functions /* USER CODE END RBI_GetTxConfig_2 */ return retcode; #endif /* USE_BSP_DRIVER */ } - 800d868: 4618 mov r0, r3 - 800d86a: bd80 pop {r7, pc} + 800d890: 4618 mov r0, r3 + 800d892: bd80 pop {r7, pc} -0800d86c : +0800d894 : int32_t RBI_IsTCXO(void) { - 800d86c: b580 push {r7, lr} - 800d86e: af00 add r7, sp, #0 + 800d894: b580 push {r7, lr} + 800d896: af00 add r7, sp, #0 * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_IsTCXO(); - 800d870: f7f4 f813 bl 800189a - 800d874: 4603 mov r3, r0 + 800d898: f7f3 ffff bl 800189a + 800d89c: 4603 mov r3, r0 /* USER CODE BEGIN RBI_IsTCXO_2 */ #warning user to provide its board code or to call his board driver functions /* USER CODE END RBI_IsTCXO_2 */ return retcode; #endif /* USE_BSP_DRIVER */ } - 800d876: 4618 mov r0, r3 - 800d878: bd80 pop {r7, pc} + 800d89e: 4618 mov r0, r3 + 800d8a0: bd80 pop {r7, pc} -0800d87a : +0800d8a2 : int32_t RBI_IsDCDC(void) { - 800d87a: b580 push {r7, lr} - 800d87c: af00 add r7, sp, #0 + 800d8a2: b580 push {r7, lr} + 800d8a4: af00 add r7, sp, #0 * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_IsDCDC(); - 800d87e: f7f4 f813 bl 80018a8 - 800d882: 4603 mov r3, r0 + 800d8a6: f7f3 ffff bl 80018a8 + 800d8aa: 4603 mov r3, r0 /* USER CODE BEGIN RBI_IsDCDC_2 */ #warning user to provide its board code or to call his board driver functions /* USER CODE END RBI_IsDCDC_2 */ return retcode; #endif /* USE_BSP_DRIVER */ } - 800d884: 4618 mov r0, r3 - 800d886: bd80 pop {r7, pc} + 800d8ac: 4618 mov r0, r3 + 800d8ae: bd80 pop {r7, pc} -0800d888 : +0800d8b0 : int32_t RBI_GetRFOMaxPowerConfig(RBI_RFOMaxPowerConfig_TypeDef Config) { - 800d888: b580 push {r7, lr} - 800d88a: b082 sub sp, #8 - 800d88c: af00 add r7, sp, #0 - 800d88e: 4603 mov r3, r0 - 800d890: 71fb strb r3, [r7, #7] + 800d8b0: b580 push {r7, lr} + 800d8b2: b082 sub sp, #8 + 800d8b4: af00 add r7, sp, #0 + 800d8b6: 4603 mov r3, r0 + 800d8b8: 71fb strb r3, [r7, #7] * 1/ For User boards, the BSP/STM32WLxx_Nucleo/ directory can be copied and replaced in the project. The copy must then be updated depending: * on board RF switch configuration (pin control, number of port etc) * on TCXO configuration * on DC/DC configuration * on maximum output power that the board can deliver*/ return BSP_RADIO_GetRFOMaxPowerConfig((BSP_RADIO_RFOMaxPowerConfig_TypeDef) Config); - 800d892: 79fb ldrb r3, [r7, #7] - 800d894: 4618 mov r0, r3 - 800d896: f7f4 f80e bl 80018b6 - 800d89a: 4603 mov r3, r0 + 800d8ba: 79fb ldrb r3, [r7, #7] + 800d8bc: 4618 mov r0, r3 + 800d8be: f7f3 fffa bl 80018b6 + 800d8c2: 4603 mov r3, r0 ret = 22; /*dBm*/ } /* USER CODE END RBI_GetRFOMaxPowerConfig_2 */ return ret; #endif /* USE_BSP_DRIVER */ } - 800d89c: 4618 mov r0, r3 - 800d89e: 3708 adds r7, #8 - 800d8a0: 46bd mov sp, r7 - 800d8a2: bd80 pop {r7, pc} + 800d8c4: 4618 mov r0, r3 + 800d8c6: 3708 adds r7, #8 + 800d8c8: 46bd mov sp, r7 + 800d8ca: bd80 pop {r7, pc} -0800d8a4 : +0800d8cc : /** @addtogroup TINY_LPM_Exported_function * @{ */ void UTIL_LPM_Init( void ) { - 800d8a4: b480 push {r7} - 800d8a6: af00 add r7, sp, #0 + 800d8cc: b480 push {r7} + 800d8ce: af00 add r7, sp, #0 StopModeDisable = UTIL_LPM_NO_BIT_SET; - 800d8a8: 4b04 ldr r3, [pc, #16] @ (800d8bc ) - 800d8aa: 2200 movs r2, #0 - 800d8ac: 601a str r2, [r3, #0] + 800d8d0: 4b04 ldr r3, [pc, #16] @ (800d8e4 ) + 800d8d2: 2200 movs r2, #0 + 800d8d4: 601a str r2, [r3, #0] OffModeDisable = UTIL_LPM_NO_BIT_SET; - 800d8ae: 4b04 ldr r3, [pc, #16] @ (800d8c0 ) - 800d8b0: 2200 movs r2, #0 - 800d8b2: 601a str r2, [r3, #0] + 800d8d6: 4b04 ldr r3, [pc, #16] @ (800d8e8 ) + 800d8d8: 2200 movs r2, #0 + 800d8da: 601a str r2, [r3, #0] UTIL_LPM_INIT_CRITICAL_SECTION( ); } - 800d8b4: bf00 nop - 800d8b6: 46bd mov sp, r7 - 800d8b8: bc80 pop {r7} - 800d8ba: 4770 bx lr - 800d8bc: 20000c0c .word 0x20000c0c - 800d8c0: 20000c10 .word 0x20000c10 + 800d8dc: bf00 nop + 800d8de: 46bd mov sp, r7 + 800d8e0: bc80 pop {r7} + 800d8e2: 4770 bx lr + 800d8e4: 20000c44 .word 0x20000c44 + 800d8e8: 20000c48 .word 0x20000c48 -0800d8c4 : +0800d8ec : void UTIL_LPM_DeInit( void ) { } void UTIL_LPM_SetStopMode( UTIL_LPM_bm_t lpm_id_bm, UTIL_LPM_State_t state ) { - 800d8c4: b480 push {r7} - 800d8c6: b087 sub sp, #28 - 800d8c8: af00 add r7, sp, #0 - 800d8ca: 6078 str r0, [r7, #4] - 800d8cc: 460b mov r3, r1 - 800d8ce: 70fb strb r3, [r7, #3] + 800d8ec: b480 push {r7} + 800d8ee: b087 sub sp, #28 + 800d8f0: af00 add r7, sp, #0 + 800d8f2: 6078 str r0, [r7, #4] + 800d8f4: 460b mov r3, r1 + 800d8f6: 70fb strb r3, [r7, #3] __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800d8d0: f3ef 8310 mrs r3, PRIMASK - 800d8d4: 613b str r3, [r7, #16] + 800d8f8: f3ef 8310 mrs r3, PRIMASK + 800d8fc: 613b str r3, [r7, #16] return(result); - 800d8d6: 693b ldr r3, [r7, #16] + 800d8fe: 693b ldr r3, [r7, #16] UTIL_LPM_ENTER_CRITICAL_SECTION( ); - 800d8d8: 617b str r3, [r7, #20] + 800d900: 617b str r3, [r7, #20] __ASM volatile ("cpsid i" : : : "memory"); - 800d8da: b672 cpsid i + 800d902: b672 cpsid i } - 800d8dc: bf00 nop + 800d904: bf00 nop switch( state ) - 800d8de: 78fb ldrb r3, [r7, #3] - 800d8e0: 2b00 cmp r3, #0 - 800d8e2: d008 beq.n 800d8f6 - 800d8e4: 2b01 cmp r3, #1 - 800d8e6: d10e bne.n 800d906 + 800d906: 78fb ldrb r3, [r7, #3] + 800d908: 2b00 cmp r3, #0 + 800d90a: d008 beq.n 800d91e + 800d90c: 2b01 cmp r3, #1 + 800d90e: d10e bne.n 800d92e { case UTIL_LPM_DISABLE: { StopModeDisable |= lpm_id_bm; - 800d8e8: 4b0d ldr r3, [pc, #52] @ (800d920 ) - 800d8ea: 681a ldr r2, [r3, #0] - 800d8ec: 687b ldr r3, [r7, #4] - 800d8ee: 4313 orrs r3, r2 - 800d8f0: 4a0b ldr r2, [pc, #44] @ (800d920 ) - 800d8f2: 6013 str r3, [r2, #0] + 800d910: 4b0d ldr r3, [pc, #52] @ (800d948 ) + 800d912: 681a ldr r2, [r3, #0] + 800d914: 687b ldr r3, [r7, #4] + 800d916: 4313 orrs r3, r2 + 800d918: 4a0b ldr r2, [pc, #44] @ (800d948 ) + 800d91a: 6013 str r3, [r2, #0] break; - 800d8f4: e008 b.n 800d908 + 800d91c: e008 b.n 800d930 } case UTIL_LPM_ENABLE: { StopModeDisable &= ( ~lpm_id_bm ); - 800d8f6: 687b ldr r3, [r7, #4] - 800d8f8: 43da mvns r2, r3 - 800d8fa: 4b09 ldr r3, [pc, #36] @ (800d920 ) - 800d8fc: 681b ldr r3, [r3, #0] - 800d8fe: 4013 ands r3, r2 - 800d900: 4a07 ldr r2, [pc, #28] @ (800d920 ) - 800d902: 6013 str r3, [r2, #0] + 800d91e: 687b ldr r3, [r7, #4] + 800d920: 43da mvns r2, r3 + 800d922: 4b09 ldr r3, [pc, #36] @ (800d948 ) + 800d924: 681b ldr r3, [r3, #0] + 800d926: 4013 ands r3, r2 + 800d928: 4a07 ldr r2, [pc, #28] @ (800d948 ) + 800d92a: 6013 str r3, [r2, #0] break; - 800d904: e000 b.n 800d908 + 800d92c: e000 b.n 800d930 } default : { break; - 800d906: bf00 nop - 800d908: 697b ldr r3, [r7, #20] - 800d90a: 60fb str r3, [r7, #12] + 800d92e: bf00 nop + 800d930: 697b ldr r3, [r7, #20] + 800d932: 60fb str r3, [r7, #12] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800d90c: 68fb ldr r3, [r7, #12] - 800d90e: f383 8810 msr PRIMASK, r3 + 800d934: 68fb ldr r3, [r7, #12] + 800d936: f383 8810 msr PRIMASK, r3 } - 800d912: bf00 nop + 800d93a: bf00 nop } } UTIL_LPM_EXIT_CRITICAL_SECTION( ); } - 800d914: bf00 nop - 800d916: 371c adds r7, #28 - 800d918: 46bd mov sp, r7 - 800d91a: bc80 pop {r7} - 800d91c: 4770 bx lr - 800d91e: bf00 nop - 800d920: 20000c0c .word 0x20000c0c + 800d93c: bf00 nop + 800d93e: 371c adds r7, #28 + 800d940: 46bd mov sp, r7 + 800d942: bc80 pop {r7} + 800d944: 4770 bx lr + 800d946: bf00 nop + 800d948: 20000c44 .word 0x20000c44 -0800d924 : +0800d94c : void UTIL_LPM_SetOffMode( UTIL_LPM_bm_t lpm_id_bm, UTIL_LPM_State_t state ) { - 800d924: b480 push {r7} - 800d926: b087 sub sp, #28 - 800d928: af00 add r7, sp, #0 - 800d92a: 6078 str r0, [r7, #4] - 800d92c: 460b mov r3, r1 - 800d92e: 70fb strb r3, [r7, #3] + 800d94c: b480 push {r7} + 800d94e: b087 sub sp, #28 + 800d950: af00 add r7, sp, #0 + 800d952: 6078 str r0, [r7, #4] + 800d954: 460b mov r3, r1 + 800d956: 70fb strb r3, [r7, #3] __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800d930: f3ef 8310 mrs r3, PRIMASK - 800d934: 613b str r3, [r7, #16] + 800d958: f3ef 8310 mrs r3, PRIMASK + 800d95c: 613b str r3, [r7, #16] return(result); - 800d936: 693b ldr r3, [r7, #16] + 800d95e: 693b ldr r3, [r7, #16] UTIL_LPM_ENTER_CRITICAL_SECTION( ); - 800d938: 617b str r3, [r7, #20] + 800d960: 617b str r3, [r7, #20] __ASM volatile ("cpsid i" : : : "memory"); - 800d93a: b672 cpsid i + 800d962: b672 cpsid i } - 800d93c: bf00 nop + 800d964: bf00 nop switch(state) - 800d93e: 78fb ldrb r3, [r7, #3] - 800d940: 2b00 cmp r3, #0 - 800d942: d008 beq.n 800d956 - 800d944: 2b01 cmp r3, #1 - 800d946: d10e bne.n 800d966 + 800d966: 78fb ldrb r3, [r7, #3] + 800d968: 2b00 cmp r3, #0 + 800d96a: d008 beq.n 800d97e + 800d96c: 2b01 cmp r3, #1 + 800d96e: d10e bne.n 800d98e { case UTIL_LPM_DISABLE: { OffModeDisable |= lpm_id_bm; - 800d948: 4b0d ldr r3, [pc, #52] @ (800d980 ) - 800d94a: 681a ldr r2, [r3, #0] - 800d94c: 687b ldr r3, [r7, #4] - 800d94e: 4313 orrs r3, r2 - 800d950: 4a0b ldr r2, [pc, #44] @ (800d980 ) - 800d952: 6013 str r3, [r2, #0] + 800d970: 4b0d ldr r3, [pc, #52] @ (800d9a8 ) + 800d972: 681a ldr r2, [r3, #0] + 800d974: 687b ldr r3, [r7, #4] + 800d976: 4313 orrs r3, r2 + 800d978: 4a0b ldr r2, [pc, #44] @ (800d9a8 ) + 800d97a: 6013 str r3, [r2, #0] break; - 800d954: e008 b.n 800d968 + 800d97c: e008 b.n 800d990 } case UTIL_LPM_ENABLE: { OffModeDisable &= ( ~lpm_id_bm ); - 800d956: 687b ldr r3, [r7, #4] - 800d958: 43da mvns r2, r3 - 800d95a: 4b09 ldr r3, [pc, #36] @ (800d980 ) - 800d95c: 681b ldr r3, [r3, #0] - 800d95e: 4013 ands r3, r2 - 800d960: 4a07 ldr r2, [pc, #28] @ (800d980 ) - 800d962: 6013 str r3, [r2, #0] + 800d97e: 687b ldr r3, [r7, #4] + 800d980: 43da mvns r2, r3 + 800d982: 4b09 ldr r3, [pc, #36] @ (800d9a8 ) + 800d984: 681b ldr r3, [r3, #0] + 800d986: 4013 ands r3, r2 + 800d988: 4a07 ldr r2, [pc, #28] @ (800d9a8 ) + 800d98a: 6013 str r3, [r2, #0] break; - 800d964: e000 b.n 800d968 + 800d98c: e000 b.n 800d990 } default : { break; - 800d966: bf00 nop - 800d968: 697b ldr r3, [r7, #20] - 800d96a: 60fb str r3, [r7, #12] + 800d98e: bf00 nop + 800d990: 697b ldr r3, [r7, #20] + 800d992: 60fb str r3, [r7, #12] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800d96c: 68fb ldr r3, [r7, #12] - 800d96e: f383 8810 msr PRIMASK, r3 + 800d994: 68fb ldr r3, [r7, #12] + 800d996: f383 8810 msr PRIMASK, r3 } - 800d972: bf00 nop + 800d99a: bf00 nop } } UTIL_LPM_EXIT_CRITICAL_SECTION( ); } - 800d974: bf00 nop - 800d976: 371c adds r7, #28 - 800d978: 46bd mov sp, r7 - 800d97a: bc80 pop {r7} - 800d97c: 4770 bx lr - 800d97e: bf00 nop - 800d980: 20000c10 .word 0x20000c10 + 800d99c: bf00 nop + 800d99e: 371c adds r7, #28 + 800d9a0: 46bd mov sp, r7 + 800d9a2: bc80 pop {r7} + 800d9a4: 4770 bx lr + 800d9a6: bf00 nop + 800d9a8: 20000c48 .word 0x20000c48 -0800d984 : +0800d9ac : return mode_selected; } void UTIL_LPM_EnterLowPower( void ) { - 800d984: b580 push {r7, lr} - 800d986: b084 sub sp, #16 - 800d988: af00 add r7, sp, #0 + 800d9ac: b580 push {r7, lr} + 800d9ae: b084 sub sp, #16 + 800d9b0: af00 add r7, sp, #0 __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800d98a: f3ef 8310 mrs r3, PRIMASK - 800d98e: 60bb str r3, [r7, #8] + 800d9b2: f3ef 8310 mrs r3, PRIMASK + 800d9b6: 60bb str r3, [r7, #8] return(result); - 800d990: 68bb ldr r3, [r7, #8] + 800d9b8: 68bb ldr r3, [r7, #8] UTIL_LPM_ENTER_CRITICAL_SECTION_ELP( ); - 800d992: 60fb str r3, [r7, #12] + 800d9ba: 60fb str r3, [r7, #12] __ASM volatile ("cpsid i" : : : "memory"); - 800d994: b672 cpsid i + 800d9bc: b672 cpsid i } - 800d996: bf00 nop + 800d9be: bf00 nop if( StopModeDisable != UTIL_LPM_NO_BIT_SET ) - 800d998: 4b12 ldr r3, [pc, #72] @ (800d9e4 ) - 800d99a: 681b ldr r3, [r3, #0] - 800d99c: 2b00 cmp r3, #0 - 800d99e: d006 beq.n 800d9ae + 800d9c0: 4b12 ldr r3, [pc, #72] @ (800da0c ) + 800d9c2: 681b ldr r3, [r3, #0] + 800d9c4: 2b00 cmp r3, #0 + 800d9c6: d006 beq.n 800d9d6 { /** * At least one user disallows Stop Mode * SLEEP mode is required */ UTIL_PowerDriver.EnterSleepMode( ); - 800d9a0: 4b11 ldr r3, [pc, #68] @ (800d9e8 ) - 800d9a2: 681b ldr r3, [r3, #0] - 800d9a4: 4798 blx r3 + 800d9c8: 4b11 ldr r3, [pc, #68] @ (800da10 ) + 800d9ca: 681b ldr r3, [r3, #0] + 800d9cc: 4798 blx r3 UTIL_PowerDriver.ExitSleepMode( ); - 800d9a6: 4b10 ldr r3, [pc, #64] @ (800d9e8 ) - 800d9a8: 685b ldr r3, [r3, #4] - 800d9aa: 4798 blx r3 - 800d9ac: e010 b.n 800d9d0 + 800d9ce: 4b10 ldr r3, [pc, #64] @ (800da10 ) + 800d9d0: 685b ldr r3, [r3, #4] + 800d9d2: 4798 blx r3 + 800d9d4: e010 b.n 800d9f8 } else { if( OffModeDisable != UTIL_LPM_NO_BIT_SET ) - 800d9ae: 4b0f ldr r3, [pc, #60] @ (800d9ec ) - 800d9b0: 681b ldr r3, [r3, #0] - 800d9b2: 2b00 cmp r3, #0 - 800d9b4: d006 beq.n 800d9c4 + 800d9d6: 4b0f ldr r3, [pc, #60] @ (800da14 ) + 800d9d8: 681b ldr r3, [r3, #0] + 800d9da: 2b00 cmp r3, #0 + 800d9dc: d006 beq.n 800d9ec { /** * At least one user disallows Off Mode * STOP mode is required */ UTIL_PowerDriver.EnterStopMode( ); - 800d9b6: 4b0c ldr r3, [pc, #48] @ (800d9e8 ) - 800d9b8: 689b ldr r3, [r3, #8] - 800d9ba: 4798 blx r3 + 800d9de: 4b0c ldr r3, [pc, #48] @ (800da10 ) + 800d9e0: 689b ldr r3, [r3, #8] + 800d9e2: 4798 blx r3 UTIL_PowerDriver.ExitStopMode( ); - 800d9bc: 4b0a ldr r3, [pc, #40] @ (800d9e8 ) - 800d9be: 68db ldr r3, [r3, #12] - 800d9c0: 4798 blx r3 - 800d9c2: e005 b.n 800d9d0 + 800d9e4: 4b0a ldr r3, [pc, #40] @ (800da10 ) + 800d9e6: 68db ldr r3, [r3, #12] + 800d9e8: 4798 blx r3 + 800d9ea: e005 b.n 800d9f8 else { /** * OFF mode is required */ UTIL_PowerDriver.EnterOffMode( ); - 800d9c4: 4b08 ldr r3, [pc, #32] @ (800d9e8 ) - 800d9c6: 691b ldr r3, [r3, #16] - 800d9c8: 4798 blx r3 + 800d9ec: 4b08 ldr r3, [pc, #32] @ (800da10 ) + 800d9ee: 691b ldr r3, [r3, #16] + 800d9f0: 4798 blx r3 UTIL_PowerDriver.ExitOffMode( ); - 800d9ca: 4b07 ldr r3, [pc, #28] @ (800d9e8 ) - 800d9cc: 695b ldr r3, [r3, #20] - 800d9ce: 4798 blx r3 - 800d9d0: 68fb ldr r3, [r7, #12] - 800d9d2: 607b str r3, [r7, #4] + 800d9f2: 4b07 ldr r3, [pc, #28] @ (800da10 ) + 800d9f4: 695b ldr r3, [r3, #20] + 800d9f6: 4798 blx r3 + 800d9f8: 68fb ldr r3, [r7, #12] + 800d9fa: 607b str r3, [r7, #4] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800d9d4: 687b ldr r3, [r7, #4] - 800d9d6: f383 8810 msr PRIMASK, r3 + 800d9fc: 687b ldr r3, [r7, #4] + 800d9fe: f383 8810 msr PRIMASK, r3 } - 800d9da: bf00 nop + 800da02: bf00 nop } } UTIL_LPM_EXIT_CRITICAL_SECTION_ELP( ); } - 800d9dc: bf00 nop - 800d9de: 3710 adds r7, #16 - 800d9e0: 46bd mov sp, r7 - 800d9e2: bd80 pop {r7, pc} - 800d9e4: 20000c0c .word 0x20000c0c - 800d9e8: 08010294 .word 0x08010294 - 800d9ec: 20000c10 .word 0x20000c10 + 800da04: bf00 nop + 800da06: 3710 adds r7, #16 + 800da08: 46bd mov sp, r7 + 800da0a: bd80 pop {r7, pc} + 800da0c: 20000c44 .word 0x20000c44 + 800da10: 080102bc .word 0x080102bc + 800da14: 20000c48 .word 0x20000c48 -0800d9f0 : +0800da18 : /* Global variables ----------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Functions Definition ------------------------------------------------------*/ void UTIL_MEM_cpy_8( void *dst, const void *src, uint16_t size ) { - 800d9f0: b480 push {r7} - 800d9f2: b087 sub sp, #28 - 800d9f4: af00 add r7, sp, #0 - 800d9f6: 60f8 str r0, [r7, #12] - 800d9f8: 60b9 str r1, [r7, #8] - 800d9fa: 4613 mov r3, r2 - 800d9fc: 80fb strh r3, [r7, #6] + 800da18: b480 push {r7} + 800da1a: b087 sub sp, #28 + 800da1c: af00 add r7, sp, #0 + 800da1e: 60f8 str r0, [r7, #12] + 800da20: 60b9 str r1, [r7, #8] + 800da22: 4613 mov r3, r2 + 800da24: 80fb strh r3, [r7, #6] uint8_t* dst8= (uint8_t *) dst; - 800d9fe: 68fb ldr r3, [r7, #12] - 800da00: 617b str r3, [r7, #20] + 800da26: 68fb ldr r3, [r7, #12] + 800da28: 617b str r3, [r7, #20] uint8_t* src8= (uint8_t *) src; - 800da02: 68bb ldr r3, [r7, #8] - 800da04: 613b str r3, [r7, #16] + 800da2a: 68bb ldr r3, [r7, #8] + 800da2c: 613b str r3, [r7, #16] while( size-- ) - 800da06: e007 b.n 800da18 + 800da2e: e007 b.n 800da40 { *dst8++ = *src8++; - 800da08: 693a ldr r2, [r7, #16] - 800da0a: 1c53 adds r3, r2, #1 - 800da0c: 613b str r3, [r7, #16] - 800da0e: 697b ldr r3, [r7, #20] - 800da10: 1c59 adds r1, r3, #1 - 800da12: 6179 str r1, [r7, #20] - 800da14: 7812 ldrb r2, [r2, #0] - 800da16: 701a strb r2, [r3, #0] + 800da30: 693a ldr r2, [r7, #16] + 800da32: 1c53 adds r3, r2, #1 + 800da34: 613b str r3, [r7, #16] + 800da36: 697b ldr r3, [r7, #20] + 800da38: 1c59 adds r1, r3, #1 + 800da3a: 6179 str r1, [r7, #20] + 800da3c: 7812 ldrb r2, [r2, #0] + 800da3e: 701a strb r2, [r3, #0] while( size-- ) - 800da18: 88fb ldrh r3, [r7, #6] - 800da1a: 1e5a subs r2, r3, #1 - 800da1c: 80fa strh r2, [r7, #6] - 800da1e: 2b00 cmp r3, #0 - 800da20: d1f2 bne.n 800da08 + 800da40: 88fb ldrh r3, [r7, #6] + 800da42: 1e5a subs r2, r3, #1 + 800da44: 80fa strh r2, [r7, #6] + 800da46: 2b00 cmp r3, #0 + 800da48: d1f2 bne.n 800da30 } } - 800da22: bf00 nop - 800da24: bf00 nop - 800da26: 371c adds r7, #28 - 800da28: 46bd mov sp, r7 - 800da2a: bc80 pop {r7} - 800da2c: 4770 bx lr + 800da4a: bf00 nop + 800da4c: bf00 nop + 800da4e: 371c adds r7, #28 + 800da50: 46bd mov sp, r7 + 800da52: bc80 pop {r7} + 800da54: 4770 bx lr -0800da2e : +0800da56 : *dst8-- = *src8++; } } void UTIL_MEM_set_8( void *dst, uint8_t value, uint16_t size ) { - 800da2e: b480 push {r7} - 800da30: b085 sub sp, #20 - 800da32: af00 add r7, sp, #0 - 800da34: 6078 str r0, [r7, #4] - 800da36: 460b mov r3, r1 - 800da38: 70fb strb r3, [r7, #3] - 800da3a: 4613 mov r3, r2 - 800da3c: 803b strh r3, [r7, #0] + 800da56: b480 push {r7} + 800da58: b085 sub sp, #20 + 800da5a: af00 add r7, sp, #0 + 800da5c: 6078 str r0, [r7, #4] + 800da5e: 460b mov r3, r1 + 800da60: 70fb strb r3, [r7, #3] + 800da62: 4613 mov r3, r2 + 800da64: 803b strh r3, [r7, #0] uint8_t* dst8= (uint8_t *) dst; - 800da3e: 687b ldr r3, [r7, #4] - 800da40: 60fb str r3, [r7, #12] + 800da66: 687b ldr r3, [r7, #4] + 800da68: 60fb str r3, [r7, #12] while( size-- ) - 800da42: e004 b.n 800da4e + 800da6a: e004 b.n 800da76 { *dst8++ = value; - 800da44: 68fb ldr r3, [r7, #12] - 800da46: 1c5a adds r2, r3, #1 - 800da48: 60fa str r2, [r7, #12] - 800da4a: 78fa ldrb r2, [r7, #3] - 800da4c: 701a strb r2, [r3, #0] + 800da6c: 68fb ldr r3, [r7, #12] + 800da6e: 1c5a adds r2, r3, #1 + 800da70: 60fa str r2, [r7, #12] + 800da72: 78fa ldrb r2, [r7, #3] + 800da74: 701a strb r2, [r3, #0] while( size-- ) - 800da4e: 883b ldrh r3, [r7, #0] - 800da50: 1e5a subs r2, r3, #1 - 800da52: 803a strh r2, [r7, #0] - 800da54: 2b00 cmp r3, #0 - 800da56: d1f5 bne.n 800da44 + 800da76: 883b ldrh r3, [r7, #0] + 800da78: 1e5a subs r2, r3, #1 + 800da7a: 803a strh r2, [r7, #0] + 800da7c: 2b00 cmp r3, #0 + 800da7e: d1f5 bne.n 800da6c } } - 800da58: bf00 nop - 800da5a: bf00 nop - 800da5c: 3714 adds r7, #20 - 800da5e: 46bd mov sp, r7 - 800da60: bc80 pop {r7} - 800da62: 4770 bx lr + 800da80: bf00 nop + 800da82: bf00 nop + 800da84: 3714 adds r7, #20 + 800da86: 46bd mov sp, r7 + 800da88: bc80 pop {r7} + 800da8a: 4770 bx lr -0800da64 : +0800da8c : * @addtogroup SYSTIME_exported_function * @{ */ SysTime_t SysTimeAdd( SysTime_t a, SysTime_t b ) { - 800da64: b082 sub sp, #8 - 800da66: b480 push {r7} - 800da68: b087 sub sp, #28 - 800da6a: af00 add r7, sp, #0 - 800da6c: 60f8 str r0, [r7, #12] - 800da6e: 1d38 adds r0, r7, #4 - 800da70: e880 0006 stmia.w r0, {r1, r2} - 800da74: 627b str r3, [r7, #36] @ 0x24 + 800da8c: b082 sub sp, #8 + 800da8e: b480 push {r7} + 800da90: b087 sub sp, #28 + 800da92: af00 add r7, sp, #0 + 800da94: 60f8 str r0, [r7, #12] + 800da96: 1d38 adds r0, r7, #4 + 800da98: e880 0006 stmia.w r0, {r1, r2} + 800da9c: 627b str r3, [r7, #36] @ 0x24 SysTime_t c = { .Seconds = 0, .SubSeconds = 0 }; - 800da76: 2300 movs r3, #0 - 800da78: 613b str r3, [r7, #16] - 800da7a: 2300 movs r3, #0 - 800da7c: 82bb strh r3, [r7, #20] + 800da9e: 2300 movs r3, #0 + 800daa0: 613b str r3, [r7, #16] + 800daa2: 2300 movs r3, #0 + 800daa4: 82bb strh r3, [r7, #20] c.Seconds = a.Seconds + b.Seconds; - 800da7e: 687a ldr r2, [r7, #4] - 800da80: 6a7b ldr r3, [r7, #36] @ 0x24 - 800da82: 4413 add r3, r2 - 800da84: 613b str r3, [r7, #16] + 800daa6: 687a ldr r2, [r7, #4] + 800daa8: 6a7b ldr r3, [r7, #36] @ 0x24 + 800daaa: 4413 add r3, r2 + 800daac: 613b str r3, [r7, #16] c.SubSeconds = a.SubSeconds + b.SubSeconds; - 800da86: f9b7 3008 ldrsh.w r3, [r7, #8] - 800da8a: b29a uxth r2, r3 - 800da8c: f9b7 3028 ldrsh.w r3, [r7, #40] @ 0x28 - 800da90: b29b uxth r3, r3 - 800da92: 4413 add r3, r2 - 800da94: b29b uxth r3, r3 - 800da96: b21b sxth r3, r3 - 800da98: 82bb strh r3, [r7, #20] + 800daae: f9b7 3008 ldrsh.w r3, [r7, #8] + 800dab2: b29a uxth r2, r3 + 800dab4: f9b7 3028 ldrsh.w r3, [r7, #40] @ 0x28 + 800dab8: b29b uxth r3, r3 + 800daba: 4413 add r3, r2 + 800dabc: b29b uxth r3, r3 + 800dabe: b21b sxth r3, r3 + 800dac0: 82bb strh r3, [r7, #20] if( c.SubSeconds >= 1000 ) - 800da9a: f9b7 3014 ldrsh.w r3, [r7, #20] - 800da9e: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800daa2: db0a blt.n 800daba + 800dac2: f9b7 3014 ldrsh.w r3, [r7, #20] + 800dac6: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800daca: db0a blt.n 800dae2 { c.Seconds++; - 800daa4: 693b ldr r3, [r7, #16] - 800daa6: 3301 adds r3, #1 - 800daa8: 613b str r3, [r7, #16] + 800dacc: 693b ldr r3, [r7, #16] + 800dace: 3301 adds r3, #1 + 800dad0: 613b str r3, [r7, #16] c.SubSeconds -= 1000; - 800daaa: f9b7 3014 ldrsh.w r3, [r7, #20] - 800daae: b29b uxth r3, r3 - 800dab0: f5a3 737a sub.w r3, r3, #1000 @ 0x3e8 - 800dab4: b29b uxth r3, r3 - 800dab6: b21b sxth r3, r3 - 800dab8: 82bb strh r3, [r7, #20] + 800dad2: f9b7 3014 ldrsh.w r3, [r7, #20] + 800dad6: b29b uxth r3, r3 + 800dad8: f5a3 737a sub.w r3, r3, #1000 @ 0x3e8 + 800dadc: b29b uxth r3, r3 + 800dade: b21b sxth r3, r3 + 800dae0: 82bb strh r3, [r7, #20] } return c; - 800daba: 68fb ldr r3, [r7, #12] - 800dabc: 461a mov r2, r3 - 800dabe: f107 0310 add.w r3, r7, #16 - 800dac2: e893 0003 ldmia.w r3, {r0, r1} - 800dac6: e882 0003 stmia.w r2, {r0, r1} + 800dae2: 68fb ldr r3, [r7, #12] + 800dae4: 461a mov r2, r3 + 800dae6: f107 0310 add.w r3, r7, #16 + 800daea: e893 0003 ldmia.w r3, {r0, r1} + 800daee: e882 0003 stmia.w r2, {r0, r1} } - 800daca: 68f8 ldr r0, [r7, #12] - 800dacc: 371c adds r7, #28 - 800dace: 46bd mov sp, r7 - 800dad0: bc80 pop {r7} - 800dad2: b002 add sp, #8 - 800dad4: 4770 bx lr + 800daf2: 68f8 ldr r0, [r7, #12] + 800daf4: 371c adds r7, #28 + 800daf6: 46bd mov sp, r7 + 800daf8: bc80 pop {r7} + 800dafa: b002 add sp, #8 + 800dafc: 4770 bx lr ... -0800dad8 : +0800db00 : UTIL_SYSTIMDriver.BKUPWrite_Seconds( DeltaTime.Seconds ); UTIL_SYSTIMDriver.BKUPWrite_SubSeconds( ( uint32_t ) DeltaTime.SubSeconds ); } SysTime_t SysTimeGet( void ) { - 800dad8: b580 push {r7, lr} - 800dada: b08a sub sp, #40 @ 0x28 - 800dadc: af02 add r7, sp, #8 - 800dade: 6078 str r0, [r7, #4] + 800db00: b580 push {r7, lr} + 800db02: b08a sub sp, #40 @ 0x28 + 800db04: af02 add r7, sp, #8 + 800db06: 6078 str r0, [r7, #4] SysTime_t calendarTime = { .Seconds = 0, .SubSeconds = 0 }; - 800dae0: 2300 movs r3, #0 - 800dae2: 61bb str r3, [r7, #24] - 800dae4: 2300 movs r3, #0 - 800dae6: 83bb strh r3, [r7, #28] + 800db08: 2300 movs r3, #0 + 800db0a: 61bb str r3, [r7, #24] + 800db0c: 2300 movs r3, #0 + 800db0e: 83bb strh r3, [r7, #28] SysTime_t sysTime = { .Seconds = 0, .SubSeconds = 0 }; - 800dae8: 2300 movs r3, #0 - 800daea: 613b str r3, [r7, #16] - 800daec: 2300 movs r3, #0 - 800daee: 82bb strh r3, [r7, #20] + 800db10: 2300 movs r3, #0 + 800db12: 613b str r3, [r7, #16] + 800db14: 2300 movs r3, #0 + 800db16: 82bb strh r3, [r7, #20] SysTime_t DeltaTime; calendarTime.Seconds = UTIL_SYSTIMDriver.GetCalendarTime( ( uint16_t* )&calendarTime.SubSeconds ); - 800daf0: 4b14 ldr r3, [pc, #80] @ (800db44 ) - 800daf2: 691b ldr r3, [r3, #16] - 800daf4: f107 0218 add.w r2, r7, #24 - 800daf8: 3204 adds r2, #4 - 800dafa: 4610 mov r0, r2 - 800dafc: 4798 blx r3 - 800dafe: 4603 mov r3, r0 - 800db00: 61bb str r3, [r7, #24] + 800db18: 4b14 ldr r3, [pc, #80] @ (800db6c ) + 800db1a: 691b ldr r3, [r3, #16] + 800db1c: f107 0218 add.w r2, r7, #24 + 800db20: 3204 adds r2, #4 + 800db22: 4610 mov r0, r2 + 800db24: 4798 blx r3 + 800db26: 4603 mov r3, r0 + 800db28: 61bb str r3, [r7, #24] DeltaTime.SubSeconds = (int16_t)UTIL_SYSTIMDriver.BKUPRead_SubSeconds(); - 800db02: 4b10 ldr r3, [pc, #64] @ (800db44 ) - 800db04: 68db ldr r3, [r3, #12] - 800db06: 4798 blx r3 - 800db08: 4603 mov r3, r0 - 800db0a: b21b sxth r3, r3 - 800db0c: 81bb strh r3, [r7, #12] + 800db2a: 4b10 ldr r3, [pc, #64] @ (800db6c ) + 800db2c: 68db ldr r3, [r3, #12] + 800db2e: 4798 blx r3 + 800db30: 4603 mov r3, r0 + 800db32: b21b sxth r3, r3 + 800db34: 81bb strh r3, [r7, #12] DeltaTime.Seconds = UTIL_SYSTIMDriver.BKUPRead_Seconds(); - 800db0e: 4b0d ldr r3, [pc, #52] @ (800db44 ) - 800db10: 685b ldr r3, [r3, #4] - 800db12: 4798 blx r3 - 800db14: 4603 mov r3, r0 - 800db16: 60bb str r3, [r7, #8] + 800db36: 4b0d ldr r3, [pc, #52] @ (800db6c ) + 800db38: 685b ldr r3, [r3, #4] + 800db3a: 4798 blx r3 + 800db3c: 4603 mov r3, r0 + 800db3e: 60bb str r3, [r7, #8] sysTime = SysTimeAdd( DeltaTime, calendarTime ); - 800db18: f107 0010 add.w r0, r7, #16 - 800db1c: 69fb ldr r3, [r7, #28] - 800db1e: 9300 str r3, [sp, #0] - 800db20: 69bb ldr r3, [r7, #24] - 800db22: f107 0208 add.w r2, r7, #8 - 800db26: ca06 ldmia r2, {r1, r2} - 800db28: f7ff ff9c bl 800da64 + 800db40: f107 0010 add.w r0, r7, #16 + 800db44: 69fb ldr r3, [r7, #28] + 800db46: 9300 str r3, [sp, #0] + 800db48: 69bb ldr r3, [r7, #24] + 800db4a: f107 0208 add.w r2, r7, #8 + 800db4e: ca06 ldmia r2, {r1, r2} + 800db50: f7ff ff9c bl 800da8c return sysTime; - 800db2c: 687b ldr r3, [r7, #4] - 800db2e: 461a mov r2, r3 - 800db30: f107 0310 add.w r3, r7, #16 - 800db34: e893 0003 ldmia.w r3, {r0, r1} - 800db38: e882 0003 stmia.w r2, {r0, r1} + 800db54: 687b ldr r3, [r7, #4] + 800db56: 461a mov r2, r3 + 800db58: f107 0310 add.w r3, r7, #16 + 800db5c: e893 0003 ldmia.w r3, {r0, r1} + 800db60: e882 0003 stmia.w r2, {r0, r1} } - 800db3c: 6878 ldr r0, [r7, #4] - 800db3e: 3720 adds r7, #32 - 800db40: 46bd mov sp, r7 - 800db42: bd80 pop {r7, pc} - 800db44: 08010378 .word 0x08010378 + 800db64: 6878 ldr r0, [r7, #4] + 800db66: 3720 adds r7, #32 + 800db68: 46bd mov sp, r7 + 800db6a: bd80 pop {r7, pc} + 800db6c: 080103a0 .word 0x080103a0 -0800db48 : +0800db70 : return sc - s; } #endif static int ee_skip_atoi(const char **s) { - 800db48: b480 push {r7} - 800db4a: b085 sub sp, #20 - 800db4c: af00 add r7, sp, #0 - 800db4e: 6078 str r0, [r7, #4] + 800db70: b480 push {r7} + 800db72: b085 sub sp, #20 + 800db74: af00 add r7, sp, #0 + 800db76: 6078 str r0, [r7, #4] int i = 0; - 800db50: 2300 movs r3, #0 - 800db52: 60fb str r3, [r7, #12] + 800db78: 2300 movs r3, #0 + 800db7a: 60fb str r3, [r7, #12] while (is_digit(**s)) i = i*10 + *((*s)++) - '0'; - 800db54: e00e b.n 800db74 - 800db56: 68fa ldr r2, [r7, #12] - 800db58: 4613 mov r3, r2 - 800db5a: 009b lsls r3, r3, #2 - 800db5c: 4413 add r3, r2 - 800db5e: 005b lsls r3, r3, #1 - 800db60: 4618 mov r0, r3 - 800db62: 687b ldr r3, [r7, #4] - 800db64: 681b ldr r3, [r3, #0] - 800db66: 1c59 adds r1, r3, #1 - 800db68: 687a ldr r2, [r7, #4] - 800db6a: 6011 str r1, [r2, #0] - 800db6c: 781b ldrb r3, [r3, #0] - 800db6e: 4403 add r3, r0 - 800db70: 3b30 subs r3, #48 @ 0x30 - 800db72: 60fb str r3, [r7, #12] - 800db74: 687b ldr r3, [r7, #4] - 800db76: 681b ldr r3, [r3, #0] - 800db78: 781b ldrb r3, [r3, #0] - 800db7a: 2b2f cmp r3, #47 @ 0x2f - 800db7c: d904 bls.n 800db88 - 800db7e: 687b ldr r3, [r7, #4] - 800db80: 681b ldr r3, [r3, #0] - 800db82: 781b ldrb r3, [r3, #0] - 800db84: 2b39 cmp r3, #57 @ 0x39 - 800db86: d9e6 bls.n 800db56 + 800db7c: e00e b.n 800db9c + 800db7e: 68fa ldr r2, [r7, #12] + 800db80: 4613 mov r3, r2 + 800db82: 009b lsls r3, r3, #2 + 800db84: 4413 add r3, r2 + 800db86: 005b lsls r3, r3, #1 + 800db88: 4618 mov r0, r3 + 800db8a: 687b ldr r3, [r7, #4] + 800db8c: 681b ldr r3, [r3, #0] + 800db8e: 1c59 adds r1, r3, #1 + 800db90: 687a ldr r2, [r7, #4] + 800db92: 6011 str r1, [r2, #0] + 800db94: 781b ldrb r3, [r3, #0] + 800db96: 4403 add r3, r0 + 800db98: 3b30 subs r3, #48 @ 0x30 + 800db9a: 60fb str r3, [r7, #12] + 800db9c: 687b ldr r3, [r7, #4] + 800db9e: 681b ldr r3, [r3, #0] + 800dba0: 781b ldrb r3, [r3, #0] + 800dba2: 2b2f cmp r3, #47 @ 0x2f + 800dba4: d904 bls.n 800dbb0 + 800dba6: 687b ldr r3, [r7, #4] + 800dba8: 681b ldr r3, [r3, #0] + 800dbaa: 781b ldrb r3, [r3, #0] + 800dbac: 2b39 cmp r3, #57 @ 0x39 + 800dbae: d9e6 bls.n 800db7e return i; - 800db88: 68fb ldr r3, [r7, #12] + 800dbb0: 68fb ldr r3, [r7, #12] } - 800db8a: 4618 mov r0, r3 - 800db8c: 3714 adds r7, #20 - 800db8e: 46bd mov sp, r7 - 800db90: bc80 pop {r7} - 800db92: 4770 bx lr + 800dbb2: 4618 mov r0, r3 + 800dbb4: 3714 adds r7, #20 + 800dbb6: 46bd mov sp, r7 + 800dbb8: bc80 pop {r7} + 800dbba: 4770 bx lr -0800db94 : +0800dbbc : #define ASSIGN_STR(_c) do { *str++ = (_c); max_size--; if (max_size == 0) return str; } while (0) static char *ee_number(char *str, int max_size, long num, int base, int size, int precision, int type) { - 800db94: b480 push {r7} - 800db96: b099 sub sp, #100 @ 0x64 - 800db98: af00 add r7, sp, #0 - 800db9a: 60f8 str r0, [r7, #12] - 800db9c: 60b9 str r1, [r7, #8] - 800db9e: 607a str r2, [r7, #4] - 800dba0: 603b str r3, [r7, #0] + 800dbbc: b480 push {r7} + 800dbbe: b099 sub sp, #100 @ 0x64 + 800dbc0: af00 add r7, sp, #0 + 800dbc2: 60f8 str r0, [r7, #12] + 800dbc4: 60b9 str r1, [r7, #8] + 800dbc6: 607a str r2, [r7, #4] + 800dbc8: 603b str r3, [r7, #0] char c; char sign, tmp[66]; char *dig = lower_digits; - 800dba2: 4b71 ldr r3, [pc, #452] @ (800dd68 ) - 800dba4: 681b ldr r3, [r3, #0] - 800dba6: 65bb str r3, [r7, #88] @ 0x58 + 800dbca: 4b71 ldr r3, [pc, #452] @ (800dd90 ) + 800dbcc: 681b ldr r3, [r3, #0] + 800dbce: 65bb str r3, [r7, #88] @ 0x58 int i; if (type & UPPERCASE) dig = upper_digits; - 800dba8: 6f3b ldr r3, [r7, #112] @ 0x70 - 800dbaa: f003 0340 and.w r3, r3, #64 @ 0x40 - 800dbae: 2b00 cmp r3, #0 - 800dbb0: d002 beq.n 800dbb8 - 800dbb2: 4b6e ldr r3, [pc, #440] @ (800dd6c ) - 800dbb4: 681b ldr r3, [r3, #0] - 800dbb6: 65bb str r3, [r7, #88] @ 0x58 + 800dbd0: 6f3b ldr r3, [r7, #112] @ 0x70 + 800dbd2: f003 0340 and.w r3, r3, #64 @ 0x40 + 800dbd6: 2b00 cmp r3, #0 + 800dbd8: d002 beq.n 800dbe0 + 800dbda: 4b6e ldr r3, [pc, #440] @ (800dd94 ) + 800dbdc: 681b ldr r3, [r3, #0] + 800dbde: 65bb str r3, [r7, #88] @ 0x58 #ifdef TINY_PRINTF #else if (type & LEFT) type &= ~ZEROPAD; #endif if (base < 2 || base > 36) return 0; - 800dbb8: 683b ldr r3, [r7, #0] - 800dbba: 2b01 cmp r3, #1 - 800dbbc: dd02 ble.n 800dbc4 - 800dbbe: 683b ldr r3, [r7, #0] - 800dbc0: 2b24 cmp r3, #36 @ 0x24 - 800dbc2: dd01 ble.n 800dbc8 - 800dbc4: 2300 movs r3, #0 - 800dbc6: e0ca b.n 800dd5e + 800dbe0: 683b ldr r3, [r7, #0] + 800dbe2: 2b01 cmp r3, #1 + 800dbe4: dd02 ble.n 800dbec + 800dbe6: 683b ldr r3, [r7, #0] + 800dbe8: 2b24 cmp r3, #36 @ 0x24 + 800dbea: dd01 ble.n 800dbf0 + 800dbec: 2300 movs r3, #0 + 800dbee: e0ca b.n 800dd86 c = (type & ZEROPAD) ? '0' : ' '; - 800dbc8: 6f3b ldr r3, [r7, #112] @ 0x70 - 800dbca: f003 0301 and.w r3, r3, #1 - 800dbce: 2b00 cmp r3, #0 - 800dbd0: d001 beq.n 800dbd6 - 800dbd2: 2330 movs r3, #48 @ 0x30 - 800dbd4: e000 b.n 800dbd8 - 800dbd6: 2320 movs r3, #32 - 800dbd8: f887 3053 strb.w r3, [r7, #83] @ 0x53 + 800dbf0: 6f3b ldr r3, [r7, #112] @ 0x70 + 800dbf2: f003 0301 and.w r3, r3, #1 + 800dbf6: 2b00 cmp r3, #0 + 800dbf8: d001 beq.n 800dbfe + 800dbfa: 2330 movs r3, #48 @ 0x30 + 800dbfc: e000 b.n 800dc00 + 800dbfe: 2320 movs r3, #32 + 800dc00: f887 3053 strb.w r3, [r7, #83] @ 0x53 sign = 0; - 800dbdc: 2300 movs r3, #0 - 800dbde: f887 305f strb.w r3, [r7, #95] @ 0x5f + 800dc04: 2300 movs r3, #0 + 800dc06: f887 305f strb.w r3, [r7, #95] @ 0x5f if (type & SIGN) - 800dbe2: 6f3b ldr r3, [r7, #112] @ 0x70 - 800dbe4: f003 0302 and.w r3, r3, #2 - 800dbe8: 2b00 cmp r3, #0 - 800dbea: d00b beq.n 800dc04 + 800dc0a: 6f3b ldr r3, [r7, #112] @ 0x70 + 800dc0c: f003 0302 and.w r3, r3, #2 + 800dc10: 2b00 cmp r3, #0 + 800dc12: d00b beq.n 800dc2c { if (num < 0) - 800dbec: 687b ldr r3, [r7, #4] - 800dbee: 2b00 cmp r3, #0 - 800dbf0: da08 bge.n 800dc04 + 800dc14: 687b ldr r3, [r7, #4] + 800dc16: 2b00 cmp r3, #0 + 800dc18: da08 bge.n 800dc2c { sign = '-'; - 800dbf2: 232d movs r3, #45 @ 0x2d - 800dbf4: f887 305f strb.w r3, [r7, #95] @ 0x5f + 800dc1a: 232d movs r3, #45 @ 0x2d + 800dc1c: f887 305f strb.w r3, [r7, #95] @ 0x5f num = -num; - 800dbf8: 687b ldr r3, [r7, #4] - 800dbfa: 425b negs r3, r3 - 800dbfc: 607b str r3, [r7, #4] + 800dc20: 687b ldr r3, [r7, #4] + 800dc22: 425b negs r3, r3 + 800dc24: 607b str r3, [r7, #4] size--; - 800dbfe: 6ebb ldr r3, [r7, #104] @ 0x68 - 800dc00: 3b01 subs r3, #1 - 800dc02: 66bb str r3, [r7, #104] @ 0x68 + 800dc26: 6ebb ldr r3, [r7, #104] @ 0x68 + 800dc28: 3b01 subs r3, #1 + 800dc2a: 66bb str r3, [r7, #104] @ 0x68 else if (base == 8) size--; } #endif i = 0; - 800dc04: 2300 movs r3, #0 - 800dc06: 657b str r3, [r7, #84] @ 0x54 + 800dc2c: 2300 movs r3, #0 + 800dc2e: 657b str r3, [r7, #84] @ 0x54 if (num == 0) - 800dc08: 687b ldr r3, [r7, #4] - 800dc0a: 2b00 cmp r3, #0 - 800dc0c: d11e bne.n 800dc4c + 800dc30: 687b ldr r3, [r7, #4] + 800dc32: 2b00 cmp r3, #0 + 800dc34: d11e bne.n 800dc74 tmp[i++] = '0'; - 800dc0e: 6d7b ldr r3, [r7, #84] @ 0x54 - 800dc10: 1c5a adds r2, r3, #1 - 800dc12: 657a str r2, [r7, #84] @ 0x54 - 800dc14: 3360 adds r3, #96 @ 0x60 - 800dc16: 443b add r3, r7 - 800dc18: 2230 movs r2, #48 @ 0x30 - 800dc1a: f803 2c50 strb.w r2, [r3, #-80] - 800dc1e: e018 b.n 800dc52 + 800dc36: 6d7b ldr r3, [r7, #84] @ 0x54 + 800dc38: 1c5a adds r2, r3, #1 + 800dc3a: 657a str r2, [r7, #84] @ 0x54 + 800dc3c: 3360 adds r3, #96 @ 0x60 + 800dc3e: 443b add r3, r7 + 800dc40: 2230 movs r2, #48 @ 0x30 + 800dc42: f803 2c50 strb.w r2, [r3, #-80] + 800dc46: e018 b.n 800dc7a else { while (num != 0) { tmp[i++] = dig[((unsigned long) num) % (unsigned) base]; - 800dc20: 687b ldr r3, [r7, #4] - 800dc22: 683a ldr r2, [r7, #0] - 800dc24: fbb3 f1f2 udiv r1, r3, r2 - 800dc28: fb01 f202 mul.w r2, r1, r2 - 800dc2c: 1a9b subs r3, r3, r2 - 800dc2e: 6dba ldr r2, [r7, #88] @ 0x58 - 800dc30: 441a add r2, r3 - 800dc32: 6d7b ldr r3, [r7, #84] @ 0x54 - 800dc34: 1c59 adds r1, r3, #1 - 800dc36: 6579 str r1, [r7, #84] @ 0x54 - 800dc38: 7812 ldrb r2, [r2, #0] - 800dc3a: 3360 adds r3, #96 @ 0x60 - 800dc3c: 443b add r3, r7 - 800dc3e: f803 2c50 strb.w r2, [r3, #-80] + 800dc48: 687b ldr r3, [r7, #4] + 800dc4a: 683a ldr r2, [r7, #0] + 800dc4c: fbb3 f1f2 udiv r1, r3, r2 + 800dc50: fb01 f202 mul.w r2, r1, r2 + 800dc54: 1a9b subs r3, r3, r2 + 800dc56: 6dba ldr r2, [r7, #88] @ 0x58 + 800dc58: 441a add r2, r3 + 800dc5a: 6d7b ldr r3, [r7, #84] @ 0x54 + 800dc5c: 1c59 adds r1, r3, #1 + 800dc5e: 6579 str r1, [r7, #84] @ 0x54 + 800dc60: 7812 ldrb r2, [r2, #0] + 800dc62: 3360 adds r3, #96 @ 0x60 + 800dc64: 443b add r3, r7 + 800dc66: f803 2c50 strb.w r2, [r3, #-80] num = ((unsigned long) num) / (unsigned) base; - 800dc42: 687a ldr r2, [r7, #4] - 800dc44: 683b ldr r3, [r7, #0] - 800dc46: fbb2 f3f3 udiv r3, r2, r3 - 800dc4a: 607b str r3, [r7, #4] + 800dc6a: 687a ldr r2, [r7, #4] + 800dc6c: 683b ldr r3, [r7, #0] + 800dc6e: fbb2 f3f3 udiv r3, r2, r3 + 800dc72: 607b str r3, [r7, #4] while (num != 0) - 800dc4c: 687b ldr r3, [r7, #4] - 800dc4e: 2b00 cmp r3, #0 - 800dc50: d1e6 bne.n 800dc20 + 800dc74: 687b ldr r3, [r7, #4] + 800dc76: 2b00 cmp r3, #0 + 800dc78: d1e6 bne.n 800dc48 } } if (i > precision) precision = i; - 800dc52: 6d7a ldr r2, [r7, #84] @ 0x54 - 800dc54: 6efb ldr r3, [r7, #108] @ 0x6c - 800dc56: 429a cmp r2, r3 - 800dc58: dd01 ble.n 800dc5e - 800dc5a: 6d7b ldr r3, [r7, #84] @ 0x54 - 800dc5c: 66fb str r3, [r7, #108] @ 0x6c + 800dc7a: 6d7a ldr r2, [r7, #84] @ 0x54 + 800dc7c: 6efb ldr r3, [r7, #108] @ 0x6c + 800dc7e: 429a cmp r2, r3 + 800dc80: dd01 ble.n 800dc86 + 800dc82: 6d7b ldr r3, [r7, #84] @ 0x54 + 800dc84: 66fb str r3, [r7, #108] @ 0x6c size -= precision; - 800dc5e: 6eba ldr r2, [r7, #104] @ 0x68 - 800dc60: 6efb ldr r3, [r7, #108] @ 0x6c - 800dc62: 1ad3 subs r3, r2, r3 - 800dc64: 66bb str r3, [r7, #104] @ 0x68 + 800dc86: 6eba ldr r2, [r7, #104] @ 0x68 + 800dc88: 6efb ldr r3, [r7, #108] @ 0x6c + 800dc8a: 1ad3 subs r3, r2, r3 + 800dc8c: 66bb str r3, [r7, #104] @ 0x68 if (!(type & (ZEROPAD /* TINY option | LEFT */))) while (size-- > 0) ASSIGN_STR(' '); - 800dc66: 6f3b ldr r3, [r7, #112] @ 0x70 - 800dc68: f003 0301 and.w r3, r3, #1 - 800dc6c: 2b00 cmp r3, #0 - 800dc6e: d112 bne.n 800dc96 - 800dc70: e00c b.n 800dc8c - 800dc72: 68fb ldr r3, [r7, #12] - 800dc74: 1c5a adds r2, r3, #1 - 800dc76: 60fa str r2, [r7, #12] - 800dc78: 2220 movs r2, #32 - 800dc7a: 701a strb r2, [r3, #0] - 800dc7c: 68bb ldr r3, [r7, #8] - 800dc7e: 3b01 subs r3, #1 - 800dc80: 60bb str r3, [r7, #8] - 800dc82: 68bb ldr r3, [r7, #8] - 800dc84: 2b00 cmp r3, #0 - 800dc86: d101 bne.n 800dc8c - 800dc88: 68fb ldr r3, [r7, #12] - 800dc8a: e068 b.n 800dd5e - 800dc8c: 6ebb ldr r3, [r7, #104] @ 0x68 - 800dc8e: 1e5a subs r2, r3, #1 - 800dc90: 66ba str r2, [r7, #104] @ 0x68 - 800dc92: 2b00 cmp r3, #0 - 800dc94: dced bgt.n 800dc72 - if (sign) ASSIGN_STR(sign); - 800dc96: f897 305f ldrb.w r3, [r7, #95] @ 0x5f - 800dc9a: 2b00 cmp r3, #0 - 800dc9c: d01b beq.n 800dcd6 - 800dc9e: 68fb ldr r3, [r7, #12] - 800dca0: 1c5a adds r2, r3, #1 - 800dca2: 60fa str r2, [r7, #12] - 800dca4: f897 205f ldrb.w r2, [r7, #95] @ 0x5f - 800dca8: 701a strb r2, [r3, #0] + 800dc8e: 6f3b ldr r3, [r7, #112] @ 0x70 + 800dc90: f003 0301 and.w r3, r3, #1 + 800dc94: 2b00 cmp r3, #0 + 800dc96: d112 bne.n 800dcbe + 800dc98: e00c b.n 800dcb4 + 800dc9a: 68fb ldr r3, [r7, #12] + 800dc9c: 1c5a adds r2, r3, #1 + 800dc9e: 60fa str r2, [r7, #12] + 800dca0: 2220 movs r2, #32 + 800dca2: 701a strb r2, [r3, #0] + 800dca4: 68bb ldr r3, [r7, #8] + 800dca6: 3b01 subs r3, #1 + 800dca8: 60bb str r3, [r7, #8] 800dcaa: 68bb ldr r3, [r7, #8] - 800dcac: 3b01 subs r3, #1 - 800dcae: 60bb str r3, [r7, #8] - 800dcb0: 68bb ldr r3, [r7, #8] - 800dcb2: 2b00 cmp r3, #0 - 800dcb4: d10f bne.n 800dcd6 - 800dcb6: 68fb ldr r3, [r7, #12] - 800dcb8: e051 b.n 800dd5e + 800dcac: 2b00 cmp r3, #0 + 800dcae: d101 bne.n 800dcb4 + 800dcb0: 68fb ldr r3, [r7, #12] + 800dcb2: e068 b.n 800dd86 + 800dcb4: 6ebb ldr r3, [r7, #104] @ 0x68 + 800dcb6: 1e5a subs r2, r3, #1 + 800dcb8: 66ba str r2, [r7, #104] @ 0x68 + 800dcba: 2b00 cmp r3, #0 + 800dcbc: dced bgt.n 800dc9a + if (sign) ASSIGN_STR(sign); + 800dcbe: f897 305f ldrb.w r3, [r7, #95] @ 0x5f + 800dcc2: 2b00 cmp r3, #0 + 800dcc4: d01b beq.n 800dcfe + 800dcc6: 68fb ldr r3, [r7, #12] + 800dcc8: 1c5a adds r2, r3, #1 + 800dcca: 60fa str r2, [r7, #12] + 800dccc: f897 205f ldrb.w r2, [r7, #95] @ 0x5f + 800dcd0: 701a strb r2, [r3, #0] + 800dcd2: 68bb ldr r3, [r7, #8] + 800dcd4: 3b01 subs r3, #1 + 800dcd6: 60bb str r3, [r7, #8] + 800dcd8: 68bb ldr r3, [r7, #8] + 800dcda: 2b00 cmp r3, #0 + 800dcdc: d10f bne.n 800dcfe + 800dcde: 68fb ldr r3, [r7, #12] + 800dce0: e051 b.n 800dd86 } } #endif #ifdef TINY_PRINTF while (size-- > 0) ASSIGN_STR(c); - 800dcba: 68fb ldr r3, [r7, #12] - 800dcbc: 1c5a adds r2, r3, #1 - 800dcbe: 60fa str r2, [r7, #12] - 800dcc0: f897 2053 ldrb.w r2, [r7, #83] @ 0x53 - 800dcc4: 701a strb r2, [r3, #0] - 800dcc6: 68bb ldr r3, [r7, #8] - 800dcc8: 3b01 subs r3, #1 - 800dcca: 60bb str r3, [r7, #8] - 800dccc: 68bb ldr r3, [r7, #8] - 800dcce: 2b00 cmp r3, #0 - 800dcd0: d101 bne.n 800dcd6 - 800dcd2: 68fb ldr r3, [r7, #12] - 800dcd4: e043 b.n 800dd5e - 800dcd6: 6ebb ldr r3, [r7, #104] @ 0x68 - 800dcd8: 1e5a subs r2, r3, #1 - 800dcda: 66ba str r2, [r7, #104] @ 0x68 - 800dcdc: 2b00 cmp r3, #0 - 800dcde: dcec bgt.n 800dcba + 800dce2: 68fb ldr r3, [r7, #12] + 800dce4: 1c5a adds r2, r3, #1 + 800dce6: 60fa str r2, [r7, #12] + 800dce8: f897 2053 ldrb.w r2, [r7, #83] @ 0x53 + 800dcec: 701a strb r2, [r3, #0] + 800dcee: 68bb ldr r3, [r7, #8] + 800dcf0: 3b01 subs r3, #1 + 800dcf2: 60bb str r3, [r7, #8] + 800dcf4: 68bb ldr r3, [r7, #8] + 800dcf6: 2b00 cmp r3, #0 + 800dcf8: d101 bne.n 800dcfe + 800dcfa: 68fb ldr r3, [r7, #12] + 800dcfc: e043 b.n 800dd86 + 800dcfe: 6ebb ldr r3, [r7, #104] @ 0x68 + 800dd00: 1e5a subs r2, r3, #1 + 800dd02: 66ba str r2, [r7, #104] @ 0x68 + 800dd04: 2b00 cmp r3, #0 + 800dd06: dcec bgt.n 800dce2 #else if (!(type & LEFT)) while (size-- > 0) ASSIGN_STR(c); #endif while (i < precision--) ASSIGN_STR('0'); - 800dce0: e00c b.n 800dcfc - 800dce2: 68fb ldr r3, [r7, #12] - 800dce4: 1c5a adds r2, r3, #1 - 800dce6: 60fa str r2, [r7, #12] - 800dce8: 2230 movs r2, #48 @ 0x30 - 800dcea: 701a strb r2, [r3, #0] - 800dcec: 68bb ldr r3, [r7, #8] - 800dcee: 3b01 subs r3, #1 - 800dcf0: 60bb str r3, [r7, #8] - 800dcf2: 68bb ldr r3, [r7, #8] - 800dcf4: 2b00 cmp r3, #0 - 800dcf6: d101 bne.n 800dcfc - 800dcf8: 68fb ldr r3, [r7, #12] - 800dcfa: e030 b.n 800dd5e - 800dcfc: 6efb ldr r3, [r7, #108] @ 0x6c - 800dcfe: 1e5a subs r2, r3, #1 - 800dd00: 66fa str r2, [r7, #108] @ 0x6c - 800dd02: 6d7a ldr r2, [r7, #84] @ 0x54 - 800dd04: 429a cmp r2, r3 - 800dd06: dbec blt.n 800dce2 - while (i-- > 0) ASSIGN_STR(tmp[i]); - 800dd08: e010 b.n 800dd2c + 800dd08: e00c b.n 800dd24 800dd0a: 68fb ldr r3, [r7, #12] 800dd0c: 1c5a adds r2, r3, #1 800dd0e: 60fa str r2, [r7, #12] - 800dd10: f107 0110 add.w r1, r7, #16 - 800dd14: 6d7a ldr r2, [r7, #84] @ 0x54 - 800dd16: 440a add r2, r1 - 800dd18: 7812 ldrb r2, [r2, #0] - 800dd1a: 701a strb r2, [r3, #0] - 800dd1c: 68bb ldr r3, [r7, #8] - 800dd1e: 3b01 subs r3, #1 - 800dd20: 60bb str r3, [r7, #8] - 800dd22: 68bb ldr r3, [r7, #8] - 800dd24: 2b00 cmp r3, #0 - 800dd26: d101 bne.n 800dd2c - 800dd28: 68fb ldr r3, [r7, #12] - 800dd2a: e018 b.n 800dd5e - 800dd2c: 6d7b ldr r3, [r7, #84] @ 0x54 - 800dd2e: 1e5a subs r2, r3, #1 - 800dd30: 657a str r2, [r7, #84] @ 0x54 - 800dd32: 2b00 cmp r3, #0 - 800dd34: dce9 bgt.n 800dd0a + 800dd10: 2230 movs r2, #48 @ 0x30 + 800dd12: 701a strb r2, [r3, #0] + 800dd14: 68bb ldr r3, [r7, #8] + 800dd16: 3b01 subs r3, #1 + 800dd18: 60bb str r3, [r7, #8] + 800dd1a: 68bb ldr r3, [r7, #8] + 800dd1c: 2b00 cmp r3, #0 + 800dd1e: d101 bne.n 800dd24 + 800dd20: 68fb ldr r3, [r7, #12] + 800dd22: e030 b.n 800dd86 + 800dd24: 6efb ldr r3, [r7, #108] @ 0x6c + 800dd26: 1e5a subs r2, r3, #1 + 800dd28: 66fa str r2, [r7, #108] @ 0x6c + 800dd2a: 6d7a ldr r2, [r7, #84] @ 0x54 + 800dd2c: 429a cmp r2, r3 + 800dd2e: dbec blt.n 800dd0a + while (i-- > 0) ASSIGN_STR(tmp[i]); + 800dd30: e010 b.n 800dd54 + 800dd32: 68fb ldr r3, [r7, #12] + 800dd34: 1c5a adds r2, r3, #1 + 800dd36: 60fa str r2, [r7, #12] + 800dd38: f107 0110 add.w r1, r7, #16 + 800dd3c: 6d7a ldr r2, [r7, #84] @ 0x54 + 800dd3e: 440a add r2, r1 + 800dd40: 7812 ldrb r2, [r2, #0] + 800dd42: 701a strb r2, [r3, #0] + 800dd44: 68bb ldr r3, [r7, #8] + 800dd46: 3b01 subs r3, #1 + 800dd48: 60bb str r3, [r7, #8] + 800dd4a: 68bb ldr r3, [r7, #8] + 800dd4c: 2b00 cmp r3, #0 + 800dd4e: d101 bne.n 800dd54 + 800dd50: 68fb ldr r3, [r7, #12] + 800dd52: e018 b.n 800dd86 + 800dd54: 6d7b ldr r3, [r7, #84] @ 0x54 + 800dd56: 1e5a subs r2, r3, #1 + 800dd58: 657a str r2, [r7, #84] @ 0x54 + 800dd5a: 2b00 cmp r3, #0 + 800dd5c: dce9 bgt.n 800dd32 while (size-- > 0) ASSIGN_STR(' '); - 800dd36: e00c b.n 800dd52 - 800dd38: 68fb ldr r3, [r7, #12] - 800dd3a: 1c5a adds r2, r3, #1 - 800dd3c: 60fa str r2, [r7, #12] - 800dd3e: 2220 movs r2, #32 - 800dd40: 701a strb r2, [r3, #0] - 800dd42: 68bb ldr r3, [r7, #8] - 800dd44: 3b01 subs r3, #1 - 800dd46: 60bb str r3, [r7, #8] - 800dd48: 68bb ldr r3, [r7, #8] - 800dd4a: 2b00 cmp r3, #0 - 800dd4c: d101 bne.n 800dd52 - 800dd4e: 68fb ldr r3, [r7, #12] - 800dd50: e005 b.n 800dd5e - 800dd52: 6ebb ldr r3, [r7, #104] @ 0x68 - 800dd54: 1e5a subs r2, r3, #1 - 800dd56: 66ba str r2, [r7, #104] @ 0x68 - 800dd58: 2b00 cmp r3, #0 - 800dd5a: dced bgt.n 800dd38 + 800dd5e: e00c b.n 800dd7a + 800dd60: 68fb ldr r3, [r7, #12] + 800dd62: 1c5a adds r2, r3, #1 + 800dd64: 60fa str r2, [r7, #12] + 800dd66: 2220 movs r2, #32 + 800dd68: 701a strb r2, [r3, #0] + 800dd6a: 68bb ldr r3, [r7, #8] + 800dd6c: 3b01 subs r3, #1 + 800dd6e: 60bb str r3, [r7, #8] + 800dd70: 68bb ldr r3, [r7, #8] + 800dd72: 2b00 cmp r3, #0 + 800dd74: d101 bne.n 800dd7a + 800dd76: 68fb ldr r3, [r7, #12] + 800dd78: e005 b.n 800dd86 + 800dd7a: 6ebb ldr r3, [r7, #104] @ 0x68 + 800dd7c: 1e5a subs r2, r3, #1 + 800dd7e: 66ba str r2, [r7, #104] @ 0x68 + 800dd80: 2b00 cmp r3, #0 + 800dd82: dced bgt.n 800dd60 return str; - 800dd5c: 68fb ldr r3, [r7, #12] + 800dd84: 68fb ldr r3, [r7, #12] } - 800dd5e: 4618 mov r0, r3 - 800dd60: 3764 adds r7, #100 @ 0x64 - 800dd62: 46bd mov sp, r7 - 800dd64: bc80 pop {r7} - 800dd66: 4770 bx lr - 800dd68: 2000000c .word 0x2000000c - 800dd6c: 20000010 .word 0x20000010 + 800dd86: 4618 mov r0, r3 + 800dd88: 3764 adds r7, #100 @ 0x64 + 800dd8a: 46bd mov sp, r7 + 800dd8c: bc80 pop {r7} + 800dd8e: 4770 bx lr + 800dd90: 2000000c .word 0x2000000c + 800dd94: 20000010 .word 0x20000010 -0800dd70 : +0800dd98 : #define CHECK_STR_SIZE(_buf, _str, _size) \ if ((((_str) - (_buf)) >= ((_size)-1))) { break; } int tiny_vsnprintf_like(char *buf, const int size, const char *fmt, va_list args) { - 800dd70: b580 push {r7, lr} - 800dd72: b092 sub sp, #72 @ 0x48 - 800dd74: af04 add r7, sp, #16 - 800dd76: 60f8 str r0, [r7, #12] - 800dd78: 60b9 str r1, [r7, #8] - 800dd7a: 607a str r2, [r7, #4] - 800dd7c: 603b str r3, [r7, #0] + 800dd98: b580 push {r7, lr} + 800dd9a: b092 sub sp, #72 @ 0x48 + 800dd9c: af04 add r7, sp, #16 + 800dd9e: 60f8 str r0, [r7, #12] + 800dda0: 60b9 str r1, [r7, #8] + 800dda2: 607a str r2, [r7, #4] + 800dda4: 603b str r3, [r7, #0] int field_width; // Width of output field int precision; // Min. # of digits for integers; max number of chars for from string int qualifier; // 'h', 'l', or 'L' for integer fields if (size <= 0) - 800dd7e: 68bb ldr r3, [r7, #8] - 800dd80: 2b00 cmp r3, #0 - 800dd82: dc01 bgt.n 800dd88 + 800dda6: 68bb ldr r3, [r7, #8] + 800dda8: 2b00 cmp r3, #0 + 800ddaa: dc01 bgt.n 800ddb0 { return 0; - 800dd84: 2300 movs r3, #0 - 800dd86: e13e b.n 800e006 + 800ddac: 2300 movs r3, #0 + 800ddae: e13e b.n 800e02e } for (str = buf; *fmt || ((str - buf) >= size-1); fmt++) - 800dd88: 68fb ldr r3, [r7, #12] - 800dd8a: 62fb str r3, [r7, #44] @ 0x2c - 800dd8c: e128 b.n 800dfe0 + 800ddb0: 68fb ldr r3, [r7, #12] + 800ddb2: 62fb str r3, [r7, #44] @ 0x2c + 800ddb4: e128 b.n 800e008 { CHECK_STR_SIZE(buf, str, size); - 800dd8e: 6afa ldr r2, [r7, #44] @ 0x2c - 800dd90: 68fb ldr r3, [r7, #12] - 800dd92: 1ad2 subs r2, r2, r3 - 800dd94: 68bb ldr r3, [r7, #8] - 800dd96: 3b01 subs r3, #1 - 800dd98: 429a cmp r2, r3 - 800dd9a: f280 812e bge.w 800dffa + 800ddb6: 6afa ldr r2, [r7, #44] @ 0x2c + 800ddb8: 68fb ldr r3, [r7, #12] + 800ddba: 1ad2 subs r2, r2, r3 + 800ddbc: 68bb ldr r3, [r7, #8] + 800ddbe: 3b01 subs r3, #1 + 800ddc0: 429a cmp r2, r3 + 800ddc2: f280 812e bge.w 800e022 if (*fmt != '%') - 800dd9e: 687b ldr r3, [r7, #4] - 800dda0: 781b ldrb r3, [r3, #0] - 800dda2: 2b25 cmp r3, #37 @ 0x25 - 800dda4: d006 beq.n 800ddb4 + 800ddc6: 687b ldr r3, [r7, #4] + 800ddc8: 781b ldrb r3, [r3, #0] + 800ddca: 2b25 cmp r3, #37 @ 0x25 + 800ddcc: d006 beq.n 800dddc { *str++ = *fmt; - 800dda6: 687a ldr r2, [r7, #4] - 800dda8: 6afb ldr r3, [r7, #44] @ 0x2c - 800ddaa: 1c59 adds r1, r3, #1 - 800ddac: 62f9 str r1, [r7, #44] @ 0x2c - 800ddae: 7812 ldrb r2, [r2, #0] - 800ddb0: 701a strb r2, [r3, #0] + 800ddce: 687a ldr r2, [r7, #4] + 800ddd0: 6afb ldr r3, [r7, #44] @ 0x2c + 800ddd2: 1c59 adds r1, r3, #1 + 800ddd4: 62f9 str r1, [r7, #44] @ 0x2c + 800ddd6: 7812 ldrb r2, [r2, #0] + 800ddd8: 701a strb r2, [r3, #0] continue; - 800ddb2: e112 b.n 800dfda + 800ddda: e112 b.n 800e002 } // Process flags flags = 0; - 800ddb4: 2300 movs r3, #0 - 800ddb6: 623b str r3, [r7, #32] + 800dddc: 2300 movs r3, #0 + 800ddde: 623b str r3, [r7, #32] #ifdef TINY_PRINTF /* Support %0, but not %-, %+, %space and %# */ fmt++; - 800ddb8: 687b ldr r3, [r7, #4] - 800ddba: 3301 adds r3, #1 - 800ddbc: 607b str r3, [r7, #4] + 800dde0: 687b ldr r3, [r7, #4] + 800dde2: 3301 adds r3, #1 + 800dde4: 607b str r3, [r7, #4] if (*fmt == '0') - 800ddbe: 687b ldr r3, [r7, #4] - 800ddc0: 781b ldrb r3, [r3, #0] - 800ddc2: 2b30 cmp r3, #48 @ 0x30 - 800ddc4: d103 bne.n 800ddce + 800dde6: 687b ldr r3, [r7, #4] + 800dde8: 781b ldrb r3, [r3, #0] + 800ddea: 2b30 cmp r3, #48 @ 0x30 + 800ddec: d103 bne.n 800ddf6 { flags |= ZEROPAD; - 800ddc6: 6a3b ldr r3, [r7, #32] - 800ddc8: f043 0301 orr.w r3, r3, #1 - 800ddcc: 623b str r3, [r7, #32] + 800ddee: 6a3b ldr r3, [r7, #32] + 800ddf0: f043 0301 orr.w r3, r3, #1 + 800ddf4: 623b str r3, [r7, #32] case '0': flags |= ZEROPAD; goto repeat; } #endif // Get field width field_width = -1; - 800ddce: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff - 800ddd2: 61fb str r3, [r7, #28] + 800ddf6: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff + 800ddfa: 61fb str r3, [r7, #28] if (is_digit(*fmt)) - 800ddd4: 687b ldr r3, [r7, #4] - 800ddd6: 781b ldrb r3, [r3, #0] - 800ddd8: 2b2f cmp r3, #47 @ 0x2f - 800ddda: d908 bls.n 800ddee - 800dddc: 687b ldr r3, [r7, #4] - 800ddde: 781b ldrb r3, [r3, #0] - 800dde0: 2b39 cmp r3, #57 @ 0x39 - 800dde2: d804 bhi.n 800ddee + 800ddfc: 687b ldr r3, [r7, #4] + 800ddfe: 781b ldrb r3, [r3, #0] + 800de00: 2b2f cmp r3, #47 @ 0x2f + 800de02: d908 bls.n 800de16 + 800de04: 687b ldr r3, [r7, #4] + 800de06: 781b ldrb r3, [r3, #0] + 800de08: 2b39 cmp r3, #57 @ 0x39 + 800de0a: d804 bhi.n 800de16 field_width = ee_skip_atoi(&fmt); - 800dde4: 1d3b adds r3, r7, #4 - 800dde6: 4618 mov r0, r3 - 800dde8: f7ff feae bl 800db48 - 800ddec: 61f8 str r0, [r7, #28] + 800de0c: 1d3b adds r3, r7, #4 + 800de0e: 4618 mov r0, r3 + 800de10: f7ff feae bl 800db70 + 800de14: 61f8 str r0, [r7, #28] } } #endif // Get the precision precision = -1; - 800ddee: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff - 800ddf2: 61bb str r3, [r7, #24] + 800de16: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff + 800de1a: 61bb str r3, [r7, #24] if (precision < 0) precision = 0; } #endif // Get the conversion qualifier qualifier = -1; - 800ddf4: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff - 800ddf8: 617b str r3, [r7, #20] + 800de1c: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff + 800de20: 617b str r3, [r7, #20] fmt++; } #endif // Default base base = 10; - 800ddfa: 230a movs r3, #10 - 800ddfc: 633b str r3, [r7, #48] @ 0x30 + 800de22: 230a movs r3, #10 + 800de24: 633b str r3, [r7, #48] @ 0x30 switch (*fmt) - 800ddfe: 687b ldr r3, [r7, #4] - 800de00: 781b ldrb r3, [r3, #0] - 800de02: 3b58 subs r3, #88 @ 0x58 - 800de04: 2b20 cmp r3, #32 - 800de06: f200 8094 bhi.w 800df32 - 800de0a: a201 add r2, pc, #4 @ (adr r2, 800de10 ) - 800de0c: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800de10: 0800df1b .word 0x0800df1b - 800de14: 0800df33 .word 0x0800df33 - 800de18: 0800df33 .word 0x0800df33 - 800de1c: 0800df33 .word 0x0800df33 - 800de20: 0800df33 .word 0x0800df33 - 800de24: 0800df33 .word 0x0800df33 - 800de28: 0800df33 .word 0x0800df33 - 800de2c: 0800df33 .word 0x0800df33 - 800de30: 0800df33 .word 0x0800df33 - 800de34: 0800df33 .word 0x0800df33 - 800de38: 0800df33 .word 0x0800df33 - 800de3c: 0800de9f .word 0x0800de9f - 800de40: 0800df29 .word 0x0800df29 - 800de44: 0800df33 .word 0x0800df33 - 800de48: 0800df33 .word 0x0800df33 - 800de4c: 0800df33 .word 0x0800df33 - 800de50: 0800df33 .word 0x0800df33 - 800de54: 0800df29 .word 0x0800df29 - 800de58: 0800df33 .word 0x0800df33 - 800de5c: 0800df33 .word 0x0800df33 - 800de60: 0800df33 .word 0x0800df33 - 800de64: 0800df33 .word 0x0800df33 - 800de68: 0800df33 .word 0x0800df33 - 800de6c: 0800df33 .word 0x0800df33 - 800de70: 0800df33 .word 0x0800df33 - 800de74: 0800df33 .word 0x0800df33 - 800de78: 0800df33 .word 0x0800df33 - 800de7c: 0800debf .word 0x0800debf - 800de80: 0800df33 .word 0x0800df33 - 800de84: 0800df7f .word 0x0800df7f - 800de88: 0800df33 .word 0x0800df33 - 800de8c: 0800df33 .word 0x0800df33 - 800de90: 0800df23 .word 0x0800df23 + 800de26: 687b ldr r3, [r7, #4] + 800de28: 781b ldrb r3, [r3, #0] + 800de2a: 3b58 subs r3, #88 @ 0x58 + 800de2c: 2b20 cmp r3, #32 + 800de2e: f200 8094 bhi.w 800df5a + 800de32: a201 add r2, pc, #4 @ (adr r2, 800de38 ) + 800de34: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800de38: 0800df43 .word 0x0800df43 + 800de3c: 0800df5b .word 0x0800df5b + 800de40: 0800df5b .word 0x0800df5b + 800de44: 0800df5b .word 0x0800df5b + 800de48: 0800df5b .word 0x0800df5b + 800de4c: 0800df5b .word 0x0800df5b + 800de50: 0800df5b .word 0x0800df5b + 800de54: 0800df5b .word 0x0800df5b + 800de58: 0800df5b .word 0x0800df5b + 800de5c: 0800df5b .word 0x0800df5b + 800de60: 0800df5b .word 0x0800df5b + 800de64: 0800dec7 .word 0x0800dec7 + 800de68: 0800df51 .word 0x0800df51 + 800de6c: 0800df5b .word 0x0800df5b + 800de70: 0800df5b .word 0x0800df5b + 800de74: 0800df5b .word 0x0800df5b + 800de78: 0800df5b .word 0x0800df5b + 800de7c: 0800df51 .word 0x0800df51 + 800de80: 0800df5b .word 0x0800df5b + 800de84: 0800df5b .word 0x0800df5b + 800de88: 0800df5b .word 0x0800df5b + 800de8c: 0800df5b .word 0x0800df5b + 800de90: 0800df5b .word 0x0800df5b + 800de94: 0800df5b .word 0x0800df5b + 800de98: 0800df5b .word 0x0800df5b + 800de9c: 0800df5b .word 0x0800df5b + 800dea0: 0800df5b .word 0x0800df5b + 800dea4: 0800dee7 .word 0x0800dee7 + 800dea8: 0800df5b .word 0x0800df5b + 800deac: 0800dfa7 .word 0x0800dfa7 + 800deb0: 0800df5b .word 0x0800df5b + 800deb4: 0800df5b .word 0x0800df5b + 800deb8: 0800df4b .word 0x0800df4b case 'c': #ifdef TINY_PRINTF #else if (!(flags & LEFT)) #endif while (--field_width > 0) *str++ = ' '; - 800de94: 6afb ldr r3, [r7, #44] @ 0x2c - 800de96: 1c5a adds r2, r3, #1 - 800de98: 62fa str r2, [r7, #44] @ 0x2c - 800de9a: 2220 movs r2, #32 - 800de9c: 701a strb r2, [r3, #0] - 800de9e: 69fb ldr r3, [r7, #28] - 800dea0: 3b01 subs r3, #1 - 800dea2: 61fb str r3, [r7, #28] - 800dea4: 69fb ldr r3, [r7, #28] - 800dea6: 2b00 cmp r3, #0 - 800dea8: dcf4 bgt.n 800de94 + 800debc: 6afb ldr r3, [r7, #44] @ 0x2c + 800debe: 1c5a adds r2, r3, #1 + 800dec0: 62fa str r2, [r7, #44] @ 0x2c + 800dec2: 2220 movs r2, #32 + 800dec4: 701a strb r2, [r3, #0] + 800dec6: 69fb ldr r3, [r7, #28] + 800dec8: 3b01 subs r3, #1 + 800deca: 61fb str r3, [r7, #28] + 800decc: 69fb ldr r3, [r7, #28] + 800dece: 2b00 cmp r3, #0 + 800ded0: dcf4 bgt.n 800debc *str++ = (unsigned char) va_arg(args, int); - 800deaa: 683b ldr r3, [r7, #0] - 800deac: 1d1a adds r2, r3, #4 - 800deae: 603a str r2, [r7, #0] - 800deb0: 6819 ldr r1, [r3, #0] - 800deb2: 6afb ldr r3, [r7, #44] @ 0x2c - 800deb4: 1c5a adds r2, r3, #1 - 800deb6: 62fa str r2, [r7, #44] @ 0x2c - 800deb8: b2ca uxtb r2, r1 - 800deba: 701a strb r2, [r3, #0] + 800ded2: 683b ldr r3, [r7, #0] + 800ded4: 1d1a adds r2, r3, #4 + 800ded6: 603a str r2, [r7, #0] + 800ded8: 6819 ldr r1, [r3, #0] + 800deda: 6afb ldr r3, [r7, #44] @ 0x2c + 800dedc: 1c5a adds r2, r3, #1 + 800dede: 62fa str r2, [r7, #44] @ 0x2c + 800dee0: b2ca uxtb r2, r1 + 800dee2: 701a strb r2, [r3, #0] #ifdef TINY_PRINTF #else while (--field_width > 0) *str++ = ' '; #endif continue; - 800debc: e08d b.n 800dfda + 800dee4: e08d b.n 800e002 case 's': s = va_arg(args, char *); - 800debe: 683b ldr r3, [r7, #0] - 800dec0: 1d1a adds r2, r3, #4 - 800dec2: 603a str r2, [r7, #0] - 800dec4: 681b ldr r3, [r3, #0] - 800dec6: 627b str r3, [r7, #36] @ 0x24 + 800dee6: 683b ldr r3, [r7, #0] + 800dee8: 1d1a adds r2, r3, #4 + 800deea: 603a str r2, [r7, #0] + 800deec: 681b ldr r3, [r3, #0] + 800deee: 627b str r3, [r7, #36] @ 0x24 if (!s) s = ""; - 800dec8: 6a7b ldr r3, [r7, #36] @ 0x24 - 800deca: 2b00 cmp r3, #0 - 800decc: d101 bne.n 800ded2 - 800dece: 4b50 ldr r3, [pc, #320] @ (800e010 ) - 800ded0: 627b str r3, [r7, #36] @ 0x24 + 800def0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800def2: 2b00 cmp r3, #0 + 800def4: d101 bne.n 800defa + 800def6: 4b50 ldr r3, [pc, #320] @ (800e038 ) + 800def8: 627b str r3, [r7, #36] @ 0x24 #ifdef TINY_PRINTF len = strlen(s); - 800ded2: 6a78 ldr r0, [r7, #36] @ 0x24 - 800ded4: f7f2 f95e bl 8000194 - 800ded8: 4603 mov r3, r0 - 800deda: 613b str r3, [r7, #16] + 800defa: 6a78 ldr r0, [r7, #36] @ 0x24 + 800defc: f7f2 f94a bl 8000194 + 800df00: 4603 mov r3, r0 + 800df02: 613b str r3, [r7, #16] #else len = strnlen(s, precision); if (!(flags & LEFT)) #endif while (len < field_width--) *str++ = ' '; - 800dedc: e004 b.n 800dee8 - 800dede: 6afb ldr r3, [r7, #44] @ 0x2c - 800dee0: 1c5a adds r2, r3, #1 - 800dee2: 62fa str r2, [r7, #44] @ 0x2c - 800dee4: 2220 movs r2, #32 - 800dee6: 701a strb r2, [r3, #0] - 800dee8: 69fb ldr r3, [r7, #28] - 800deea: 1e5a subs r2, r3, #1 - 800deec: 61fa str r2, [r7, #28] - 800deee: 693a ldr r2, [r7, #16] - 800def0: 429a cmp r2, r3 - 800def2: dbf4 blt.n 800dede + 800df04: e004 b.n 800df10 + 800df06: 6afb ldr r3, [r7, #44] @ 0x2c + 800df08: 1c5a adds r2, r3, #1 + 800df0a: 62fa str r2, [r7, #44] @ 0x2c + 800df0c: 2220 movs r2, #32 + 800df0e: 701a strb r2, [r3, #0] + 800df10: 69fb ldr r3, [r7, #28] + 800df12: 1e5a subs r2, r3, #1 + 800df14: 61fa str r2, [r7, #28] + 800df16: 693a ldr r2, [r7, #16] + 800df18: 429a cmp r2, r3 + 800df1a: dbf4 blt.n 800df06 for (i = 0; i < len; ++i) *str++ = *s++; - 800def4: 2300 movs r3, #0 - 800def6: 62bb str r3, [r7, #40] @ 0x28 - 800def8: e00a b.n 800df10 - 800defa: 6a7a ldr r2, [r7, #36] @ 0x24 - 800defc: 1c53 adds r3, r2, #1 - 800defe: 627b str r3, [r7, #36] @ 0x24 - 800df00: 6afb ldr r3, [r7, #44] @ 0x2c - 800df02: 1c59 adds r1, r3, #1 - 800df04: 62f9 str r1, [r7, #44] @ 0x2c - 800df06: 7812 ldrb r2, [r2, #0] - 800df08: 701a strb r2, [r3, #0] - 800df0a: 6abb ldr r3, [r7, #40] @ 0x28 - 800df0c: 3301 adds r3, #1 - 800df0e: 62bb str r3, [r7, #40] @ 0x28 - 800df10: 6aba ldr r2, [r7, #40] @ 0x28 - 800df12: 693b ldr r3, [r7, #16] - 800df14: 429a cmp r2, r3 - 800df16: dbf0 blt.n 800defa + 800df1c: 2300 movs r3, #0 + 800df1e: 62bb str r3, [r7, #40] @ 0x28 + 800df20: e00a b.n 800df38 + 800df22: 6a7a ldr r2, [r7, #36] @ 0x24 + 800df24: 1c53 adds r3, r2, #1 + 800df26: 627b str r3, [r7, #36] @ 0x24 + 800df28: 6afb ldr r3, [r7, #44] @ 0x2c + 800df2a: 1c59 adds r1, r3, #1 + 800df2c: 62f9 str r1, [r7, #44] @ 0x2c + 800df2e: 7812 ldrb r2, [r2, #0] + 800df30: 701a strb r2, [r3, #0] + 800df32: 6abb ldr r3, [r7, #40] @ 0x28 + 800df34: 3301 adds r3, #1 + 800df36: 62bb str r3, [r7, #40] @ 0x28 + 800df38: 6aba ldr r2, [r7, #40] @ 0x28 + 800df3a: 693b ldr r3, [r7, #16] + 800df3c: 429a cmp r2, r3 + 800df3e: dbf0 blt.n 800df22 #ifdef TINY_PRINTF #else while (len < field_width--) *str++ = ' '; #endif continue; - 800df18: e05f b.n 800dfda + 800df40: e05f b.n 800e002 base = 8; break; #endif case 'X': flags |= UPPERCASE; - 800df1a: 6a3b ldr r3, [r7, #32] - 800df1c: f043 0340 orr.w r3, r3, #64 @ 0x40 - 800df20: 623b str r3, [r7, #32] + 800df42: 6a3b ldr r3, [r7, #32] + 800df44: f043 0340 orr.w r3, r3, #64 @ 0x40 + 800df48: 623b str r3, [r7, #32] case 'x': base = 16; - 800df22: 2310 movs r3, #16 - 800df24: 633b str r3, [r7, #48] @ 0x30 + 800df4a: 2310 movs r3, #16 + 800df4c: 633b str r3, [r7, #48] @ 0x30 break; - 800df26: e02b b.n 800df80 + 800df4e: e02b b.n 800dfa8 case 'd': case 'i': flags |= SIGN; - 800df28: 6a3b ldr r3, [r7, #32] - 800df2a: f043 0302 orr.w r3, r3, #2 - 800df2e: 623b str r3, [r7, #32] + 800df50: 6a3b ldr r3, [r7, #32] + 800df52: f043 0302 orr.w r3, r3, #2 + 800df56: 623b str r3, [r7, #32] case 'u': break; - 800df30: e025 b.n 800df7e + 800df58: e025 b.n 800dfa6 continue; #endif default: if (*fmt != '%') *str++ = '%'; - 800df32: 687b ldr r3, [r7, #4] - 800df34: 781b ldrb r3, [r3, #0] - 800df36: 2b25 cmp r3, #37 @ 0x25 - 800df38: d004 beq.n 800df44 - 800df3a: 6afb ldr r3, [r7, #44] @ 0x2c - 800df3c: 1c5a adds r2, r3, #1 - 800df3e: 62fa str r2, [r7, #44] @ 0x2c - 800df40: 2225 movs r2, #37 @ 0x25 - 800df42: 701a strb r2, [r3, #0] + 800df5a: 687b ldr r3, [r7, #4] + 800df5c: 781b ldrb r3, [r3, #0] + 800df5e: 2b25 cmp r3, #37 @ 0x25 + 800df60: d004 beq.n 800df6c + 800df62: 6afb ldr r3, [r7, #44] @ 0x2c + 800df64: 1c5a adds r2, r3, #1 + 800df66: 62fa str r2, [r7, #44] @ 0x2c + 800df68: 2225 movs r2, #37 @ 0x25 + 800df6a: 701a strb r2, [r3, #0] CHECK_STR_SIZE(buf, str, size); - 800df44: 6afa ldr r2, [r7, #44] @ 0x2c - 800df46: 68fb ldr r3, [r7, #12] - 800df48: 1ad2 subs r2, r2, r3 - 800df4a: 68bb ldr r3, [r7, #8] - 800df4c: 3b01 subs r3, #1 - 800df4e: 429a cmp r2, r3 - 800df50: da16 bge.n 800df80 + 800df6c: 6afa ldr r2, [r7, #44] @ 0x2c + 800df6e: 68fb ldr r3, [r7, #12] + 800df70: 1ad2 subs r2, r2, r3 + 800df72: 68bb ldr r3, [r7, #8] + 800df74: 3b01 subs r3, #1 + 800df76: 429a cmp r2, r3 + 800df78: da16 bge.n 800dfa8 if (*fmt) - 800df52: 687b ldr r3, [r7, #4] - 800df54: 781b ldrb r3, [r3, #0] - 800df56: 2b00 cmp r3, #0 - 800df58: d006 beq.n 800df68 + 800df7a: 687b ldr r3, [r7, #4] + 800df7c: 781b ldrb r3, [r3, #0] + 800df7e: 2b00 cmp r3, #0 + 800df80: d006 beq.n 800df90 *str++ = *fmt; - 800df5a: 687a ldr r2, [r7, #4] - 800df5c: 6afb ldr r3, [r7, #44] @ 0x2c - 800df5e: 1c59 adds r1, r3, #1 - 800df60: 62f9 str r1, [r7, #44] @ 0x2c - 800df62: 7812 ldrb r2, [r2, #0] - 800df64: 701a strb r2, [r3, #0] - 800df66: e002 b.n 800df6e + 800df82: 687a ldr r2, [r7, #4] + 800df84: 6afb ldr r3, [r7, #44] @ 0x2c + 800df86: 1c59 adds r1, r3, #1 + 800df88: 62f9 str r1, [r7, #44] @ 0x2c + 800df8a: 7812 ldrb r2, [r2, #0] + 800df8c: 701a strb r2, [r3, #0] + 800df8e: e002 b.n 800df96 else --fmt; - 800df68: 687b ldr r3, [r7, #4] - 800df6a: 3b01 subs r3, #1 - 800df6c: 607b str r3, [r7, #4] + 800df90: 687b ldr r3, [r7, #4] + 800df92: 3b01 subs r3, #1 + 800df94: 607b str r3, [r7, #4] CHECK_STR_SIZE(buf, str, size); - 800df6e: 6afa ldr r2, [r7, #44] @ 0x2c - 800df70: 68fb ldr r3, [r7, #12] - 800df72: 1ad2 subs r2, r2, r3 - 800df74: 68bb ldr r3, [r7, #8] - 800df76: 3b01 subs r3, #1 - 800df78: 429a cmp r2, r3 - 800df7a: db2d blt.n 800dfd8 - 800df7c: e000 b.n 800df80 + 800df96: 6afa ldr r2, [r7, #44] @ 0x2c + 800df98: 68fb ldr r3, [r7, #12] + 800df9a: 1ad2 subs r2, r2, r3 + 800df9c: 68bb ldr r3, [r7, #8] + 800df9e: 3b01 subs r3, #1 + 800dfa0: 429a cmp r2, r3 + 800dfa2: db2d blt.n 800e000 + 800dfa4: e000 b.n 800dfa8 break; - 800df7e: bf00 nop + 800dfa6: bf00 nop continue; } if (qualifier == 'l') - 800df80: 697b ldr r3, [r7, #20] - 800df82: 2b6c cmp r3, #108 @ 0x6c - 800df84: d105 bne.n 800df92 + 800dfa8: 697b ldr r3, [r7, #20] + 800dfaa: 2b6c cmp r3, #108 @ 0x6c + 800dfac: d105 bne.n 800dfba num = va_arg(args, unsigned long); - 800df86: 683b ldr r3, [r7, #0] - 800df88: 1d1a adds r2, r3, #4 - 800df8a: 603a str r2, [r7, #0] - 800df8c: 681b ldr r3, [r3, #0] - 800df8e: 637b str r3, [r7, #52] @ 0x34 - 800df90: e00f b.n 800dfb2 + 800dfae: 683b ldr r3, [r7, #0] + 800dfb0: 1d1a adds r2, r3, #4 + 800dfb2: 603a str r2, [r7, #0] + 800dfb4: 681b ldr r3, [r3, #0] + 800dfb6: 637b str r3, [r7, #52] @ 0x34 + 800dfb8: e00f b.n 800dfda else if (flags & SIGN) - 800df92: 6a3b ldr r3, [r7, #32] - 800df94: f003 0302 and.w r3, r3, #2 - 800df98: 2b00 cmp r3, #0 - 800df9a: d005 beq.n 800dfa8 + 800dfba: 6a3b ldr r3, [r7, #32] + 800dfbc: f003 0302 and.w r3, r3, #2 + 800dfc0: 2b00 cmp r3, #0 + 800dfc2: d005 beq.n 800dfd0 num = va_arg(args, int); - 800df9c: 683b ldr r3, [r7, #0] - 800df9e: 1d1a adds r2, r3, #4 - 800dfa0: 603a str r2, [r7, #0] - 800dfa2: 681b ldr r3, [r3, #0] - 800dfa4: 637b str r3, [r7, #52] @ 0x34 - 800dfa6: e004 b.n 800dfb2 + 800dfc4: 683b ldr r3, [r7, #0] + 800dfc6: 1d1a adds r2, r3, #4 + 800dfc8: 603a str r2, [r7, #0] + 800dfca: 681b ldr r3, [r3, #0] + 800dfcc: 637b str r3, [r7, #52] @ 0x34 + 800dfce: e004 b.n 800dfda else num = va_arg(args, unsigned int); - 800dfa8: 683b ldr r3, [r7, #0] - 800dfaa: 1d1a adds r2, r3, #4 - 800dfac: 603a str r2, [r7, #0] - 800dfae: 681b ldr r3, [r3, #0] - 800dfb0: 637b str r3, [r7, #52] @ 0x34 + 800dfd0: 683b ldr r3, [r7, #0] + 800dfd2: 1d1a adds r2, r3, #4 + 800dfd4: 603a str r2, [r7, #0] + 800dfd6: 681b ldr r3, [r3, #0] + 800dfd8: 637b str r3, [r7, #52] @ 0x34 str = ee_number(str, ((size - 1) - (str - buf)), num, base, field_width, precision, flags); - 800dfb2: 68bb ldr r3, [r7, #8] - 800dfb4: 1e5a subs r2, r3, #1 - 800dfb6: 6af9 ldr r1, [r7, #44] @ 0x2c - 800dfb8: 68fb ldr r3, [r7, #12] - 800dfba: 1acb subs r3, r1, r3 - 800dfbc: 1ad1 subs r1, r2, r3 - 800dfbe: 6b7a ldr r2, [r7, #52] @ 0x34 - 800dfc0: 6a3b ldr r3, [r7, #32] - 800dfc2: 9302 str r3, [sp, #8] - 800dfc4: 69bb ldr r3, [r7, #24] - 800dfc6: 9301 str r3, [sp, #4] - 800dfc8: 69fb ldr r3, [r7, #28] - 800dfca: 9300 str r3, [sp, #0] - 800dfcc: 6b3b ldr r3, [r7, #48] @ 0x30 - 800dfce: 6af8 ldr r0, [r7, #44] @ 0x2c - 800dfd0: f7ff fde0 bl 800db94 - 800dfd4: 62f8 str r0, [r7, #44] @ 0x2c - 800dfd6: e000 b.n 800dfda + 800dfda: 68bb ldr r3, [r7, #8] + 800dfdc: 1e5a subs r2, r3, #1 + 800dfde: 6af9 ldr r1, [r7, #44] @ 0x2c + 800dfe0: 68fb ldr r3, [r7, #12] + 800dfe2: 1acb subs r3, r1, r3 + 800dfe4: 1ad1 subs r1, r2, r3 + 800dfe6: 6b7a ldr r2, [r7, #52] @ 0x34 + 800dfe8: 6a3b ldr r3, [r7, #32] + 800dfea: 9302 str r3, [sp, #8] + 800dfec: 69bb ldr r3, [r7, #24] + 800dfee: 9301 str r3, [sp, #4] + 800dff0: 69fb ldr r3, [r7, #28] + 800dff2: 9300 str r3, [sp, #0] + 800dff4: 6b3b ldr r3, [r7, #48] @ 0x30 + 800dff6: 6af8 ldr r0, [r7, #44] @ 0x2c + 800dff8: f7ff fde0 bl 800dbbc + 800dffc: 62f8 str r0, [r7, #44] @ 0x2c + 800dffe: e000 b.n 800e002 continue; - 800dfd8: bf00 nop + 800e000: bf00 nop for (str = buf; *fmt || ((str - buf) >= size-1); fmt++) - 800dfda: 687b ldr r3, [r7, #4] - 800dfdc: 3301 adds r3, #1 - 800dfde: 607b str r3, [r7, #4] - 800dfe0: 687b ldr r3, [r7, #4] - 800dfe2: 781b ldrb r3, [r3, #0] - 800dfe4: 2b00 cmp r3, #0 - 800dfe6: f47f aed2 bne.w 800dd8e - 800dfea: 6afa ldr r2, [r7, #44] @ 0x2c - 800dfec: 68fb ldr r3, [r7, #12] - 800dfee: 1ad2 subs r2, r2, r3 - 800dff0: 68bb ldr r3, [r7, #8] - 800dff2: 3b01 subs r3, #1 - 800dff4: 429a cmp r2, r3 - 800dff6: f6bf aeca bge.w 800dd8e + 800e002: 687b ldr r3, [r7, #4] + 800e004: 3301 adds r3, #1 + 800e006: 607b str r3, [r7, #4] + 800e008: 687b ldr r3, [r7, #4] + 800e00a: 781b ldrb r3, [r3, #0] + 800e00c: 2b00 cmp r3, #0 + 800e00e: f47f aed2 bne.w 800ddb6 + 800e012: 6afa ldr r2, [r7, #44] @ 0x2c + 800e014: 68fb ldr r3, [r7, #12] + 800e016: 1ad2 subs r2, r2, r3 + 800e018: 68bb ldr r3, [r7, #8] + 800e01a: 3b01 subs r3, #1 + 800e01c: 429a cmp r2, r3 + 800e01e: f6bf aeca bge.w 800ddb6 } *str = '\0'; - 800dffa: 6afb ldr r3, [r7, #44] @ 0x2c - 800dffc: 2200 movs r2, #0 - 800dffe: 701a strb r2, [r3, #0] + 800e022: 6afb ldr r3, [r7, #44] @ 0x2c + 800e024: 2200 movs r2, #0 + 800e026: 701a strb r2, [r3, #0] return str - buf; - 800e000: 6afa ldr r2, [r7, #44] @ 0x2c - 800e002: 68fb ldr r3, [r7, #12] - 800e004: 1ad3 subs r3, r2, r3 + 800e028: 6afa ldr r2, [r7, #44] @ 0x2c + 800e02a: 68fb ldr r3, [r7, #12] + 800e02c: 1ad3 subs r3, r2, r3 } - 800e006: 4618 mov r0, r3 - 800e008: 3738 adds r7, #56 @ 0x38 - 800e00a: 46bd mov sp, r7 - 800e00c: bd80 pop {r7, pc} - 800e00e: bf00 nop - 800e010: 0801028c .word 0x0801028c + 800e02e: 4618 mov r0, r3 + 800e030: 3738 adds r7, #56 @ 0x38 + 800e032: 46bd mov sp, r7 + 800e034: bd80 pop {r7, pc} + 800e036: bf00 nop + 800e038: 080102b4 .word 0x080102b4 -0800e014 : +0800e03c : * That is the reason why many variables that are used only in that function are declared static. * Note: These variables could have been declared static in the function. * */ void UTIL_SEQ_Run( UTIL_SEQ_bm_t Mask_bm ) { - 800e014: b580 push {r7, lr} - 800e016: b090 sub sp, #64 @ 0x40 - 800e018: af00 add r7, sp, #0 - 800e01a: 6078 str r0, [r7, #4] + 800e03c: b580 push {r7, lr} + 800e03e: b090 sub sp, #64 @ 0x40 + 800e040: af00 add r7, sp, #0 + 800e042: 6078 str r0, [r7, #4] /* * When this function is nested, the mask to be applied cannot be larger than the first call * The mask is always getting smaller and smaller * A copy is made of the mask set by UTIL_SEQ_Run() in case it is called again in the task */ super_mask_backup = SuperMask; - 800e01c: 4b73 ldr r3, [pc, #460] @ (800e1ec ) - 800e01e: 681b ldr r3, [r3, #0] - 800e020: 62bb str r3, [r7, #40] @ 0x28 + 800e044: 4b73 ldr r3, [pc, #460] @ (800e214 ) + 800e046: 681b ldr r3, [r3, #0] + 800e048: 62bb str r3, [r7, #40] @ 0x28 SuperMask &= Mask_bm; - 800e022: 4b72 ldr r3, [pc, #456] @ (800e1ec ) - 800e024: 681a ldr r2, [r3, #0] - 800e026: 687b ldr r3, [r7, #4] - 800e028: 4013 ands r3, r2 - 800e02a: 4a70 ldr r2, [pc, #448] @ (800e1ec ) - 800e02c: 6013 str r3, [r2, #0] + 800e04a: 4b72 ldr r3, [pc, #456] @ (800e214 ) + 800e04c: 681a ldr r2, [r3, #0] + 800e04e: 687b ldr r3, [r7, #4] + 800e050: 4013 ands r3, r2 + 800e052: 4a70 ldr r2, [pc, #448] @ (800e214 ) + 800e054: 6013 str r3, [r2, #0] * TaskMask that comes from UTIL_SEQ_PauseTask() / UTIL_SEQ_ResumeTask * SuperMask that comes from UTIL_SEQ_Run * If the waited event is there, exit from UTIL_SEQ_Run() to return to the * waiting task */ local_taskset = TaskSet; - 800e02e: 4b70 ldr r3, [pc, #448] @ (800e1f0 ) - 800e030: 681b ldr r3, [r3, #0] - 800e032: 63bb str r3, [r7, #56] @ 0x38 + 800e056: 4b70 ldr r3, [pc, #448] @ (800e218 ) + 800e058: 681b ldr r3, [r3, #0] + 800e05a: 63bb str r3, [r7, #56] @ 0x38 local_evtset = EvtSet; - 800e034: 4b6f ldr r3, [pc, #444] @ (800e1f4 ) - 800e036: 681b ldr r3, [r3, #0] - 800e038: 637b str r3, [r7, #52] @ 0x34 + 800e05c: 4b6f ldr r3, [pc, #444] @ (800e21c ) + 800e05e: 681b ldr r3, [r3, #0] + 800e060: 637b str r3, [r7, #52] @ 0x34 local_taskmask = TaskMask; - 800e03a: 4b6f ldr r3, [pc, #444] @ (800e1f8 ) - 800e03c: 681b ldr r3, [r3, #0] - 800e03e: 633b str r3, [r7, #48] @ 0x30 + 800e062: 4b6f ldr r3, [pc, #444] @ (800e220 ) + 800e064: 681b ldr r3, [r3, #0] + 800e066: 633b str r3, [r7, #48] @ 0x30 local_evtwaited = EvtWaited; - 800e040: 4b6e ldr r3, [pc, #440] @ (800e1fc ) - 800e042: 681b ldr r3, [r3, #0] - 800e044: 62fb str r3, [r7, #44] @ 0x2c + 800e068: 4b6e ldr r3, [pc, #440] @ (800e224 ) + 800e06a: 681b ldr r3, [r3, #0] + 800e06c: 62fb str r3, [r7, #44] @ 0x2c while(((local_taskset & local_taskmask & SuperMask) != 0U) && ((local_evtset & local_evtwaited)==0U)) - 800e046: e08d b.n 800e164 + 800e06e: e08d b.n 800e18c { counter = 0U; - 800e048: 2300 movs r3, #0 - 800e04a: 63fb str r3, [r7, #60] @ 0x3c + 800e070: 2300 movs r3, #0 + 800e072: 63fb str r3, [r7, #60] @ 0x3c /* * When a flag is set, the associated bit is set in TaskPrio[counter].priority mask depending * on the priority parameter given from UTIL_SEQ_SetTask() * The while loop is looking for a flag set from the highest priority maskr to the lower */ while((TaskPrio[counter].priority & local_taskmask & SuperMask)== 0U) - 800e04c: e002 b.n 800e054 + 800e074: e002 b.n 800e07c { counter++; - 800e04e: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e050: 3301 adds r3, #1 - 800e052: 63fb str r3, [r7, #60] @ 0x3c + 800e076: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e078: 3301 adds r3, #1 + 800e07a: 63fb str r3, [r7, #60] @ 0x3c while((TaskPrio[counter].priority & local_taskmask & SuperMask)== 0U) - 800e054: 4a6a ldr r2, [pc, #424] @ (800e200 ) - 800e056: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e058: f852 2033 ldr.w r2, [r2, r3, lsl #3] - 800e05c: 6b3b ldr r3, [r7, #48] @ 0x30 - 800e05e: 401a ands r2, r3 - 800e060: 4b62 ldr r3, [pc, #392] @ (800e1ec ) - 800e062: 681b ldr r3, [r3, #0] - 800e064: 4013 ands r3, r2 - 800e066: 2b00 cmp r3, #0 - 800e068: d0f1 beq.n 800e04e + 800e07c: 4a6a ldr r2, [pc, #424] @ (800e228 ) + 800e07e: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e080: f852 2033 ldr.w r2, [r2, r3, lsl #3] + 800e084: 6b3b ldr r3, [r7, #48] @ 0x30 + 800e086: 401a ands r2, r3 + 800e088: 4b62 ldr r3, [pc, #392] @ (800e214 ) + 800e08a: 681b ldr r3, [r3, #0] + 800e08c: 4013 ands r3, r2 + 800e08e: 2b00 cmp r3, #0 + 800e090: d0f1 beq.n 800e076 } current_task_set = TaskPrio[counter].priority & local_taskmask & SuperMask; - 800e06a: 4a65 ldr r2, [pc, #404] @ (800e200 ) - 800e06c: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e06e: f852 2033 ldr.w r2, [r2, r3, lsl #3] - 800e072: 6b3b ldr r3, [r7, #48] @ 0x30 - 800e074: 401a ands r2, r3 - 800e076: 4b5d ldr r3, [pc, #372] @ (800e1ec ) - 800e078: 681b ldr r3, [r3, #0] - 800e07a: 4013 ands r3, r2 - 800e07c: 627b str r3, [r7, #36] @ 0x24 + 800e092: 4a65 ldr r2, [pc, #404] @ (800e228 ) + 800e094: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e096: f852 2033 ldr.w r2, [r2, r3, lsl #3] + 800e09a: 6b3b ldr r3, [r7, #48] @ 0x30 + 800e09c: 401a ands r2, r3 + 800e09e: 4b5d ldr r3, [pc, #372] @ (800e214 ) + 800e0a0: 681b ldr r3, [r3, #0] + 800e0a2: 4013 ands r3, r2 + 800e0a4: 627b str r3, [r7, #36] @ 0x24 * so that the second one can be executed. * Note that the first flag is not removed from the list of pending task but just masked by the round_robin mask * * In the check below, the round_robin mask is reinitialize in case all pending tasks haven been executed at least once */ if ((TaskPrio[counter].round_robin & current_task_set) == 0U) - 800e07e: 4a60 ldr r2, [pc, #384] @ (800e200 ) - 800e080: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e082: 00db lsls r3, r3, #3 - 800e084: 4413 add r3, r2 - 800e086: 685a ldr r2, [r3, #4] - 800e088: 6a7b ldr r3, [r7, #36] @ 0x24 - 800e08a: 4013 ands r3, r2 - 800e08c: 2b00 cmp r3, #0 - 800e08e: d106 bne.n 800e09e + 800e0a6: 4a60 ldr r2, [pc, #384] @ (800e228 ) + 800e0a8: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e0aa: 00db lsls r3, r3, #3 + 800e0ac: 4413 add r3, r2 + 800e0ae: 685a ldr r2, [r3, #4] + 800e0b0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800e0b2: 4013 ands r3, r2 + 800e0b4: 2b00 cmp r3, #0 + 800e0b6: d106 bne.n 800e0c6 { TaskPrio[counter].round_robin = UTIL_SEQ_ALL_BIT_SET; - 800e090: 4a5b ldr r2, [pc, #364] @ (800e200 ) - 800e092: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e094: 00db lsls r3, r3, #3 - 800e096: 4413 add r3, r2 - 800e098: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 800e09c: 605a str r2, [r3, #4] + 800e0b8: 4a5b ldr r2, [pc, #364] @ (800e228 ) + 800e0ba: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e0bc: 00db lsls r3, r3, #3 + 800e0be: 4413 add r3, r2 + 800e0c0: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 800e0c4: 605a str r2, [r3, #4] /* * Read the flag index of the task to be executed * Once the index is read, the associated task will be executed even though a higher priority stack is requested * before task execution. */ CurrentTaskIdx = (SEQ_BitPosition(current_task_set & TaskPrio[counter].round_robin)); - 800e09e: 4a58 ldr r2, [pc, #352] @ (800e200 ) - 800e0a0: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e0a2: 00db lsls r3, r3, #3 - 800e0a4: 4413 add r3, r2 - 800e0a6: 685a ldr r2, [r3, #4] - 800e0a8: 6a7b ldr r3, [r7, #36] @ 0x24 - 800e0aa: 4013 ands r3, r2 - 800e0ac: 4618 mov r0, r3 - 800e0ae: f000 f8b9 bl 800e224 - 800e0b2: 4603 mov r3, r0 - 800e0b4: 461a mov r2, r3 - 800e0b6: 4b53 ldr r3, [pc, #332] @ (800e204 ) - 800e0b8: 601a str r2, [r3, #0] + 800e0c6: 4a58 ldr r2, [pc, #352] @ (800e228 ) + 800e0c8: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e0ca: 00db lsls r3, r3, #3 + 800e0cc: 4413 add r3, r2 + 800e0ce: 685a ldr r2, [r3, #4] + 800e0d0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800e0d2: 4013 ands r3, r2 + 800e0d4: 4618 mov r0, r3 + 800e0d6: f000 f8b9 bl 800e24c + 800e0da: 4603 mov r3, r0 + 800e0dc: 461a mov r2, r3 + 800e0de: 4b53 ldr r3, [pc, #332] @ (800e22c ) + 800e0e0: 601a str r2, [r3, #0] /* * remove from the roun_robin mask the task that has been selected to be executed */ TaskPrio[counter].round_robin &= ~(1U << CurrentTaskIdx); - 800e0ba: 4a51 ldr r2, [pc, #324] @ (800e200 ) - 800e0bc: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e0be: 00db lsls r3, r3, #3 - 800e0c0: 4413 add r3, r2 - 800e0c2: 685a ldr r2, [r3, #4] - 800e0c4: 4b4f ldr r3, [pc, #316] @ (800e204 ) - 800e0c6: 681b ldr r3, [r3, #0] - 800e0c8: 2101 movs r1, #1 - 800e0ca: fa01 f303 lsl.w r3, r1, r3 - 800e0ce: 43db mvns r3, r3 - 800e0d0: 401a ands r2, r3 - 800e0d2: 494b ldr r1, [pc, #300] @ (800e200 ) - 800e0d4: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e0d6: 00db lsls r3, r3, #3 - 800e0d8: 440b add r3, r1 - 800e0da: 605a str r2, [r3, #4] + 800e0e2: 4a51 ldr r2, [pc, #324] @ (800e228 ) + 800e0e4: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e0e6: 00db lsls r3, r3, #3 + 800e0e8: 4413 add r3, r2 + 800e0ea: 685a ldr r2, [r3, #4] + 800e0ec: 4b4f ldr r3, [pc, #316] @ (800e22c ) + 800e0ee: 681b ldr r3, [r3, #0] + 800e0f0: 2101 movs r1, #1 + 800e0f2: fa01 f303 lsl.w r3, r1, r3 + 800e0f6: 43db mvns r3, r3 + 800e0f8: 401a ands r2, r3 + 800e0fa: 494b ldr r1, [pc, #300] @ (800e228 ) + 800e0fc: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e0fe: 00db lsls r3, r3, #3 + 800e100: 440b add r3, r1 + 800e102: 605a str r2, [r3, #4] __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800e0dc: f3ef 8310 mrs r3, PRIMASK - 800e0e0: 61bb str r3, [r7, #24] + 800e104: f3ef 8310 mrs r3, PRIMASK + 800e108: 61bb str r3, [r7, #24] return(result); - 800e0e2: 69bb ldr r3, [r7, #24] + 800e10a: 69bb ldr r3, [r7, #24] UTIL_SEQ_ENTER_CRITICAL_SECTION( ); - 800e0e4: 623b str r3, [r7, #32] + 800e10c: 623b str r3, [r7, #32] __ASM volatile ("cpsid i" : : : "memory"); - 800e0e6: b672 cpsid i + 800e10e: b672 cpsid i } - 800e0e8: bf00 nop + 800e110: bf00 nop /* remove from the list or pending task the one that has been selected to be executed */ TaskSet &= ~(1U << CurrentTaskIdx); - 800e0ea: 4b46 ldr r3, [pc, #280] @ (800e204 ) - 800e0ec: 681b ldr r3, [r3, #0] - 800e0ee: 2201 movs r2, #1 - 800e0f0: fa02 f303 lsl.w r3, r2, r3 - 800e0f4: 43da mvns r2, r3 - 800e0f6: 4b3e ldr r3, [pc, #248] @ (800e1f0 ) - 800e0f8: 681b ldr r3, [r3, #0] - 800e0fa: 4013 ands r3, r2 - 800e0fc: 4a3c ldr r2, [pc, #240] @ (800e1f0 ) - 800e0fe: 6013 str r3, [r2, #0] + 800e112: 4b46 ldr r3, [pc, #280] @ (800e22c ) + 800e114: 681b ldr r3, [r3, #0] + 800e116: 2201 movs r2, #1 + 800e118: fa02 f303 lsl.w r3, r2, r3 + 800e11c: 43da mvns r2, r3 + 800e11e: 4b3e ldr r3, [pc, #248] @ (800e218 ) + 800e120: 681b ldr r3, [r3, #0] + 800e122: 4013 ands r3, r2 + 800e124: 4a3c ldr r2, [pc, #240] @ (800e218 ) + 800e126: 6013 str r3, [r2, #0] /* remove from all priority mask the task that has been selected to be executed */ for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--) - 800e100: 2301 movs r3, #1 - 800e102: 63fb str r3, [r7, #60] @ 0x3c - 800e104: e013 b.n 800e12e + 800e128: 2301 movs r3, #1 + 800e12a: 63fb str r3, [r7, #60] @ 0x3c + 800e12c: e013 b.n 800e156 { TaskPrio[counter - 1U].priority &= ~(1U << CurrentTaskIdx); - 800e106: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e108: 3b01 subs r3, #1 - 800e10a: 4a3d ldr r2, [pc, #244] @ (800e200 ) - 800e10c: f852 1033 ldr.w r1, [r2, r3, lsl #3] - 800e110: 4b3c ldr r3, [pc, #240] @ (800e204 ) - 800e112: 681b ldr r3, [r3, #0] - 800e114: 2201 movs r2, #1 - 800e116: fa02 f303 lsl.w r3, r2, r3 - 800e11a: 43da mvns r2, r3 - 800e11c: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e11e: 3b01 subs r3, #1 - 800e120: 400a ands r2, r1 - 800e122: 4937 ldr r1, [pc, #220] @ (800e200 ) - 800e124: f841 2033 str.w r2, [r1, r3, lsl #3] - for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--) - 800e128: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e12a: 3b01 subs r3, #1 - 800e12c: 63fb str r3, [r7, #60] @ 0x3c 800e12e: 6bfb ldr r3, [r7, #60] @ 0x3c - 800e130: 2b00 cmp r3, #0 - 800e132: d1e8 bne.n 800e106 - 800e134: 6a3b ldr r3, [r7, #32] - 800e136: 617b str r3, [r7, #20] + 800e130: 3b01 subs r3, #1 + 800e132: 4a3d ldr r2, [pc, #244] @ (800e228 ) + 800e134: f852 1033 ldr.w r1, [r2, r3, lsl #3] + 800e138: 4b3c ldr r3, [pc, #240] @ (800e22c ) + 800e13a: 681b ldr r3, [r3, #0] + 800e13c: 2201 movs r2, #1 + 800e13e: fa02 f303 lsl.w r3, r2, r3 + 800e142: 43da mvns r2, r3 + 800e144: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e146: 3b01 subs r3, #1 + 800e148: 400a ands r2, r1 + 800e14a: 4937 ldr r1, [pc, #220] @ (800e228 ) + 800e14c: f841 2033 str.w r2, [r1, r3, lsl #3] + for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--) + 800e150: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e152: 3b01 subs r3, #1 + 800e154: 63fb str r3, [r7, #60] @ 0x3c + 800e156: 6bfb ldr r3, [r7, #60] @ 0x3c + 800e158: 2b00 cmp r3, #0 + 800e15a: d1e8 bne.n 800e12e + 800e15c: 6a3b ldr r3, [r7, #32] + 800e15e: 617b str r3, [r7, #20] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800e138: 697b ldr r3, [r7, #20] - 800e13a: f383 8810 msr PRIMASK, r3 + 800e160: 697b ldr r3, [r7, #20] + 800e162: f383 8810 msr PRIMASK, r3 } - 800e13e: bf00 nop + 800e166: bf00 nop } UTIL_SEQ_EXIT_CRITICAL_SECTION( ); /* Execute the task */ TaskCb[CurrentTaskIdx]( ); - 800e140: 4b30 ldr r3, [pc, #192] @ (800e204 ) - 800e142: 681b ldr r3, [r3, #0] - 800e144: 4a30 ldr r2, [pc, #192] @ (800e208 ) - 800e146: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 800e14a: 4798 blx r3 + 800e168: 4b30 ldr r3, [pc, #192] @ (800e22c ) + 800e16a: 681b ldr r3, [r3, #0] + 800e16c: 4a30 ldr r2, [pc, #192] @ (800e230 ) + 800e16e: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 800e172: 4798 blx r3 local_taskset = TaskSet; - 800e14c: 4b28 ldr r3, [pc, #160] @ (800e1f0 ) - 800e14e: 681b ldr r3, [r3, #0] - 800e150: 63bb str r3, [r7, #56] @ 0x38 + 800e174: 4b28 ldr r3, [pc, #160] @ (800e218 ) + 800e176: 681b ldr r3, [r3, #0] + 800e178: 63bb str r3, [r7, #56] @ 0x38 local_evtset = EvtSet; - 800e152: 4b28 ldr r3, [pc, #160] @ (800e1f4 ) - 800e154: 681b ldr r3, [r3, #0] - 800e156: 637b str r3, [r7, #52] @ 0x34 + 800e17a: 4b28 ldr r3, [pc, #160] @ (800e21c ) + 800e17c: 681b ldr r3, [r3, #0] + 800e17e: 637b str r3, [r7, #52] @ 0x34 local_taskmask = TaskMask; - 800e158: 4b27 ldr r3, [pc, #156] @ (800e1f8 ) - 800e15a: 681b ldr r3, [r3, #0] - 800e15c: 633b str r3, [r7, #48] @ 0x30 + 800e180: 4b27 ldr r3, [pc, #156] @ (800e220 ) + 800e182: 681b ldr r3, [r3, #0] + 800e184: 633b str r3, [r7, #48] @ 0x30 local_evtwaited = EvtWaited; - 800e15e: 4b27 ldr r3, [pc, #156] @ (800e1fc ) - 800e160: 681b ldr r3, [r3, #0] - 800e162: 62fb str r3, [r7, #44] @ 0x2c + 800e186: 4b27 ldr r3, [pc, #156] @ (800e224 ) + 800e188: 681b ldr r3, [r3, #0] + 800e18a: 62fb str r3, [r7, #44] @ 0x2c while(((local_taskset & local_taskmask & SuperMask) != 0U) && ((local_evtset & local_evtwaited)==0U)) - 800e164: 6bba ldr r2, [r7, #56] @ 0x38 - 800e166: 6b3b ldr r3, [r7, #48] @ 0x30 - 800e168: 401a ands r2, r3 - 800e16a: 4b20 ldr r3, [pc, #128] @ (800e1ec ) - 800e16c: 681b ldr r3, [r3, #0] - 800e16e: 4013 ands r3, r2 - 800e170: 2b00 cmp r3, #0 - 800e172: d005 beq.n 800e180 - 800e174: 6b7a ldr r2, [r7, #52] @ 0x34 - 800e176: 6afb ldr r3, [r7, #44] @ 0x2c - 800e178: 4013 ands r3, r2 - 800e17a: 2b00 cmp r3, #0 - 800e17c: f43f af64 beq.w 800e048 + 800e18c: 6bba ldr r2, [r7, #56] @ 0x38 + 800e18e: 6b3b ldr r3, [r7, #48] @ 0x30 + 800e190: 401a ands r2, r3 + 800e192: 4b20 ldr r3, [pc, #128] @ (800e214 ) + 800e194: 681b ldr r3, [r3, #0] + 800e196: 4013 ands r3, r2 + 800e198: 2b00 cmp r3, #0 + 800e19a: d005 beq.n 800e1a8 + 800e19c: 6b7a ldr r2, [r7, #52] @ 0x34 + 800e19e: 6afb ldr r3, [r7, #44] @ 0x2c + 800e1a0: 4013 ands r3, r2 + 800e1a2: 2b00 cmp r3, #0 + 800e1a4: f43f af64 beq.w 800e070 } /* the set of CurrentTaskIdx to no task running allows to call WaitEvt in the Pre/Post ilde context */ CurrentTaskIdx = UTIL_SEQ_NOTASKRUNNING; - 800e180: 4b20 ldr r3, [pc, #128] @ (800e204 ) - 800e182: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 800e186: 601a str r2, [r3, #0] + 800e1a8: 4b20 ldr r3, [pc, #128] @ (800e22c ) + 800e1aa: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 800e1ae: 601a str r2, [r3, #0] UTIL_SEQ_PreIdle( ); - 800e188: f000 f840 bl 800e20c + 800e1b0: f000 f840 bl 800e234 __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800e18c: f3ef 8310 mrs r3, PRIMASK - 800e190: 613b str r3, [r7, #16] + 800e1b4: f3ef 8310 mrs r3, PRIMASK + 800e1b8: 613b str r3, [r7, #16] return(result); - 800e192: 693b ldr r3, [r7, #16] + 800e1ba: 693b ldr r3, [r7, #16] UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE( ); - 800e194: 61fb str r3, [r7, #28] + 800e1bc: 61fb str r3, [r7, #28] __ASM volatile ("cpsid i" : : : "memory"); - 800e196: b672 cpsid i + 800e1be: b672 cpsid i } - 800e198: bf00 nop + 800e1c0: bf00 nop local_taskset = TaskSet; - 800e19a: 4b15 ldr r3, [pc, #84] @ (800e1f0 ) - 800e19c: 681b ldr r3, [r3, #0] - 800e19e: 63bb str r3, [r7, #56] @ 0x38 + 800e1c2: 4b15 ldr r3, [pc, #84] @ (800e218 ) + 800e1c4: 681b ldr r3, [r3, #0] + 800e1c6: 63bb str r3, [r7, #56] @ 0x38 local_evtset = EvtSet; - 800e1a0: 4b14 ldr r3, [pc, #80] @ (800e1f4 ) - 800e1a2: 681b ldr r3, [r3, #0] - 800e1a4: 637b str r3, [r7, #52] @ 0x34 + 800e1c8: 4b14 ldr r3, [pc, #80] @ (800e21c ) + 800e1ca: 681b ldr r3, [r3, #0] + 800e1cc: 637b str r3, [r7, #52] @ 0x34 local_taskmask = TaskMask; - 800e1a6: 4b14 ldr r3, [pc, #80] @ (800e1f8 ) - 800e1a8: 681b ldr r3, [r3, #0] - 800e1aa: 633b str r3, [r7, #48] @ 0x30 + 800e1ce: 4b14 ldr r3, [pc, #80] @ (800e220 ) + 800e1d0: 681b ldr r3, [r3, #0] + 800e1d2: 633b str r3, [r7, #48] @ 0x30 if ((local_taskset & local_taskmask & SuperMask) == 0U) - 800e1ac: 6bba ldr r2, [r7, #56] @ 0x38 - 800e1ae: 6b3b ldr r3, [r7, #48] @ 0x30 - 800e1b0: 401a ands r2, r3 - 800e1b2: 4b0e ldr r3, [pc, #56] @ (800e1ec ) - 800e1b4: 681b ldr r3, [r3, #0] - 800e1b6: 4013 ands r3, r2 - 800e1b8: 2b00 cmp r3, #0 - 800e1ba: d107 bne.n 800e1cc + 800e1d4: 6bba ldr r2, [r7, #56] @ 0x38 + 800e1d6: 6b3b ldr r3, [r7, #48] @ 0x30 + 800e1d8: 401a ands r2, r3 + 800e1da: 4b0e ldr r3, [pc, #56] @ (800e214 ) + 800e1dc: 681b ldr r3, [r3, #0] + 800e1de: 4013 ands r3, r2 + 800e1e0: 2b00 cmp r3, #0 + 800e1e2: d107 bne.n 800e1f4 { if ((local_evtset & EvtWaited)== 0U) - 800e1bc: 4b0f ldr r3, [pc, #60] @ (800e1fc ) - 800e1be: 681a ldr r2, [r3, #0] - 800e1c0: 6b7b ldr r3, [r7, #52] @ 0x34 - 800e1c2: 4013 ands r3, r2 - 800e1c4: 2b00 cmp r3, #0 - 800e1c6: d101 bne.n 800e1cc + 800e1e4: 4b0f ldr r3, [pc, #60] @ (800e224 ) + 800e1e6: 681a ldr r2, [r3, #0] + 800e1e8: 6b7b ldr r3, [r7, #52] @ 0x34 + 800e1ea: 4013 ands r3, r2 + 800e1ec: 2b00 cmp r3, #0 + 800e1ee: d101 bne.n 800e1f4 { UTIL_SEQ_Idle( ); - 800e1c8: f7f2 fce8 bl 8000b9c - 800e1cc: 69fb ldr r3, [r7, #28] - 800e1ce: 60fb str r3, [r7, #12] + 800e1f0: f7f2 fcd4 bl 8000b9c + 800e1f4: 69fb ldr r3, [r7, #28] + 800e1f6: 60fb str r3, [r7, #12] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800e1d0: 68fb ldr r3, [r7, #12] - 800e1d2: f383 8810 msr PRIMASK, r3 + 800e1f8: 68fb ldr r3, [r7, #12] + 800e1fa: f383 8810 msr PRIMASK, r3 } - 800e1d6: bf00 nop + 800e1fe: bf00 nop } } UTIL_SEQ_EXIT_CRITICAL_SECTION_IDLE( ); UTIL_SEQ_PostIdle( ); - 800e1d8: f000 f81e bl 800e218 + 800e200: f000 f81e bl 800e240 /* restore the mask from UTIL_SEQ_Run() */ SuperMask = super_mask_backup; - 800e1dc: 4a03 ldr r2, [pc, #12] @ (800e1ec ) - 800e1de: 6abb ldr r3, [r7, #40] @ 0x28 - 800e1e0: 6013 str r3, [r2, #0] + 800e204: 4a03 ldr r2, [pc, #12] @ (800e214 ) + 800e206: 6abb ldr r3, [r7, #40] @ 0x28 + 800e208: 6013 str r3, [r2, #0] return; - 800e1e2: bf00 nop + 800e20a: bf00 nop } - 800e1e4: 3740 adds r7, #64 @ 0x40 - 800e1e6: 46bd mov sp, r7 - 800e1e8: bd80 pop {r7, pc} - 800e1ea: bf00 nop - 800e1ec: 20000018 .word 0x20000018 - 800e1f0: 20000c14 .word 0x20000c14 - 800e1f4: 20000c18 .word 0x20000c18 - 800e1f8: 20000014 .word 0x20000014 - 800e1fc: 20000c1c .word 0x20000c1c - 800e200: 20000c28 .word 0x20000c28 - 800e204: 20000c20 .word 0x20000c20 - 800e208: 20000c24 .word 0x20000c24 + 800e20c: 3740 adds r7, #64 @ 0x40 + 800e20e: 46bd mov sp, r7 + 800e210: bd80 pop {r7, pc} + 800e212: bf00 nop + 800e214: 20000018 .word 0x20000018 + 800e218: 20000c4c .word 0x20000c4c + 800e21c: 20000c50 .word 0x20000c50 + 800e220: 20000014 .word 0x20000014 + 800e224: 20000c54 .word 0x20000c54 + 800e228: 20000c60 .word 0x20000c60 + 800e22c: 20000c58 .word 0x20000c58 + 800e230: 20000c5c .word 0x20000c5c -0800e20c : +0800e234 : { return; } __WEAK void UTIL_SEQ_PreIdle( void ) { - 800e20c: b480 push {r7} - 800e20e: af00 add r7, sp, #0 + 800e234: b480 push {r7} + 800e236: af00 add r7, sp, #0 /* * Unless specified by the application, there is nothing to be done */ return; - 800e210: bf00 nop + 800e238: bf00 nop } - 800e212: 46bd mov sp, r7 - 800e214: bc80 pop {r7} - 800e216: 4770 bx lr + 800e23a: 46bd mov sp, r7 + 800e23c: bc80 pop {r7} + 800e23e: 4770 bx lr -0800e218 : +0800e240 : __WEAK void UTIL_SEQ_PostIdle( void ) { - 800e218: b480 push {r7} - 800e21a: af00 add r7, sp, #0 + 800e240: b480 push {r7} + 800e242: af00 add r7, sp, #0 /* * Unless specified by the application, there is nothing to be done */ return; - 800e21c: bf00 nop + 800e244: bf00 nop } - 800e21e: 46bd mov sp, r7 - 800e220: bc80 pop {r7} - 800e222: 4770 bx lr + 800e246: 46bd mov sp, r7 + 800e248: bc80 pop {r7} + 800e24a: 4770 bx lr -0800e224 : +0800e24c : * @brief return the position of the first bit set to 1 * @param Value 32 bit value * @retval bit position */ uint8_t SEQ_BitPosition(uint32_t Value) { - 800e224: b480 push {r7} - 800e226: b085 sub sp, #20 - 800e228: af00 add r7, sp, #0 - 800e22a: 6078 str r0, [r7, #4] + 800e24c: b480 push {r7} + 800e24e: b085 sub sp, #20 + 800e250: af00 add r7, sp, #0 + 800e252: 6078 str r0, [r7, #4] uint8_t n = 0U; - 800e22c: 2300 movs r3, #0 - 800e22e: 73fb strb r3, [r7, #15] + 800e254: 2300 movs r3, #0 + 800e256: 73fb strb r3, [r7, #15] uint32_t lvalue = Value; - 800e230: 687b ldr r3, [r7, #4] - 800e232: 60bb str r3, [r7, #8] + 800e258: 687b ldr r3, [r7, #4] + 800e25a: 60bb str r3, [r7, #8] if ((lvalue & 0xFFFF0000U) == 0U) { n = 16U; lvalue <<= 16U; } - 800e234: 68bb ldr r3, [r7, #8] - 800e236: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 800e23a: d204 bcs.n 800e246 - 800e23c: 2310 movs r3, #16 - 800e23e: 73fb strb r3, [r7, #15] - 800e240: 68bb ldr r3, [r7, #8] - 800e242: 041b lsls r3, r3, #16 - 800e244: 60bb str r3, [r7, #8] - if ((lvalue & 0xFF000000U) == 0U) { n += 8U; lvalue <<= 8U; } - 800e246: 68bb ldr r3, [r7, #8] - 800e248: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 - 800e24c: d205 bcs.n 800e25a - 800e24e: 7bfb ldrb r3, [r7, #15] - 800e250: 3308 adds r3, #8 - 800e252: 73fb strb r3, [r7, #15] - 800e254: 68bb ldr r3, [r7, #8] - 800e256: 021b lsls r3, r3, #8 - 800e258: 60bb str r3, [r7, #8] - if ((lvalue & 0xF0000000U) == 0U) { n += 4U; lvalue <<= 4U; } - 800e25a: 68bb ldr r3, [r7, #8] - 800e25c: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000 - 800e260: d205 bcs.n 800e26e - 800e262: 7bfb ldrb r3, [r7, #15] - 800e264: 3304 adds r3, #4 + 800e25c: 68bb ldr r3, [r7, #8] + 800e25e: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 800e262: d204 bcs.n 800e26e + 800e264: 2310 movs r3, #16 800e266: 73fb strb r3, [r7, #15] 800e268: 68bb ldr r3, [r7, #8] - 800e26a: 011b lsls r3, r3, #4 + 800e26a: 041b lsls r3, r3, #16 800e26c: 60bb str r3, [r7, #8] + if ((lvalue & 0xFF000000U) == 0U) { n += 8U; lvalue <<= 8U; } + 800e26e: 68bb ldr r3, [r7, #8] + 800e270: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 + 800e274: d205 bcs.n 800e282 + 800e276: 7bfb ldrb r3, [r7, #15] + 800e278: 3308 adds r3, #8 + 800e27a: 73fb strb r3, [r7, #15] + 800e27c: 68bb ldr r3, [r7, #8] + 800e27e: 021b lsls r3, r3, #8 + 800e280: 60bb str r3, [r7, #8] + if ((lvalue & 0xF0000000U) == 0U) { n += 4U; lvalue <<= 4U; } + 800e282: 68bb ldr r3, [r7, #8] + 800e284: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000 + 800e288: d205 bcs.n 800e296 + 800e28a: 7bfb ldrb r3, [r7, #15] + 800e28c: 3304 adds r3, #4 + 800e28e: 73fb strb r3, [r7, #15] + 800e290: 68bb ldr r3, [r7, #8] + 800e292: 011b lsls r3, r3, #4 + 800e294: 60bb str r3, [r7, #8] n += SEQ_clz_table_4bit[lvalue >> (32-4)]; - 800e26e: 68bb ldr r3, [r7, #8] - 800e270: 0f1b lsrs r3, r3, #28 - 800e272: 4a07 ldr r2, [pc, #28] @ (800e290 ) - 800e274: 5cd2 ldrb r2, [r2, r3] - 800e276: 7bfb ldrb r3, [r7, #15] - 800e278: 4413 add r3, r2 - 800e27a: 73fb strb r3, [r7, #15] + 800e296: 68bb ldr r3, [r7, #8] + 800e298: 0f1b lsrs r3, r3, #28 + 800e29a: 4a07 ldr r2, [pc, #28] @ (800e2b8 ) + 800e29c: 5cd2 ldrb r2, [r2, r3] + 800e29e: 7bfb ldrb r3, [r7, #15] + 800e2a0: 4413 add r3, r2 + 800e2a2: 73fb strb r3, [r7, #15] return (uint8_t)(31U-n); - 800e27c: 7bfb ldrb r3, [r7, #15] - 800e27e: f1c3 031f rsb r3, r3, #31 - 800e282: b2db uxtb r3, r3 + 800e2a4: 7bfb ldrb r3, [r7, #15] + 800e2a6: f1c3 031f rsb r3, r3, #31 + 800e2aa: b2db uxtb r3, r3 } - 800e284: 4618 mov r0, r3 - 800e286: 3714 adds r7, #20 - 800e288: 46bd mov sp, r7 - 800e28a: bc80 pop {r7} - 800e28c: 4770 bx lr - 800e28e: bf00 nop - 800e290: 08010508 .word 0x08010508 + 800e2ac: 4618 mov r0, r3 + 800e2ae: 3714 adds r7, #20 + 800e2b0: 46bd mov sp, r7 + 800e2b2: bc80 pop {r7} + 800e2b4: 4770 bx lr + 800e2b6: bf00 nop + 800e2b8: 08010530 .word 0x08010530 -0800e294 : +0800e2bc : * @addtogroup TIMER_SERVER_exported_function * @{ */ UTIL_TIMER_Status_t UTIL_TIMER_Init(void) { - 800e294: b580 push {r7, lr} - 800e296: af00 add r7, sp, #0 + 800e2bc: b580 push {r7, lr} + 800e2be: af00 add r7, sp, #0 UTIL_TIMER_INIT_CRITICAL_SECTION(); TimerListHead = NULL; - 800e298: 4b04 ldr r3, [pc, #16] @ (800e2ac ) - 800e29a: 2200 movs r2, #0 - 800e29c: 601a str r2, [r3, #0] + 800e2c0: 4b04 ldr r3, [pc, #16] @ (800e2d4 ) + 800e2c2: 2200 movs r2, #0 + 800e2c4: 601a str r2, [r3, #0] return UTIL_TimerDriver.InitTimer(); - 800e29e: 4b04 ldr r3, [pc, #16] @ (800e2b0 ) - 800e2a0: 681b ldr r3, [r3, #0] - 800e2a2: 4798 blx r3 - 800e2a4: 4603 mov r3, r0 + 800e2c6: 4b04 ldr r3, [pc, #16] @ (800e2d8 ) + 800e2c8: 681b ldr r3, [r3, #0] + 800e2ca: 4798 blx r3 + 800e2cc: 4603 mov r3, r0 } - 800e2a6: 4618 mov r0, r3 - 800e2a8: bd80 pop {r7, pc} - 800e2aa: bf00 nop - 800e2ac: 20000c30 .word 0x20000c30 - 800e2b0: 0801034c .word 0x0801034c + 800e2ce: 4618 mov r0, r3 + 800e2d0: bd80 pop {r7, pc} + 800e2d2: bf00 nop + 800e2d4: 20000c68 .word 0x20000c68 + 800e2d8: 08010374 .word 0x08010374 -0800e2b4 : +0800e2dc : { return UTIL_TimerDriver.DeInitTimer(); } UTIL_TIMER_Status_t UTIL_TIMER_Create( UTIL_TIMER_Object_t *TimerObject, uint32_t PeriodValue, UTIL_TIMER_Mode_t Mode, void ( *Callback )( void *), void *Argument) { - 800e2b4: b580 push {r7, lr} - 800e2b6: b084 sub sp, #16 - 800e2b8: af00 add r7, sp, #0 - 800e2ba: 60f8 str r0, [r7, #12] - 800e2bc: 60b9 str r1, [r7, #8] - 800e2be: 603b str r3, [r7, #0] - 800e2c0: 4613 mov r3, r2 - 800e2c2: 71fb strb r3, [r7, #7] + 800e2dc: b580 push {r7, lr} + 800e2de: b084 sub sp, #16 + 800e2e0: af00 add r7, sp, #0 + 800e2e2: 60f8 str r0, [r7, #12] + 800e2e4: 60b9 str r1, [r7, #8] + 800e2e6: 603b str r3, [r7, #0] + 800e2e8: 4613 mov r3, r2 + 800e2ea: 71fb strb r3, [r7, #7] if((TimerObject != NULL) && (Callback != NULL)) - 800e2c4: 68fb ldr r3, [r7, #12] - 800e2c6: 2b00 cmp r3, #0 - 800e2c8: d023 beq.n 800e312 - 800e2ca: 683b ldr r3, [r7, #0] - 800e2cc: 2b00 cmp r3, #0 - 800e2ce: d020 beq.n 800e312 + 800e2ec: 68fb ldr r3, [r7, #12] + 800e2ee: 2b00 cmp r3, #0 + 800e2f0: d023 beq.n 800e33a + 800e2f2: 683b ldr r3, [r7, #0] + 800e2f4: 2b00 cmp r3, #0 + 800e2f6: d020 beq.n 800e33a { TimerObject->Timestamp = 0U; - 800e2d0: 68fb ldr r3, [r7, #12] - 800e2d2: 2200 movs r2, #0 - 800e2d4: 601a str r2, [r3, #0] + 800e2f8: 68fb ldr r3, [r7, #12] + 800e2fa: 2200 movs r2, #0 + 800e2fc: 601a str r2, [r3, #0] TimerObject->ReloadValue = UTIL_TimerDriver.ms2Tick(PeriodValue); - 800e2d6: 4b11 ldr r3, [pc, #68] @ (800e31c ) - 800e2d8: 6a5b ldr r3, [r3, #36] @ 0x24 - 800e2da: 68b8 ldr r0, [r7, #8] - 800e2dc: 4798 blx r3 - 800e2de: 4602 mov r2, r0 - 800e2e0: 68fb ldr r3, [r7, #12] - 800e2e2: 605a str r2, [r3, #4] - TimerObject->IsPending = 0U; - 800e2e4: 68fb ldr r3, [r7, #12] - 800e2e6: 2200 movs r2, #0 - 800e2e8: 721a strb r2, [r3, #8] - TimerObject->IsRunning = 0U; - 800e2ea: 68fb ldr r3, [r7, #12] - 800e2ec: 2200 movs r2, #0 - 800e2ee: 725a strb r2, [r3, #9] - TimerObject->IsReloadStopped = 0U; - 800e2f0: 68fb ldr r3, [r7, #12] - 800e2f2: 2200 movs r2, #0 - 800e2f4: 729a strb r2, [r3, #10] - TimerObject->Callback = Callback; - 800e2f6: 68fb ldr r3, [r7, #12] - 800e2f8: 683a ldr r2, [r7, #0] - 800e2fa: 60da str r2, [r3, #12] - TimerObject->argument = Argument; - 800e2fc: 68fb ldr r3, [r7, #12] - 800e2fe: 69ba ldr r2, [r7, #24] - 800e300: 611a str r2, [r3, #16] - TimerObject->Mode = Mode; - 800e302: 68fb ldr r3, [r7, #12] - 800e304: 79fa ldrb r2, [r7, #7] - 800e306: 72da strb r2, [r3, #11] - TimerObject->Next = NULL; + 800e2fe: 4b11 ldr r3, [pc, #68] @ (800e344 ) + 800e300: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e302: 68b8 ldr r0, [r7, #8] + 800e304: 4798 blx r3 + 800e306: 4602 mov r2, r0 800e308: 68fb ldr r3, [r7, #12] - 800e30a: 2200 movs r2, #0 - 800e30c: 615a str r2, [r3, #20] + 800e30a: 605a str r2, [r3, #4] + TimerObject->IsPending = 0U; + 800e30c: 68fb ldr r3, [r7, #12] + 800e30e: 2200 movs r2, #0 + 800e310: 721a strb r2, [r3, #8] + TimerObject->IsRunning = 0U; + 800e312: 68fb ldr r3, [r7, #12] + 800e314: 2200 movs r2, #0 + 800e316: 725a strb r2, [r3, #9] + TimerObject->IsReloadStopped = 0U; + 800e318: 68fb ldr r3, [r7, #12] + 800e31a: 2200 movs r2, #0 + 800e31c: 729a strb r2, [r3, #10] + TimerObject->Callback = Callback; + 800e31e: 68fb ldr r3, [r7, #12] + 800e320: 683a ldr r2, [r7, #0] + 800e322: 60da str r2, [r3, #12] + TimerObject->argument = Argument; + 800e324: 68fb ldr r3, [r7, #12] + 800e326: 69ba ldr r2, [r7, #24] + 800e328: 611a str r2, [r3, #16] + TimerObject->Mode = Mode; + 800e32a: 68fb ldr r3, [r7, #12] + 800e32c: 79fa ldrb r2, [r7, #7] + 800e32e: 72da strb r2, [r3, #11] + TimerObject->Next = NULL; + 800e330: 68fb ldr r3, [r7, #12] + 800e332: 2200 movs r2, #0 + 800e334: 615a str r2, [r3, #20] return UTIL_TIMER_OK; - 800e30e: 2300 movs r3, #0 - 800e310: e000 b.n 800e314 + 800e336: 2300 movs r3, #0 + 800e338: e000 b.n 800e33c } else { return UTIL_TIMER_INVALID_PARAM; - 800e312: 2301 movs r3, #1 + 800e33a: 2301 movs r3, #1 } } - 800e314: 4618 mov r0, r3 - 800e316: 3710 adds r7, #16 - 800e318: 46bd mov sp, r7 - 800e31a: bd80 pop {r7, pc} - 800e31c: 0801034c .word 0x0801034c + 800e33c: 4618 mov r0, r3 + 800e33e: 3710 adds r7, #16 + 800e340: 46bd mov sp, r7 + 800e342: bd80 pop {r7, pc} + 800e344: 08010374 .word 0x08010374 -0800e320 : +0800e348 : UTIL_TIMER_Status_t UTIL_TIMER_Start( UTIL_TIMER_Object_t *TimerObject) { - 800e320: b580 push {r7, lr} - 800e322: b08a sub sp, #40 @ 0x28 - 800e324: af00 add r7, sp, #0 - 800e326: 6078 str r0, [r7, #4] + 800e348: b580 push {r7, lr} + 800e34a: b08a sub sp, #40 @ 0x28 + 800e34c: af00 add r7, sp, #0 + 800e34e: 6078 str r0, [r7, #4] UTIL_TIMER_Status_t ret = UTIL_TIMER_OK; - 800e328: 2300 movs r3, #0 - 800e32a: f887 3027 strb.w r3, [r7, #39] @ 0x27 + 800e350: 2300 movs r3, #0 + 800e352: f887 3027 strb.w r3, [r7, #39] @ 0x27 uint32_t elapsedTime; uint32_t minValue; uint32_t ticks; if(( TimerObject != NULL ) && ( TimerExists( TimerObject ) == false ) && (TimerObject->IsRunning == 0U)) - 800e32e: 687b ldr r3, [r7, #4] - 800e330: 2b00 cmp r3, #0 - 800e332: d056 beq.n 800e3e2 - 800e334: 6878 ldr r0, [r7, #4] - 800e336: f000 f9a9 bl 800e68c - 800e33a: 4603 mov r3, r0 - 800e33c: f083 0301 eor.w r3, r3, #1 - 800e340: b2db uxtb r3, r3 - 800e342: 2b00 cmp r3, #0 - 800e344: d04d beq.n 800e3e2 - 800e346: 687b ldr r3, [r7, #4] - 800e348: 7a5b ldrb r3, [r3, #9] - 800e34a: 2b00 cmp r3, #0 - 800e34c: d149 bne.n 800e3e2 + 800e356: 687b ldr r3, [r7, #4] + 800e358: 2b00 cmp r3, #0 + 800e35a: d056 beq.n 800e40a + 800e35c: 6878 ldr r0, [r7, #4] + 800e35e: f000 f9a9 bl 800e6b4 + 800e362: 4603 mov r3, r0 + 800e364: f083 0301 eor.w r3, r3, #1 + 800e368: b2db uxtb r3, r3 + 800e36a: 2b00 cmp r3, #0 + 800e36c: d04d beq.n 800e40a + 800e36e: 687b ldr r3, [r7, #4] + 800e370: 7a5b ldrb r3, [r3, #9] + 800e372: 2b00 cmp r3, #0 + 800e374: d149 bne.n 800e40a __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800e34e: f3ef 8310 mrs r3, PRIMASK - 800e352: 613b str r3, [r7, #16] + 800e376: f3ef 8310 mrs r3, PRIMASK + 800e37a: 613b str r3, [r7, #16] return(result); - 800e354: 693b ldr r3, [r7, #16] + 800e37c: 693b ldr r3, [r7, #16] { UTIL_TIMER_ENTER_CRITICAL_SECTION(); - 800e356: 61fb str r3, [r7, #28] + 800e37e: 61fb str r3, [r7, #28] __ASM volatile ("cpsid i" : : : "memory"); - 800e358: b672 cpsid i + 800e380: b672 cpsid i } - 800e35a: bf00 nop + 800e382: bf00 nop ticks = TimerObject->ReloadValue; - 800e35c: 687b ldr r3, [r7, #4] - 800e35e: 685b ldr r3, [r3, #4] - 800e360: 623b str r3, [r7, #32] + 800e384: 687b ldr r3, [r7, #4] + 800e386: 685b ldr r3, [r3, #4] + 800e388: 623b str r3, [r7, #32] minValue = UTIL_TimerDriver.GetMinimumTimeout( ); - 800e362: 4b24 ldr r3, [pc, #144] @ (800e3f4 ) - 800e364: 6a1b ldr r3, [r3, #32] - 800e366: 4798 blx r3 - 800e368: 61b8 str r0, [r7, #24] + 800e38a: 4b24 ldr r3, [pc, #144] @ (800e41c ) + 800e38c: 6a1b ldr r3, [r3, #32] + 800e38e: 4798 blx r3 + 800e390: 61b8 str r0, [r7, #24] if( ticks < minValue ) - 800e36a: 6a3a ldr r2, [r7, #32] - 800e36c: 69bb ldr r3, [r7, #24] - 800e36e: 429a cmp r2, r3 - 800e370: d201 bcs.n 800e376 + 800e392: 6a3a ldr r2, [r7, #32] + 800e394: 69bb ldr r3, [r7, #24] + 800e396: 429a cmp r2, r3 + 800e398: d201 bcs.n 800e39e { ticks = minValue; - 800e372: 69bb ldr r3, [r7, #24] - 800e374: 623b str r3, [r7, #32] + 800e39a: 69bb ldr r3, [r7, #24] + 800e39c: 623b str r3, [r7, #32] } TimerObject->Timestamp = ticks; - 800e376: 687b ldr r3, [r7, #4] - 800e378: 6a3a ldr r2, [r7, #32] - 800e37a: 601a str r2, [r3, #0] + 800e39e: 687b ldr r3, [r7, #4] + 800e3a0: 6a3a ldr r2, [r7, #32] + 800e3a2: 601a str r2, [r3, #0] TimerObject->IsPending = 0U; - 800e37c: 687b ldr r3, [r7, #4] - 800e37e: 2200 movs r2, #0 - 800e380: 721a strb r2, [r3, #8] + 800e3a4: 687b ldr r3, [r7, #4] + 800e3a6: 2200 movs r2, #0 + 800e3a8: 721a strb r2, [r3, #8] TimerObject->IsRunning = 1U; - 800e382: 687b ldr r3, [r7, #4] - 800e384: 2201 movs r2, #1 - 800e386: 725a strb r2, [r3, #9] + 800e3aa: 687b ldr r3, [r7, #4] + 800e3ac: 2201 movs r2, #1 + 800e3ae: 725a strb r2, [r3, #9] TimerObject->IsReloadStopped = 0U; - 800e388: 687b ldr r3, [r7, #4] - 800e38a: 2200 movs r2, #0 - 800e38c: 729a strb r2, [r3, #10] + 800e3b0: 687b ldr r3, [r7, #4] + 800e3b2: 2200 movs r2, #0 + 800e3b4: 729a strb r2, [r3, #10] if( TimerListHead == NULL ) - 800e38e: 4b1a ldr r3, [pc, #104] @ (800e3f8 ) - 800e390: 681b ldr r3, [r3, #0] - 800e392: 2b00 cmp r3, #0 - 800e394: d106 bne.n 800e3a4 + 800e3b6: 4b1a ldr r3, [pc, #104] @ (800e420 ) + 800e3b8: 681b ldr r3, [r3, #0] + 800e3ba: 2b00 cmp r3, #0 + 800e3bc: d106 bne.n 800e3cc { UTIL_TimerDriver.SetTimerContext(); - 800e396: 4b17 ldr r3, [pc, #92] @ (800e3f4 ) - 800e398: 691b ldr r3, [r3, #16] - 800e39a: 4798 blx r3 + 800e3be: 4b17 ldr r3, [pc, #92] @ (800e41c ) + 800e3c0: 691b ldr r3, [r3, #16] + 800e3c2: 4798 blx r3 TimerInsertNewHeadTimer( TimerObject ); /* insert a timeout at now+obj->Timestamp */ - 800e39c: 6878 ldr r0, [r7, #4] - 800e39e: f000 f9eb bl 800e778 - 800e3a2: e017 b.n 800e3d4 + 800e3c4: 6878 ldr r0, [r7, #4] + 800e3c6: f000 f9eb bl 800e7a0 + 800e3ca: e017 b.n 800e3fc } else { elapsedTime = UTIL_TimerDriver.GetTimerElapsedTime( ); - 800e3a4: 4b13 ldr r3, [pc, #76] @ (800e3f4 ) - 800e3a6: 699b ldr r3, [r3, #24] - 800e3a8: 4798 blx r3 - 800e3aa: 6178 str r0, [r7, #20] + 800e3cc: 4b13 ldr r3, [pc, #76] @ (800e41c ) + 800e3ce: 699b ldr r3, [r3, #24] + 800e3d0: 4798 blx r3 + 800e3d2: 6178 str r0, [r7, #20] TimerObject->Timestamp += elapsedTime; - 800e3ac: 687b ldr r3, [r7, #4] - 800e3ae: 681a ldr r2, [r3, #0] - 800e3b0: 697b ldr r3, [r7, #20] - 800e3b2: 441a add r2, r3 - 800e3b4: 687b ldr r3, [r7, #4] - 800e3b6: 601a str r2, [r3, #0] + 800e3d4: 687b ldr r3, [r7, #4] + 800e3d6: 681a ldr r2, [r3, #0] + 800e3d8: 697b ldr r3, [r7, #20] + 800e3da: 441a add r2, r3 + 800e3dc: 687b ldr r3, [r7, #4] + 800e3de: 601a str r2, [r3, #0] if( TimerObject->Timestamp < TimerListHead->Timestamp ) - 800e3b8: 687b ldr r3, [r7, #4] - 800e3ba: 681a ldr r2, [r3, #0] - 800e3bc: 4b0e ldr r3, [pc, #56] @ (800e3f8 ) - 800e3be: 681b ldr r3, [r3, #0] - 800e3c0: 681b ldr r3, [r3, #0] - 800e3c2: 429a cmp r2, r3 - 800e3c4: d203 bcs.n 800e3ce + 800e3e0: 687b ldr r3, [r7, #4] + 800e3e2: 681a ldr r2, [r3, #0] + 800e3e4: 4b0e ldr r3, [pc, #56] @ (800e420 ) + 800e3e6: 681b ldr r3, [r3, #0] + 800e3e8: 681b ldr r3, [r3, #0] + 800e3ea: 429a cmp r2, r3 + 800e3ec: d203 bcs.n 800e3f6 { TimerInsertNewHeadTimer( TimerObject); - 800e3c6: 6878 ldr r0, [r7, #4] - 800e3c8: f000 f9d6 bl 800e778 - 800e3cc: e002 b.n 800e3d4 + 800e3ee: 6878 ldr r0, [r7, #4] + 800e3f0: f000 f9d6 bl 800e7a0 + 800e3f4: e002 b.n 800e3fc } else { TimerInsertTimer( TimerObject); - 800e3ce: 6878 ldr r0, [r7, #4] - 800e3d0: f000 f9a2 bl 800e718 - 800e3d4: 69fb ldr r3, [r7, #28] - 800e3d6: 60fb str r3, [r7, #12] + 800e3f6: 6878 ldr r0, [r7, #4] + 800e3f8: f000 f9a2 bl 800e740 + 800e3fc: 69fb ldr r3, [r7, #28] + 800e3fe: 60fb str r3, [r7, #12] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800e3d8: 68fb ldr r3, [r7, #12] - 800e3da: f383 8810 msr PRIMASK, r3 + 800e400: 68fb ldr r3, [r7, #12] + 800e402: f383 8810 msr PRIMASK, r3 } - 800e3de: bf00 nop + 800e406: bf00 nop { - 800e3e0: e002 b.n 800e3e8 + 800e408: e002 b.n 800e410 } UTIL_TIMER_EXIT_CRITICAL_SECTION(); } else { ret = UTIL_TIMER_INVALID_PARAM; - 800e3e2: 2301 movs r3, #1 - 800e3e4: f887 3027 strb.w r3, [r7, #39] @ 0x27 + 800e40a: 2301 movs r3, #1 + 800e40c: f887 3027 strb.w r3, [r7, #39] @ 0x27 } return ret; - 800e3e8: f897 3027 ldrb.w r3, [r7, #39] @ 0x27 + 800e410: f897 3027 ldrb.w r3, [r7, #39] @ 0x27 } - 800e3ec: 4618 mov r0, r3 - 800e3ee: 3728 adds r7, #40 @ 0x28 - 800e3f0: 46bd mov sp, r7 - 800e3f2: bd80 pop {r7, pc} - 800e3f4: 0801034c .word 0x0801034c - 800e3f8: 20000c30 .word 0x20000c30 + 800e414: 4618 mov r0, r3 + 800e416: 3728 adds r7, #40 @ 0x28 + 800e418: 46bd mov sp, r7 + 800e41a: bd80 pop {r7, pc} + 800e41c: 08010374 .word 0x08010374 + 800e420: 20000c68 .word 0x20000c68 -0800e3fc : +0800e424 : } return ret; } UTIL_TIMER_Status_t UTIL_TIMER_Stop( UTIL_TIMER_Object_t *TimerObject ) { - 800e3fc: b580 push {r7, lr} - 800e3fe: b088 sub sp, #32 - 800e400: af00 add r7, sp, #0 - 800e402: 6078 str r0, [r7, #4] + 800e424: b580 push {r7, lr} + 800e426: b088 sub sp, #32 + 800e428: af00 add r7, sp, #0 + 800e42a: 6078 str r0, [r7, #4] UTIL_TIMER_Status_t ret = UTIL_TIMER_OK; - 800e404: 2300 movs r3, #0 - 800e406: 77fb strb r3, [r7, #31] + 800e42c: 2300 movs r3, #0 + 800e42e: 77fb strb r3, [r7, #31] if (NULL != TimerObject) - 800e408: 687b ldr r3, [r7, #4] - 800e40a: 2b00 cmp r3, #0 - 800e40c: d05b beq.n 800e4c6 + 800e430: 687b ldr r3, [r7, #4] + 800e432: 2b00 cmp r3, #0 + 800e434: d05b beq.n 800e4ee __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800e40e: f3ef 8310 mrs r3, PRIMASK - 800e412: 60fb str r3, [r7, #12] + 800e436: f3ef 8310 mrs r3, PRIMASK + 800e43a: 60fb str r3, [r7, #12] return(result); - 800e414: 68fb ldr r3, [r7, #12] + 800e43c: 68fb ldr r3, [r7, #12] { UTIL_TIMER_ENTER_CRITICAL_SECTION(); - 800e416: 613b str r3, [r7, #16] + 800e43e: 613b str r3, [r7, #16] __ASM volatile ("cpsid i" : : : "memory"); - 800e418: b672 cpsid i + 800e440: b672 cpsid i } - 800e41a: bf00 nop + 800e442: bf00 nop UTIL_TIMER_Object_t* prev = TimerListHead; - 800e41c: 4b2d ldr r3, [pc, #180] @ (800e4d4 ) - 800e41e: 681b ldr r3, [r3, #0] - 800e420: 61bb str r3, [r7, #24] + 800e444: 4b2d ldr r3, [pc, #180] @ (800e4fc ) + 800e446: 681b ldr r3, [r3, #0] + 800e448: 61bb str r3, [r7, #24] UTIL_TIMER_Object_t* cur = TimerListHead; - 800e422: 4b2c ldr r3, [pc, #176] @ (800e4d4 ) - 800e424: 681b ldr r3, [r3, #0] - 800e426: 617b str r3, [r7, #20] + 800e44a: 4b2c ldr r3, [pc, #176] @ (800e4fc ) + 800e44c: 681b ldr r3, [r3, #0] + 800e44e: 617b str r3, [r7, #20] TimerObject->IsReloadStopped = 1U; - 800e428: 687b ldr r3, [r7, #4] - 800e42a: 2201 movs r2, #1 - 800e42c: 729a strb r2, [r3, #10] + 800e450: 687b ldr r3, [r7, #4] + 800e452: 2201 movs r2, #1 + 800e454: 729a strb r2, [r3, #10] /* List is empty or the Obj to stop does not exist */ if(NULL != TimerListHead) - 800e42e: 4b29 ldr r3, [pc, #164] @ (800e4d4 ) - 800e430: 681b ldr r3, [r3, #0] - 800e432: 2b00 cmp r3, #0 - 800e434: d041 beq.n 800e4ba + 800e456: 4b29 ldr r3, [pc, #164] @ (800e4fc ) + 800e458: 681b ldr r3, [r3, #0] + 800e45a: 2b00 cmp r3, #0 + 800e45c: d041 beq.n 800e4e2 { TimerObject->IsRunning = 0U; - 800e436: 687b ldr r3, [r7, #4] - 800e438: 2200 movs r2, #0 - 800e43a: 725a strb r2, [r3, #9] + 800e45e: 687b ldr r3, [r7, #4] + 800e460: 2200 movs r2, #0 + 800e462: 725a strb r2, [r3, #9] if( TimerListHead == TimerObject ) /* Stop the Head */ - 800e43c: 4b25 ldr r3, [pc, #148] @ (800e4d4 ) - 800e43e: 681b ldr r3, [r3, #0] - 800e440: 687a ldr r2, [r7, #4] - 800e442: 429a cmp r2, r3 - 800e444: d134 bne.n 800e4b0 + 800e464: 4b25 ldr r3, [pc, #148] @ (800e4fc ) + 800e466: 681b ldr r3, [r3, #0] + 800e468: 687a ldr r2, [r7, #4] + 800e46a: 429a cmp r2, r3 + 800e46c: d134 bne.n 800e4d8 { TimerListHead->IsPending = 0; - 800e446: 4b23 ldr r3, [pc, #140] @ (800e4d4 ) - 800e448: 681b ldr r3, [r3, #0] - 800e44a: 2200 movs r2, #0 - 800e44c: 721a strb r2, [r3, #8] + 800e46e: 4b23 ldr r3, [pc, #140] @ (800e4fc ) + 800e470: 681b ldr r3, [r3, #0] + 800e472: 2200 movs r2, #0 + 800e474: 721a strb r2, [r3, #8] if( TimerListHead->Next != NULL ) - 800e44e: 4b21 ldr r3, [pc, #132] @ (800e4d4 ) - 800e450: 681b ldr r3, [r3, #0] - 800e452: 695b ldr r3, [r3, #20] - 800e454: 2b00 cmp r3, #0 - 800e456: d00a beq.n 800e46e + 800e476: 4b21 ldr r3, [pc, #132] @ (800e4fc ) + 800e478: 681b ldr r3, [r3, #0] + 800e47a: 695b ldr r3, [r3, #20] + 800e47c: 2b00 cmp r3, #0 + 800e47e: d00a beq.n 800e496 { TimerListHead = TimerListHead->Next; - 800e458: 4b1e ldr r3, [pc, #120] @ (800e4d4 ) - 800e45a: 681b ldr r3, [r3, #0] - 800e45c: 695b ldr r3, [r3, #20] - 800e45e: 4a1d ldr r2, [pc, #116] @ (800e4d4 ) - 800e460: 6013 str r3, [r2, #0] + 800e480: 4b1e ldr r3, [pc, #120] @ (800e4fc ) + 800e482: 681b ldr r3, [r3, #0] + 800e484: 695b ldr r3, [r3, #20] + 800e486: 4a1d ldr r2, [pc, #116] @ (800e4fc ) + 800e488: 6013 str r3, [r2, #0] TimerSetTimeout( TimerListHead ); - 800e462: 4b1c ldr r3, [pc, #112] @ (800e4d4 ) - 800e464: 681b ldr r3, [r3, #0] - 800e466: 4618 mov r0, r3 - 800e468: f000 f92c bl 800e6c4 - 800e46c: e023 b.n 800e4b6 + 800e48a: 4b1c ldr r3, [pc, #112] @ (800e4fc ) + 800e48c: 681b ldr r3, [r3, #0] + 800e48e: 4618 mov r0, r3 + 800e490: f000 f92c bl 800e6ec + 800e494: e023 b.n 800e4de } else { UTIL_TimerDriver.StopTimerEvt( ); - 800e46e: 4b1a ldr r3, [pc, #104] @ (800e4d8 ) - 800e470: 68db ldr r3, [r3, #12] - 800e472: 4798 blx r3 + 800e496: 4b1a ldr r3, [pc, #104] @ (800e500 ) + 800e498: 68db ldr r3, [r3, #12] + 800e49a: 4798 blx r3 TimerListHead = NULL; - 800e474: 4b17 ldr r3, [pc, #92] @ (800e4d4 ) - 800e476: 2200 movs r2, #0 - 800e478: 601a str r2, [r3, #0] - 800e47a: e01c b.n 800e4b6 + 800e49c: 4b17 ldr r3, [pc, #92] @ (800e4fc ) + 800e49e: 2200 movs r2, #0 + 800e4a0: 601a str r2, [r3, #0] + 800e4a2: e01c b.n 800e4de } else /* Stop an object within the list */ { while( cur != NULL ) { if( cur == TimerObject ) - 800e47c: 697a ldr r2, [r7, #20] - 800e47e: 687b ldr r3, [r7, #4] - 800e480: 429a cmp r2, r3 - 800e482: d110 bne.n 800e4a6 + 800e4a4: 697a ldr r2, [r7, #20] + 800e4a6: 687b ldr r3, [r7, #4] + 800e4a8: 429a cmp r2, r3 + 800e4aa: d110 bne.n 800e4ce { if( cur->Next != NULL ) - 800e484: 697b ldr r3, [r7, #20] - 800e486: 695b ldr r3, [r3, #20] - 800e488: 2b00 cmp r3, #0 - 800e48a: d006 beq.n 800e49a + 800e4ac: 697b ldr r3, [r7, #20] + 800e4ae: 695b ldr r3, [r3, #20] + 800e4b0: 2b00 cmp r3, #0 + 800e4b2: d006 beq.n 800e4c2 { cur = cur->Next; - 800e48c: 697b ldr r3, [r7, #20] - 800e48e: 695b ldr r3, [r3, #20] - 800e490: 617b str r3, [r7, #20] + 800e4b4: 697b ldr r3, [r7, #20] + 800e4b6: 695b ldr r3, [r3, #20] + 800e4b8: 617b str r3, [r7, #20] prev->Next = cur; - 800e492: 69bb ldr r3, [r7, #24] - 800e494: 697a ldr r2, [r7, #20] - 800e496: 615a str r2, [r3, #20] + 800e4ba: 69bb ldr r3, [r7, #24] + 800e4bc: 697a ldr r2, [r7, #20] + 800e4be: 615a str r2, [r3, #20] else { cur = NULL; prev->Next = cur; } break; - 800e498: e00d b.n 800e4b6 + 800e4c0: e00d b.n 800e4de cur = NULL; - 800e49a: 2300 movs r3, #0 - 800e49c: 617b str r3, [r7, #20] + 800e4c2: 2300 movs r3, #0 + 800e4c4: 617b str r3, [r7, #20] prev->Next = cur; - 800e49e: 69bb ldr r3, [r7, #24] - 800e4a0: 697a ldr r2, [r7, #20] - 800e4a2: 615a str r2, [r3, #20] + 800e4c6: 69bb ldr r3, [r7, #24] + 800e4c8: 697a ldr r2, [r7, #20] + 800e4ca: 615a str r2, [r3, #20] break; - 800e4a4: e007 b.n 800e4b6 + 800e4cc: e007 b.n 800e4de } else { prev = cur; - 800e4a6: 697b ldr r3, [r7, #20] - 800e4a8: 61bb str r3, [r7, #24] + 800e4ce: 697b ldr r3, [r7, #20] + 800e4d0: 61bb str r3, [r7, #24] cur = cur->Next; - 800e4aa: 697b ldr r3, [r7, #20] - 800e4ac: 695b ldr r3, [r3, #20] - 800e4ae: 617b str r3, [r7, #20] + 800e4d2: 697b ldr r3, [r7, #20] + 800e4d4: 695b ldr r3, [r3, #20] + 800e4d6: 617b str r3, [r7, #20] while( cur != NULL ) - 800e4b0: 697b ldr r3, [r7, #20] - 800e4b2: 2b00 cmp r3, #0 - 800e4b4: d1e2 bne.n 800e47c + 800e4d8: 697b ldr r3, [r7, #20] + 800e4da: 2b00 cmp r3, #0 + 800e4dc: d1e2 bne.n 800e4a4 } } } ret = UTIL_TIMER_OK; - 800e4b6: 2300 movs r3, #0 - 800e4b8: 77fb strb r3, [r7, #31] - 800e4ba: 693b ldr r3, [r7, #16] - 800e4bc: 60bb str r3, [r7, #8] + 800e4de: 2300 movs r3, #0 + 800e4e0: 77fb strb r3, [r7, #31] + 800e4e2: 693b ldr r3, [r7, #16] + 800e4e4: 60bb str r3, [r7, #8] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800e4be: 68bb ldr r3, [r7, #8] - 800e4c0: f383 8810 msr PRIMASK, r3 + 800e4e6: 68bb ldr r3, [r7, #8] + 800e4e8: f383 8810 msr PRIMASK, r3 } - 800e4c4: e001 b.n 800e4ca + 800e4ec: e001 b.n 800e4f2 } UTIL_TIMER_EXIT_CRITICAL_SECTION(); } else { ret = UTIL_TIMER_INVALID_PARAM; - 800e4c6: 2301 movs r3, #1 - 800e4c8: 77fb strb r3, [r7, #31] + 800e4ee: 2301 movs r3, #1 + 800e4f0: 77fb strb r3, [r7, #31] } return ret; - 800e4ca: 7ffb ldrb r3, [r7, #31] + 800e4f2: 7ffb ldrb r3, [r7, #31] } - 800e4cc: 4618 mov r0, r3 - 800e4ce: 3720 adds r7, #32 - 800e4d0: 46bd mov sp, r7 - 800e4d2: bd80 pop {r7, pc} - 800e4d4: 20000c30 .word 0x20000c30 - 800e4d8: 0801034c .word 0x0801034c + 800e4f4: 4618 mov r0, r3 + 800e4f6: 3720 adds r7, #32 + 800e4f8: 46bd mov sp, r7 + 800e4fa: bd80 pop {r7, pc} + 800e4fc: 20000c68 .word 0x20000c68 + 800e500: 08010374 .word 0x08010374 -0800e4dc : +0800e504 : UTIL_TIMER_Status_t UTIL_TIMER_SetPeriod(UTIL_TIMER_Object_t *TimerObject, uint32_t NewPeriodValue) { - 800e4dc: b580 push {r7, lr} - 800e4de: b084 sub sp, #16 - 800e4e0: af00 add r7, sp, #0 - 800e4e2: 6078 str r0, [r7, #4] - 800e4e4: 6039 str r1, [r7, #0] + 800e504: b580 push {r7, lr} + 800e506: b084 sub sp, #16 + 800e508: af00 add r7, sp, #0 + 800e50a: 6078 str r0, [r7, #4] + 800e50c: 6039 str r1, [r7, #0] UTIL_TIMER_Status_t ret = UTIL_TIMER_OK; - 800e4e6: 2300 movs r3, #0 - 800e4e8: 73fb strb r3, [r7, #15] + 800e50e: 2300 movs r3, #0 + 800e510: 73fb strb r3, [r7, #15] if(NULL == TimerObject) - 800e4ea: 687b ldr r3, [r7, #4] - 800e4ec: 2b00 cmp r3, #0 - 800e4ee: d102 bne.n 800e4f6 + 800e512: 687b ldr r3, [r7, #4] + 800e514: 2b00 cmp r3, #0 + 800e516: d102 bne.n 800e51e { ret = UTIL_TIMER_INVALID_PARAM; - 800e4f0: 2301 movs r3, #1 - 800e4f2: 73fb strb r3, [r7, #15] - 800e4f4: e014 b.n 800e520 + 800e518: 2301 movs r3, #1 + 800e51a: 73fb strb r3, [r7, #15] + 800e51c: e014 b.n 800e548 } else { TimerObject->ReloadValue = UTIL_TimerDriver.ms2Tick(NewPeriodValue); - 800e4f6: 4b0d ldr r3, [pc, #52] @ (800e52c ) - 800e4f8: 6a5b ldr r3, [r3, #36] @ 0x24 - 800e4fa: 6838 ldr r0, [r7, #0] - 800e4fc: 4798 blx r3 - 800e4fe: 4602 mov r2, r0 - 800e500: 687b ldr r3, [r7, #4] - 800e502: 605a str r2, [r3, #4] + 800e51e: 4b0d ldr r3, [pc, #52] @ (800e554 ) + 800e520: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e522: 6838 ldr r0, [r7, #0] + 800e524: 4798 blx r3 + 800e526: 4602 mov r2, r0 + 800e528: 687b ldr r3, [r7, #4] + 800e52a: 605a str r2, [r3, #4] if(TimerExists(TimerObject)) - 800e504: 6878 ldr r0, [r7, #4] - 800e506: f000 f8c1 bl 800e68c - 800e50a: 4603 mov r3, r0 - 800e50c: 2b00 cmp r3, #0 - 800e50e: d007 beq.n 800e520 + 800e52c: 6878 ldr r0, [r7, #4] + 800e52e: f000 f8c1 bl 800e6b4 + 800e532: 4603 mov r3, r0 + 800e534: 2b00 cmp r3, #0 + 800e536: d007 beq.n 800e548 { (void)UTIL_TIMER_Stop(TimerObject); - 800e510: 6878 ldr r0, [r7, #4] - 800e512: f7ff ff73 bl 800e3fc + 800e538: 6878 ldr r0, [r7, #4] + 800e53a: f7ff ff73 bl 800e424 ret = UTIL_TIMER_Start(TimerObject); - 800e516: 6878 ldr r0, [r7, #4] - 800e518: f7ff ff02 bl 800e320 - 800e51c: 4603 mov r3, r0 - 800e51e: 73fb strb r3, [r7, #15] + 800e53e: 6878 ldr r0, [r7, #4] + 800e540: f7ff ff02 bl 800e348 + 800e544: 4603 mov r3, r0 + 800e546: 73fb strb r3, [r7, #15] } } return ret; - 800e520: 7bfb ldrb r3, [r7, #15] + 800e548: 7bfb ldrb r3, [r7, #15] } - 800e522: 4618 mov r0, r3 - 800e524: 3710 adds r7, #16 - 800e526: 46bd mov sp, r7 - 800e528: bd80 pop {r7, pc} - 800e52a: bf00 nop - 800e52c: 0801034c .word 0x0801034c + 800e54a: 4618 mov r0, r3 + 800e54c: 3710 adds r7, #16 + 800e54e: 46bd mov sp, r7 + 800e550: bd80 pop {r7, pc} + 800e552: bf00 nop + 800e554: 08010374 .word 0x08010374 -0800e530 : +0800e558 : } return NextTimer; } void UTIL_TIMER_IRQ_Handler( void ) { - 800e530: b590 push {r4, r7, lr} - 800e532: b089 sub sp, #36 @ 0x24 - 800e534: af00 add r7, sp, #0 + 800e558: b590 push {r4, r7, lr} + 800e55a: b089 sub sp, #36 @ 0x24 + 800e55c: af00 add r7, sp, #0 __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800e536: f3ef 8310 mrs r3, PRIMASK - 800e53a: 60bb str r3, [r7, #8] + 800e55e: f3ef 8310 mrs r3, PRIMASK + 800e562: 60bb str r3, [r7, #8] return(result); - 800e53c: 68bb ldr r3, [r7, #8] + 800e564: 68bb ldr r3, [r7, #8] UTIL_TIMER_Object_t* cur; uint32_t old, now, DeltaContext; UTIL_TIMER_ENTER_CRITICAL_SECTION(); - 800e53e: 61bb str r3, [r7, #24] + 800e566: 61bb str r3, [r7, #24] __ASM volatile ("cpsid i" : : : "memory"); - 800e540: b672 cpsid i + 800e568: b672 cpsid i } - 800e542: bf00 nop + 800e56a: bf00 nop old = UTIL_TimerDriver.GetTimerContext( ); - 800e544: 4b38 ldr r3, [pc, #224] @ (800e628 ) - 800e546: 695b ldr r3, [r3, #20] - 800e548: 4798 blx r3 - 800e54a: 6178 str r0, [r7, #20] + 800e56c: 4b38 ldr r3, [pc, #224] @ (800e650 ) + 800e56e: 695b ldr r3, [r3, #20] + 800e570: 4798 blx r3 + 800e572: 6178 str r0, [r7, #20] now = UTIL_TimerDriver.SetTimerContext( ); - 800e54c: 4b36 ldr r3, [pc, #216] @ (800e628 ) - 800e54e: 691b ldr r3, [r3, #16] - 800e550: 4798 blx r3 - 800e552: 6138 str r0, [r7, #16] + 800e574: 4b36 ldr r3, [pc, #216] @ (800e650 ) + 800e576: 691b ldr r3, [r3, #16] + 800e578: 4798 blx r3 + 800e57a: 6138 str r0, [r7, #16] DeltaContext = now - old; /*intentional wrap around */ - 800e554: 693a ldr r2, [r7, #16] - 800e556: 697b ldr r3, [r7, #20] - 800e558: 1ad3 subs r3, r2, r3 - 800e55a: 60fb str r3, [r7, #12] + 800e57c: 693a ldr r2, [r7, #16] + 800e57e: 697b ldr r3, [r7, #20] + 800e580: 1ad3 subs r3, r2, r3 + 800e582: 60fb str r3, [r7, #12] /* update timeStamp based upon new Time Reference*/ /* because delta context should never exceed 2^32*/ if ( TimerListHead != NULL ) - 800e55c: 4b33 ldr r3, [pc, #204] @ (800e62c ) - 800e55e: 681b ldr r3, [r3, #0] - 800e560: 2b00 cmp r3, #0 - 800e562: d037 beq.n 800e5d4 + 800e584: 4b33 ldr r3, [pc, #204] @ (800e654 ) + 800e586: 681b ldr r3, [r3, #0] + 800e588: 2b00 cmp r3, #0 + 800e58a: d037 beq.n 800e5fc { cur = TimerListHead; - 800e564: 4b31 ldr r3, [pc, #196] @ (800e62c ) - 800e566: 681b ldr r3, [r3, #0] - 800e568: 61fb str r3, [r7, #28] + 800e58c: 4b31 ldr r3, [pc, #196] @ (800e654 ) + 800e58e: 681b ldr r3, [r3, #0] + 800e590: 61fb str r3, [r7, #28] do { if (cur->Timestamp > DeltaContext) - 800e56a: 69fb ldr r3, [r7, #28] - 800e56c: 681b ldr r3, [r3, #0] - 800e56e: 68fa ldr r2, [r7, #12] - 800e570: 429a cmp r2, r3 - 800e572: d206 bcs.n 800e582 + 800e592: 69fb ldr r3, [r7, #28] + 800e594: 681b ldr r3, [r3, #0] + 800e596: 68fa ldr r2, [r7, #12] + 800e598: 429a cmp r2, r3 + 800e59a: d206 bcs.n 800e5aa { cur->Timestamp -= DeltaContext; - 800e574: 69fb ldr r3, [r7, #28] - 800e576: 681a ldr r2, [r3, #0] - 800e578: 68fb ldr r3, [r7, #12] - 800e57a: 1ad2 subs r2, r2, r3 - 800e57c: 69fb ldr r3, [r7, #28] - 800e57e: 601a str r2, [r3, #0] - 800e580: e002 b.n 800e588 + 800e59c: 69fb ldr r3, [r7, #28] + 800e59e: 681a ldr r2, [r3, #0] + 800e5a0: 68fb ldr r3, [r7, #12] + 800e5a2: 1ad2 subs r2, r2, r3 + 800e5a4: 69fb ldr r3, [r7, #28] + 800e5a6: 601a str r2, [r3, #0] + 800e5a8: e002 b.n 800e5b0 } else { cur->Timestamp = 0; - 800e582: 69fb ldr r3, [r7, #28] - 800e584: 2200 movs r2, #0 - 800e586: 601a str r2, [r3, #0] + 800e5aa: 69fb ldr r3, [r7, #28] + 800e5ac: 2200 movs r2, #0 + 800e5ae: 601a str r2, [r3, #0] } cur = cur->Next; - 800e588: 69fb ldr r3, [r7, #28] - 800e58a: 695b ldr r3, [r3, #20] - 800e58c: 61fb str r3, [r7, #28] + 800e5b0: 69fb ldr r3, [r7, #28] + 800e5b2: 695b ldr r3, [r3, #20] + 800e5b4: 61fb str r3, [r7, #28] } while(cur != NULL); - 800e58e: 69fb ldr r3, [r7, #28] - 800e590: 2b00 cmp r3, #0 - 800e592: d1ea bne.n 800e56a + 800e5b6: 69fb ldr r3, [r7, #28] + 800e5b8: 2b00 cmp r3, #0 + 800e5ba: d1ea bne.n 800e592 } /* Execute expired timer and update the list */ while ((TimerListHead != NULL) && ((TimerListHead->Timestamp == 0U) || (TimerListHead->Timestamp < UTIL_TimerDriver.GetTimerElapsedTime( )))) - 800e594: e01e b.n 800e5d4 + 800e5bc: e01e b.n 800e5fc { cur = TimerListHead; - 800e596: 4b25 ldr r3, [pc, #148] @ (800e62c ) - 800e598: 681b ldr r3, [r3, #0] - 800e59a: 61fb str r3, [r7, #28] + 800e5be: 4b25 ldr r3, [pc, #148] @ (800e654 ) + 800e5c0: 681b ldr r3, [r3, #0] + 800e5c2: 61fb str r3, [r7, #28] TimerListHead = TimerListHead->Next; - 800e59c: 4b23 ldr r3, [pc, #140] @ (800e62c ) - 800e59e: 681b ldr r3, [r3, #0] - 800e5a0: 695b ldr r3, [r3, #20] - 800e5a2: 4a22 ldr r2, [pc, #136] @ (800e62c ) - 800e5a4: 6013 str r3, [r2, #0] + 800e5c4: 4b23 ldr r3, [pc, #140] @ (800e654 ) + 800e5c6: 681b ldr r3, [r3, #0] + 800e5c8: 695b ldr r3, [r3, #20] + 800e5ca: 4a22 ldr r2, [pc, #136] @ (800e654 ) + 800e5cc: 6013 str r3, [r2, #0] cur->IsPending = 0; - 800e5a6: 69fb ldr r3, [r7, #28] - 800e5a8: 2200 movs r2, #0 - 800e5aa: 721a strb r2, [r3, #8] + 800e5ce: 69fb ldr r3, [r7, #28] + 800e5d0: 2200 movs r2, #0 + 800e5d2: 721a strb r2, [r3, #8] cur->IsRunning = 0; - 800e5ac: 69fb ldr r3, [r7, #28] - 800e5ae: 2200 movs r2, #0 - 800e5b0: 725a strb r2, [r3, #9] + 800e5d4: 69fb ldr r3, [r7, #28] + 800e5d6: 2200 movs r2, #0 + 800e5d8: 725a strb r2, [r3, #9] cur->Callback(cur->argument); - 800e5b2: 69fb ldr r3, [r7, #28] - 800e5b4: 68db ldr r3, [r3, #12] - 800e5b6: 69fa ldr r2, [r7, #28] - 800e5b8: 6912 ldr r2, [r2, #16] - 800e5ba: 4610 mov r0, r2 - 800e5bc: 4798 blx r3 + 800e5da: 69fb ldr r3, [r7, #28] + 800e5dc: 68db ldr r3, [r3, #12] + 800e5de: 69fa ldr r2, [r7, #28] + 800e5e0: 6912 ldr r2, [r2, #16] + 800e5e2: 4610 mov r0, r2 + 800e5e4: 4798 blx r3 if(( cur->Mode == UTIL_TIMER_PERIODIC) && (cur->IsReloadStopped == 0U)) - 800e5be: 69fb ldr r3, [r7, #28] - 800e5c0: 7adb ldrb r3, [r3, #11] - 800e5c2: 2b01 cmp r3, #1 - 800e5c4: d106 bne.n 800e5d4 - 800e5c6: 69fb ldr r3, [r7, #28] - 800e5c8: 7a9b ldrb r3, [r3, #10] - 800e5ca: 2b00 cmp r3, #0 - 800e5cc: d102 bne.n 800e5d4 + 800e5e6: 69fb ldr r3, [r7, #28] + 800e5e8: 7adb ldrb r3, [r3, #11] + 800e5ea: 2b01 cmp r3, #1 + 800e5ec: d106 bne.n 800e5fc + 800e5ee: 69fb ldr r3, [r7, #28] + 800e5f0: 7a9b ldrb r3, [r3, #10] + 800e5f2: 2b00 cmp r3, #0 + 800e5f4: d102 bne.n 800e5fc { (void)UTIL_TIMER_Start(cur); - 800e5ce: 69f8 ldr r0, [r7, #28] - 800e5d0: f7ff fea6 bl 800e320 + 800e5f6: 69f8 ldr r0, [r7, #28] + 800e5f8: f7ff fea6 bl 800e348 while ((TimerListHead != NULL) && ((TimerListHead->Timestamp == 0U) || (TimerListHead->Timestamp < UTIL_TimerDriver.GetTimerElapsedTime( )))) - 800e5d4: 4b15 ldr r3, [pc, #84] @ (800e62c ) - 800e5d6: 681b ldr r3, [r3, #0] - 800e5d8: 2b00 cmp r3, #0 - 800e5da: d00d beq.n 800e5f8 - 800e5dc: 4b13 ldr r3, [pc, #76] @ (800e62c ) - 800e5de: 681b ldr r3, [r3, #0] - 800e5e0: 681b ldr r3, [r3, #0] - 800e5e2: 2b00 cmp r3, #0 - 800e5e4: d0d7 beq.n 800e596 - 800e5e6: 4b11 ldr r3, [pc, #68] @ (800e62c ) - 800e5e8: 681b ldr r3, [r3, #0] - 800e5ea: 681c ldr r4, [r3, #0] - 800e5ec: 4b0e ldr r3, [pc, #56] @ (800e628 ) - 800e5ee: 699b ldr r3, [r3, #24] - 800e5f0: 4798 blx r3 - 800e5f2: 4603 mov r3, r0 - 800e5f4: 429c cmp r4, r3 - 800e5f6: d3ce bcc.n 800e596 + 800e5fc: 4b15 ldr r3, [pc, #84] @ (800e654 ) + 800e5fe: 681b ldr r3, [r3, #0] + 800e600: 2b00 cmp r3, #0 + 800e602: d00d beq.n 800e620 + 800e604: 4b13 ldr r3, [pc, #76] @ (800e654 ) + 800e606: 681b ldr r3, [r3, #0] + 800e608: 681b ldr r3, [r3, #0] + 800e60a: 2b00 cmp r3, #0 + 800e60c: d0d7 beq.n 800e5be + 800e60e: 4b11 ldr r3, [pc, #68] @ (800e654 ) + 800e610: 681b ldr r3, [r3, #0] + 800e612: 681c ldr r4, [r3, #0] + 800e614: 4b0e ldr r3, [pc, #56] @ (800e650 ) + 800e616: 699b ldr r3, [r3, #24] + 800e618: 4798 blx r3 + 800e61a: 4603 mov r3, r0 + 800e61c: 429c cmp r4, r3 + 800e61e: d3ce bcc.n 800e5be } } /* start the next TimerListHead if it exists and it is not pending*/ if(( TimerListHead != NULL ) && (TimerListHead->IsPending == 0U)) - 800e5f8: 4b0c ldr r3, [pc, #48] @ (800e62c ) - 800e5fa: 681b ldr r3, [r3, #0] - 800e5fc: 2b00 cmp r3, #0 - 800e5fe: d009 beq.n 800e614 - 800e600: 4b0a ldr r3, [pc, #40] @ (800e62c ) - 800e602: 681b ldr r3, [r3, #0] - 800e604: 7a1b ldrb r3, [r3, #8] - 800e606: 2b00 cmp r3, #0 - 800e608: d104 bne.n 800e614 + 800e620: 4b0c ldr r3, [pc, #48] @ (800e654 ) + 800e622: 681b ldr r3, [r3, #0] + 800e624: 2b00 cmp r3, #0 + 800e626: d009 beq.n 800e63c + 800e628: 4b0a ldr r3, [pc, #40] @ (800e654 ) + 800e62a: 681b ldr r3, [r3, #0] + 800e62c: 7a1b ldrb r3, [r3, #8] + 800e62e: 2b00 cmp r3, #0 + 800e630: d104 bne.n 800e63c { TimerSetTimeout( TimerListHead ); - 800e60a: 4b08 ldr r3, [pc, #32] @ (800e62c ) - 800e60c: 681b ldr r3, [r3, #0] - 800e60e: 4618 mov r0, r3 - 800e610: f000 f858 bl 800e6c4 - 800e614: 69bb ldr r3, [r7, #24] - 800e616: 607b str r3, [r7, #4] + 800e632: 4b08 ldr r3, [pc, #32] @ (800e654 ) + 800e634: 681b ldr r3, [r3, #0] + 800e636: 4618 mov r0, r3 + 800e638: f000 f858 bl 800e6ec + 800e63c: 69bb ldr r3, [r7, #24] + 800e63e: 607b str r3, [r7, #4] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800e618: 687b ldr r3, [r7, #4] - 800e61a: f383 8810 msr PRIMASK, r3 + 800e640: 687b ldr r3, [r7, #4] + 800e642: f383 8810 msr PRIMASK, r3 } - 800e61e: bf00 nop + 800e646: bf00 nop } UTIL_TIMER_EXIT_CRITICAL_SECTION(); } - 800e620: bf00 nop - 800e622: 3724 adds r7, #36 @ 0x24 - 800e624: 46bd mov sp, r7 - 800e626: bd90 pop {r4, r7, pc} - 800e628: 0801034c .word 0x0801034c - 800e62c: 20000c30 .word 0x20000c30 + 800e648: bf00 nop + 800e64a: 3724 adds r7, #36 @ 0x24 + 800e64c: 46bd mov sp, r7 + 800e64e: bd90 pop {r4, r7, pc} + 800e650: 08010374 .word 0x08010374 + 800e654: 20000c68 .word 0x20000c68 -0800e630 : +0800e658 : UTIL_TIMER_Time_t UTIL_TIMER_GetCurrentTime(void) { - 800e630: b580 push {r7, lr} - 800e632: b082 sub sp, #8 - 800e634: af00 add r7, sp, #0 + 800e658: b580 push {r7, lr} + 800e65a: b082 sub sp, #8 + 800e65c: af00 add r7, sp, #0 uint32_t now = UTIL_TimerDriver.GetTimerValue( ); - 800e636: 4b06 ldr r3, [pc, #24] @ (800e650 ) - 800e638: 69db ldr r3, [r3, #28] - 800e63a: 4798 blx r3 - 800e63c: 6078 str r0, [r7, #4] + 800e65e: 4b06 ldr r3, [pc, #24] @ (800e678 ) + 800e660: 69db ldr r3, [r3, #28] + 800e662: 4798 blx r3 + 800e664: 6078 str r0, [r7, #4] return UTIL_TimerDriver.Tick2ms(now); - 800e63e: 4b04 ldr r3, [pc, #16] @ (800e650 ) - 800e640: 6a9b ldr r3, [r3, #40] @ 0x28 - 800e642: 6878 ldr r0, [r7, #4] - 800e644: 4798 blx r3 - 800e646: 4603 mov r3, r0 + 800e666: 4b04 ldr r3, [pc, #16] @ (800e678 ) + 800e668: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e66a: 6878 ldr r0, [r7, #4] + 800e66c: 4798 blx r3 + 800e66e: 4603 mov r3, r0 } - 800e648: 4618 mov r0, r3 - 800e64a: 3708 adds r7, #8 - 800e64c: 46bd mov sp, r7 - 800e64e: bd80 pop {r7, pc} - 800e650: 0801034c .word 0x0801034c + 800e670: 4618 mov r0, r3 + 800e672: 3708 adds r7, #8 + 800e674: 46bd mov sp, r7 + 800e676: bd80 pop {r7, pc} + 800e678: 08010374 .word 0x08010374 -0800e654 : +0800e67c : UTIL_TIMER_Time_t UTIL_TIMER_GetElapsedTime(UTIL_TIMER_Time_t past ) { - 800e654: b580 push {r7, lr} - 800e656: b084 sub sp, #16 - 800e658: af00 add r7, sp, #0 - 800e65a: 6078 str r0, [r7, #4] + 800e67c: b580 push {r7, lr} + 800e67e: b084 sub sp, #16 + 800e680: af00 add r7, sp, #0 + 800e682: 6078 str r0, [r7, #4] uint32_t nowInTicks = UTIL_TimerDriver.GetTimerValue( ); - 800e65c: 4b0a ldr r3, [pc, #40] @ (800e688 ) - 800e65e: 69db ldr r3, [r3, #28] - 800e660: 4798 blx r3 - 800e662: 60f8 str r0, [r7, #12] + 800e684: 4b0a ldr r3, [pc, #40] @ (800e6b0 ) + 800e686: 69db ldr r3, [r3, #28] + 800e688: 4798 blx r3 + 800e68a: 60f8 str r0, [r7, #12] uint32_t pastInTicks = UTIL_TimerDriver.ms2Tick( past ); - 800e664: 4b08 ldr r3, [pc, #32] @ (800e688 ) - 800e666: 6a5b ldr r3, [r3, #36] @ 0x24 - 800e668: 6878 ldr r0, [r7, #4] - 800e66a: 4798 blx r3 - 800e66c: 60b8 str r0, [r7, #8] + 800e68c: 4b08 ldr r3, [pc, #32] @ (800e6b0 ) + 800e68e: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e690: 6878 ldr r0, [r7, #4] + 800e692: 4798 blx r3 + 800e694: 60b8 str r0, [r7, #8] /* intentional wrap around. Works Ok if tick duation below 1ms */ return UTIL_TimerDriver.Tick2ms( nowInTicks- pastInTicks ); - 800e66e: 4b06 ldr r3, [pc, #24] @ (800e688 ) - 800e670: 6a9b ldr r3, [r3, #40] @ 0x28 - 800e672: 68f9 ldr r1, [r7, #12] - 800e674: 68ba ldr r2, [r7, #8] - 800e676: 1a8a subs r2, r1, r2 - 800e678: 4610 mov r0, r2 - 800e67a: 4798 blx r3 - 800e67c: 4603 mov r3, r0 + 800e696: 4b06 ldr r3, [pc, #24] @ (800e6b0 ) + 800e698: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e69a: 68f9 ldr r1, [r7, #12] + 800e69c: 68ba ldr r2, [r7, #8] + 800e69e: 1a8a subs r2, r1, r2 + 800e6a0: 4610 mov r0, r2 + 800e6a2: 4798 blx r3 + 800e6a4: 4603 mov r3, r0 } - 800e67e: 4618 mov r0, r3 - 800e680: 3710 adds r7, #16 - 800e682: 46bd mov sp, r7 - 800e684: bd80 pop {r7, pc} - 800e686: bf00 nop - 800e688: 0801034c .word 0x0801034c + 800e6a6: 4618 mov r0, r3 + 800e6a8: 3710 adds r7, #16 + 800e6aa: 46bd mov sp, r7 + 800e6ac: bd80 pop {r7, pc} + 800e6ae: bf00 nop + 800e6b0: 08010374 .word 0x08010374 -0800e68c : +0800e6b4 : * * @param TimerObject Structure containing the timer object parameters * @retval 1 (the object is already in the list) or 0 */ bool TimerExists( UTIL_TIMER_Object_t *TimerObject ) { - 800e68c: b480 push {r7} - 800e68e: b085 sub sp, #20 - 800e690: af00 add r7, sp, #0 - 800e692: 6078 str r0, [r7, #4] + 800e6b4: b480 push {r7} + 800e6b6: b085 sub sp, #20 + 800e6b8: af00 add r7, sp, #0 + 800e6ba: 6078 str r0, [r7, #4] UTIL_TIMER_Object_t* cur = TimerListHead; - 800e694: 4b0a ldr r3, [pc, #40] @ (800e6c0 ) - 800e696: 681b ldr r3, [r3, #0] - 800e698: 60fb str r3, [r7, #12] + 800e6bc: 4b0a ldr r3, [pc, #40] @ (800e6e8 ) + 800e6be: 681b ldr r3, [r3, #0] + 800e6c0: 60fb str r3, [r7, #12] while( cur != NULL ) - 800e69a: e008 b.n 800e6ae + 800e6c2: e008 b.n 800e6d6 { if( cur == TimerObject ) - 800e69c: 68fa ldr r2, [r7, #12] - 800e69e: 687b ldr r3, [r7, #4] - 800e6a0: 429a cmp r2, r3 - 800e6a2: d101 bne.n 800e6a8 + 800e6c4: 68fa ldr r2, [r7, #12] + 800e6c6: 687b ldr r3, [r7, #4] + 800e6c8: 429a cmp r2, r3 + 800e6ca: d101 bne.n 800e6d0 { return true; - 800e6a4: 2301 movs r3, #1 - 800e6a6: e006 b.n 800e6b6 + 800e6cc: 2301 movs r3, #1 + 800e6ce: e006 b.n 800e6de } cur = cur->Next; - 800e6a8: 68fb ldr r3, [r7, #12] - 800e6aa: 695b ldr r3, [r3, #20] - 800e6ac: 60fb str r3, [r7, #12] + 800e6d0: 68fb ldr r3, [r7, #12] + 800e6d2: 695b ldr r3, [r3, #20] + 800e6d4: 60fb str r3, [r7, #12] while( cur != NULL ) - 800e6ae: 68fb ldr r3, [r7, #12] - 800e6b0: 2b00 cmp r3, #0 - 800e6b2: d1f3 bne.n 800e69c + 800e6d6: 68fb ldr r3, [r7, #12] + 800e6d8: 2b00 cmp r3, #0 + 800e6da: d1f3 bne.n 800e6c4 } return false; - 800e6b4: 2300 movs r3, #0 + 800e6dc: 2300 movs r3, #0 } - 800e6b6: 4618 mov r0, r3 - 800e6b8: 3714 adds r7, #20 - 800e6ba: 46bd mov sp, r7 - 800e6bc: bc80 pop {r7} - 800e6be: 4770 bx lr - 800e6c0: 20000c30 .word 0x20000c30 + 800e6de: 4618 mov r0, r3 + 800e6e0: 3714 adds r7, #20 + 800e6e2: 46bd mov sp, r7 + 800e6e4: bc80 pop {r7} + 800e6e6: 4770 bx lr + 800e6e8: 20000c68 .word 0x20000c68 -0800e6c4 : +0800e6ec : * @brief Sets a timeout with the duration "timestamp" * * @param TimerObject Structure containing the timer object parameters */ void TimerSetTimeout( UTIL_TIMER_Object_t *TimerObject ) { - 800e6c4: b590 push {r4, r7, lr} - 800e6c6: b085 sub sp, #20 - 800e6c8: af00 add r7, sp, #0 - 800e6ca: 6078 str r0, [r7, #4] + 800e6ec: b590 push {r4, r7, lr} + 800e6ee: b085 sub sp, #20 + 800e6f0: af00 add r7, sp, #0 + 800e6f2: 6078 str r0, [r7, #4] uint32_t minTicks= UTIL_TimerDriver.GetMinimumTimeout( ); - 800e6cc: 4b11 ldr r3, [pc, #68] @ (800e714 ) - 800e6ce: 6a1b ldr r3, [r3, #32] - 800e6d0: 4798 blx r3 - 800e6d2: 60f8 str r0, [r7, #12] + 800e6f4: 4b11 ldr r3, [pc, #68] @ (800e73c ) + 800e6f6: 6a1b ldr r3, [r3, #32] + 800e6f8: 4798 blx r3 + 800e6fa: 60f8 str r0, [r7, #12] TimerObject->IsPending = 1; - 800e6d4: 687b ldr r3, [r7, #4] - 800e6d6: 2201 movs r2, #1 - 800e6d8: 721a strb r2, [r3, #8] + 800e6fc: 687b ldr r3, [r7, #4] + 800e6fe: 2201 movs r2, #1 + 800e700: 721a strb r2, [r3, #8] /* In case deadline too soon */ if(TimerObject->Timestamp < (UTIL_TimerDriver.GetTimerElapsedTime( ) + minTicks) ) - 800e6da: 687b ldr r3, [r7, #4] - 800e6dc: 681c ldr r4, [r3, #0] - 800e6de: 4b0d ldr r3, [pc, #52] @ (800e714 ) - 800e6e0: 699b ldr r3, [r3, #24] - 800e6e2: 4798 blx r3 - 800e6e4: 4602 mov r2, r0 - 800e6e6: 68fb ldr r3, [r7, #12] - 800e6e8: 4413 add r3, r2 - 800e6ea: 429c cmp r4, r3 - 800e6ec: d207 bcs.n 800e6fe + 800e702: 687b ldr r3, [r7, #4] + 800e704: 681c ldr r4, [r3, #0] + 800e706: 4b0d ldr r3, [pc, #52] @ (800e73c ) + 800e708: 699b ldr r3, [r3, #24] + 800e70a: 4798 blx r3 + 800e70c: 4602 mov r2, r0 + 800e70e: 68fb ldr r3, [r7, #12] + 800e710: 4413 add r3, r2 + 800e712: 429c cmp r4, r3 + 800e714: d207 bcs.n 800e726 { TimerObject->Timestamp = UTIL_TimerDriver.GetTimerElapsedTime( ) + minTicks; - 800e6ee: 4b09 ldr r3, [pc, #36] @ (800e714 ) - 800e6f0: 699b ldr r3, [r3, #24] - 800e6f2: 4798 blx r3 - 800e6f4: 4602 mov r2, r0 - 800e6f6: 68fb ldr r3, [r7, #12] - 800e6f8: 441a add r2, r3 - 800e6fa: 687b ldr r3, [r7, #4] - 800e6fc: 601a str r2, [r3, #0] + 800e716: 4b09 ldr r3, [pc, #36] @ (800e73c ) + 800e718: 699b ldr r3, [r3, #24] + 800e71a: 4798 blx r3 + 800e71c: 4602 mov r2, r0 + 800e71e: 68fb ldr r3, [r7, #12] + 800e720: 441a add r2, r3 + 800e722: 687b ldr r3, [r7, #4] + 800e724: 601a str r2, [r3, #0] } UTIL_TimerDriver.StartTimerEvt( TimerObject->Timestamp ); - 800e6fe: 4b05 ldr r3, [pc, #20] @ (800e714 ) - 800e700: 689b ldr r3, [r3, #8] - 800e702: 687a ldr r2, [r7, #4] - 800e704: 6812 ldr r2, [r2, #0] - 800e706: 4610 mov r0, r2 - 800e708: 4798 blx r3 + 800e726: 4b05 ldr r3, [pc, #20] @ (800e73c ) + 800e728: 689b ldr r3, [r3, #8] + 800e72a: 687a ldr r2, [r7, #4] + 800e72c: 6812 ldr r2, [r2, #0] + 800e72e: 4610 mov r0, r2 + 800e730: 4798 blx r3 } - 800e70a: bf00 nop - 800e70c: 3714 adds r7, #20 - 800e70e: 46bd mov sp, r7 - 800e710: bd90 pop {r4, r7, pc} - 800e712: bf00 nop - 800e714: 0801034c .word 0x0801034c + 800e732: bf00 nop + 800e734: 3714 adds r7, #20 + 800e736: 46bd mov sp, r7 + 800e738: bd90 pop {r4, r7, pc} + 800e73a: bf00 nop + 800e73c: 08010374 .word 0x08010374 -0800e718 : +0800e740 : * next timer to expire. * * @param TimerObject Structure containing the timer object parameters */ void TimerInsertTimer( UTIL_TIMER_Object_t *TimerObject) { - 800e718: b480 push {r7} - 800e71a: b085 sub sp, #20 - 800e71c: af00 add r7, sp, #0 - 800e71e: 6078 str r0, [r7, #4] + 800e740: b480 push {r7} + 800e742: b085 sub sp, #20 + 800e744: af00 add r7, sp, #0 + 800e746: 6078 str r0, [r7, #4] UTIL_TIMER_Object_t* cur = TimerListHead; - 800e720: 4b14 ldr r3, [pc, #80] @ (800e774 ) - 800e722: 681b ldr r3, [r3, #0] - 800e724: 60fb str r3, [r7, #12] + 800e748: 4b14 ldr r3, [pc, #80] @ (800e79c ) + 800e74a: 681b ldr r3, [r3, #0] + 800e74c: 60fb str r3, [r7, #12] UTIL_TIMER_Object_t* next = TimerListHead->Next; - 800e726: 4b13 ldr r3, [pc, #76] @ (800e774 ) - 800e728: 681b ldr r3, [r3, #0] - 800e72a: 695b ldr r3, [r3, #20] - 800e72c: 60bb str r3, [r7, #8] + 800e74e: 4b13 ldr r3, [pc, #76] @ (800e79c ) + 800e750: 681b ldr r3, [r3, #0] + 800e752: 695b ldr r3, [r3, #20] + 800e754: 60bb str r3, [r7, #8] while (cur->Next != NULL ) - 800e72e: e012 b.n 800e756 + 800e756: e012 b.n 800e77e { if( TimerObject->Timestamp > next->Timestamp ) - 800e730: 687b ldr r3, [r7, #4] - 800e732: 681a ldr r2, [r3, #0] - 800e734: 68bb ldr r3, [r7, #8] - 800e736: 681b ldr r3, [r3, #0] - 800e738: 429a cmp r2, r3 - 800e73a: d905 bls.n 800e748 + 800e758: 687b ldr r3, [r7, #4] + 800e75a: 681a ldr r2, [r3, #0] + 800e75c: 68bb ldr r3, [r7, #8] + 800e75e: 681b ldr r3, [r3, #0] + 800e760: 429a cmp r2, r3 + 800e762: d905 bls.n 800e770 { cur = next; - 800e73c: 68bb ldr r3, [r7, #8] - 800e73e: 60fb str r3, [r7, #12] + 800e764: 68bb ldr r3, [r7, #8] + 800e766: 60fb str r3, [r7, #12] next = next->Next; - 800e740: 68bb ldr r3, [r7, #8] - 800e742: 695b ldr r3, [r3, #20] - 800e744: 60bb str r3, [r7, #8] - 800e746: e006 b.n 800e756 + 800e768: 68bb ldr r3, [r7, #8] + 800e76a: 695b ldr r3, [r3, #20] + 800e76c: 60bb str r3, [r7, #8] + 800e76e: e006 b.n 800e77e } else { cur->Next = TimerObject; - 800e748: 68fb ldr r3, [r7, #12] - 800e74a: 687a ldr r2, [r7, #4] - 800e74c: 615a str r2, [r3, #20] + 800e770: 68fb ldr r3, [r7, #12] + 800e772: 687a ldr r2, [r7, #4] + 800e774: 615a str r2, [r3, #20] TimerObject->Next = next; - 800e74e: 687b ldr r3, [r7, #4] - 800e750: 68ba ldr r2, [r7, #8] - 800e752: 615a str r2, [r3, #20] + 800e776: 687b ldr r3, [r7, #4] + 800e778: 68ba ldr r2, [r7, #8] + 800e77a: 615a str r2, [r3, #20] return; - 800e754: e009 b.n 800e76a + 800e77c: e009 b.n 800e792 while (cur->Next != NULL ) - 800e756: 68fb ldr r3, [r7, #12] - 800e758: 695b ldr r3, [r3, #20] - 800e75a: 2b00 cmp r3, #0 - 800e75c: d1e8 bne.n 800e730 + 800e77e: 68fb ldr r3, [r7, #12] + 800e780: 695b ldr r3, [r3, #20] + 800e782: 2b00 cmp r3, #0 + 800e784: d1e8 bne.n 800e758 } } cur->Next = TimerObject; - 800e75e: 68fb ldr r3, [r7, #12] - 800e760: 687a ldr r2, [r7, #4] - 800e762: 615a str r2, [r3, #20] + 800e786: 68fb ldr r3, [r7, #12] + 800e788: 687a ldr r2, [r7, #4] + 800e78a: 615a str r2, [r3, #20] TimerObject->Next = NULL; - 800e764: 687b ldr r3, [r7, #4] - 800e766: 2200 movs r2, #0 - 800e768: 615a str r2, [r3, #20] + 800e78c: 687b ldr r3, [r7, #4] + 800e78e: 2200 movs r2, #0 + 800e790: 615a str r2, [r3, #20] } - 800e76a: 3714 adds r7, #20 - 800e76c: 46bd mov sp, r7 - 800e76e: bc80 pop {r7} - 800e770: 4770 bx lr - 800e772: bf00 nop - 800e774: 20000c30 .word 0x20000c30 + 800e792: 3714 adds r7, #20 + 800e794: 46bd mov sp, r7 + 800e796: bc80 pop {r7} + 800e798: 4770 bx lr + 800e79a: bf00 nop + 800e79c: 20000c68 .word 0x20000c68 -0800e778 : +0800e7a0 : * * @remark The list is automatically sorted. The list head always contains the * next timer to expire. */ void TimerInsertNewHeadTimer( UTIL_TIMER_Object_t *TimerObject ) { - 800e778: b580 push {r7, lr} - 800e77a: b084 sub sp, #16 - 800e77c: af00 add r7, sp, #0 - 800e77e: 6078 str r0, [r7, #4] + 800e7a0: b580 push {r7, lr} + 800e7a2: b084 sub sp, #16 + 800e7a4: af00 add r7, sp, #0 + 800e7a6: 6078 str r0, [r7, #4] UTIL_TIMER_Object_t* cur = TimerListHead; - 800e780: 4b0b ldr r3, [pc, #44] @ (800e7b0 ) - 800e782: 681b ldr r3, [r3, #0] - 800e784: 60fb str r3, [r7, #12] + 800e7a8: 4b0b ldr r3, [pc, #44] @ (800e7d8 ) + 800e7aa: 681b ldr r3, [r3, #0] + 800e7ac: 60fb str r3, [r7, #12] if( cur != NULL ) - 800e786: 68fb ldr r3, [r7, #12] - 800e788: 2b00 cmp r3, #0 - 800e78a: d002 beq.n 800e792 + 800e7ae: 68fb ldr r3, [r7, #12] + 800e7b0: 2b00 cmp r3, #0 + 800e7b2: d002 beq.n 800e7ba { cur->IsPending = 0; - 800e78c: 68fb ldr r3, [r7, #12] - 800e78e: 2200 movs r2, #0 - 800e790: 721a strb r2, [r3, #8] + 800e7b4: 68fb ldr r3, [r7, #12] + 800e7b6: 2200 movs r2, #0 + 800e7b8: 721a strb r2, [r3, #8] } TimerObject->Next = cur; - 800e792: 687b ldr r3, [r7, #4] - 800e794: 68fa ldr r2, [r7, #12] - 800e796: 615a str r2, [r3, #20] + 800e7ba: 687b ldr r3, [r7, #4] + 800e7bc: 68fa ldr r2, [r7, #12] + 800e7be: 615a str r2, [r3, #20] TimerListHead = TimerObject; - 800e798: 4a05 ldr r2, [pc, #20] @ (800e7b0 ) - 800e79a: 687b ldr r3, [r7, #4] - 800e79c: 6013 str r3, [r2, #0] + 800e7c0: 4a05 ldr r2, [pc, #20] @ (800e7d8 ) + 800e7c2: 687b ldr r3, [r7, #4] + 800e7c4: 6013 str r3, [r2, #0] TimerSetTimeout( TimerListHead ); - 800e79e: 4b04 ldr r3, [pc, #16] @ (800e7b0 ) - 800e7a0: 681b ldr r3, [r3, #0] - 800e7a2: 4618 mov r0, r3 - 800e7a4: f7ff ff8e bl 800e6c4 + 800e7c6: 4b04 ldr r3, [pc, #16] @ (800e7d8 ) + 800e7c8: 681b ldr r3, [r3, #0] + 800e7ca: 4618 mov r0, r3 + 800e7cc: f7ff ff8e bl 800e6ec } - 800e7a8: bf00 nop - 800e7aa: 3710 adds r7, #16 - 800e7ac: 46bd mov sp, r7 - 800e7ae: bd80 pop {r7, pc} - 800e7b0: 20000c30 .word 0x20000c30 + 800e7d0: bf00 nop + 800e7d2: 3710 adds r7, #16 + 800e7d4: 46bd mov sp, r7 + 800e7d6: bd80 pop {r7, pc} + 800e7d8: 20000c68 .word 0x20000c68 -0800e7b4 : +0800e7dc : /** @addtogroup ADV_TRACE_exported_function * @{ */ UTIL_ADV_TRACE_Status_t UTIL_ADV_TRACE_Init(void) { - 800e7b4: b580 push {r7, lr} - 800e7b6: af00 add r7, sp, #0 + 800e7dc: b580 push {r7, lr} + 800e7de: af00 add r7, sp, #0 /* initialize the Ptr for Read/Write */ (void)UTIL_ADV_TRACE_MEMSET8(&ADV_TRACE_Ctx, 0x0, sizeof(ADV_TRACE_Context)); - 800e7b8: 2218 movs r2, #24 - 800e7ba: 2100 movs r1, #0 - 800e7bc: 4807 ldr r0, [pc, #28] @ (800e7dc ) - 800e7be: f7ff f936 bl 800da2e + 800e7e0: 2218 movs r2, #24 + 800e7e2: 2100 movs r1, #0 + 800e7e4: 4807 ldr r0, [pc, #28] @ (800e804 ) + 800e7e6: f7ff f936 bl 800da56 (void)UTIL_ADV_TRACE_MEMSET8(&ADV_TRACE_Buffer, 0x0, sizeof(ADV_TRACE_Buffer)); - 800e7c2: f44f 7200 mov.w r2, #512 @ 0x200 - 800e7c6: 2100 movs r1, #0 - 800e7c8: 4805 ldr r0, [pc, #20] @ (800e7e0 ) - 800e7ca: f7ff f930 bl 800da2e + 800e7ea: f44f 7200 mov.w r2, #512 @ 0x200 + 800e7ee: 2100 movs r1, #0 + 800e7f0: 4805 ldr r0, [pc, #20] @ (800e808 ) + 800e7f2: f7ff f930 bl 800da56 #endif /* Allocate Lock resource */ UTIL_ADV_TRACE_INIT_CRITICAL_SECTION(); /* Initialize the Low Level interface */ return UTIL_TraceDriver.Init(TRACE_TxCpltCallback); - 800e7ce: 4b05 ldr r3, [pc, #20] @ (800e7e4 ) - 800e7d0: 681b ldr r3, [r3, #0] - 800e7d2: 4805 ldr r0, [pc, #20] @ (800e7e8 ) - 800e7d4: 4798 blx r3 - 800e7d6: 4603 mov r3, r0 + 800e7f6: 4b05 ldr r3, [pc, #20] @ (800e80c ) + 800e7f8: 681b ldr r3, [r3, #0] + 800e7fa: 4805 ldr r0, [pc, #20] @ (800e810 ) + 800e7fc: 4798 blx r3 + 800e7fe: 4603 mov r3, r0 } - 800e7d8: 4618 mov r0, r3 - 800e7da: bd80 pop {r7, pc} - 800e7dc: 20000c34 .word 0x20000c34 - 800e7e0: 20000c4c .word 0x20000c4c - 800e7e4: 0801038c .word 0x0801038c - 800e7e8: 0800ea31 .word 0x0800ea31 + 800e800: 4618 mov r0, r3 + 800e802: bd80 pop {r7, pc} + 800e804: 20000c6c .word 0x20000c6c + 800e808: 20000c84 .word 0x20000c84 + 800e80c: 080103b4 .word 0x080103b4 + 800e810: 0800ea59 .word 0x0800ea59 -0800e7ec : +0800e814 : return UTIL_TraceDriver.StartRx(UserCallback); } #if defined(UTIL_ADV_TRACE_CONDITIONNAL) UTIL_ADV_TRACE_Status_t UTIL_ADV_TRACE_COND_FSend(uint32_t VerboseLevel, uint32_t Region, uint32_t TimeStampState, const char *strFormat, ...) { - 800e7ec: b408 push {r3} - 800e7ee: b580 push {r7, lr} - 800e7f0: b08d sub sp, #52 @ 0x34 - 800e7f2: af00 add r7, sp, #0 - 800e7f4: 60f8 str r0, [r7, #12] - 800e7f6: 60b9 str r1, [r7, #8] - 800e7f8: 607a str r2, [r7, #4] + 800e814: b408 push {r3} + 800e816: b580 push {r7, lr} + 800e818: b08d sub sp, #52 @ 0x34 + 800e81a: af00 add r7, sp, #0 + 800e81c: 60f8 str r0, [r7, #12] + 800e81e: 60b9 str r1, [r7, #8] + 800e820: 607a str r2, [r7, #4] va_list vaArgs; #if defined(UTIL_ADV_TRACE_UNCHUNK_MODE) uint8_t buf[UTIL_ADV_TRACE_TMP_MAX_TIMESTMAP_SIZE]; uint16_t timestamp_size = 0u; - 800e7fa: 2300 movs r3, #0 - 800e7fc: 82fb strh r3, [r7, #22] + 800e822: 2300 movs r3, #0 + 800e824: 82fb strh r3, [r7, #22] uint16_t writepos; uint16_t idx; #else uint8_t buf[UTIL_ADV_TRACE_TMP_BUF_SIZE+UTIL_ADV_TRACE_TMP_MAX_TIMESTMAP_SIZE]; #endif uint16_t buff_size = 0u; - 800e7fe: 2300 movs r3, #0 - 800e800: 85bb strh r3, [r7, #44] @ 0x2c + 800e826: 2300 movs r3, #0 + 800e828: 85bb strh r3, [r7, #44] @ 0x2c /* check verbose level */ if(!(ADV_TRACE_Ctx.CurrentVerboseLevel >= VerboseLevel)) - 800e802: 4b37 ldr r3, [pc, #220] @ (800e8e0 ) - 800e804: 7a1b ldrb r3, [r3, #8] - 800e806: 461a mov r2, r3 - 800e808: 68fb ldr r3, [r7, #12] - 800e80a: 4293 cmp r3, r2 - 800e80c: d902 bls.n 800e814 + 800e82a: 4b37 ldr r3, [pc, #220] @ (800e908 ) + 800e82c: 7a1b ldrb r3, [r3, #8] + 800e82e: 461a mov r2, r3 + 800e830: 68fb ldr r3, [r7, #12] + 800e832: 4293 cmp r3, r2 + 800e834: d902 bls.n 800e83c { return UTIL_ADV_TRACE_GIVEUP; - 800e80e: f06f 0304 mvn.w r3, #4 - 800e812: e05e b.n 800e8d2 + 800e836: f06f 0304 mvn.w r3, #4 + 800e83a: e05e b.n 800e8fa } if((Region & ADV_TRACE_Ctx.RegionMask) != Region) - 800e814: 4b32 ldr r3, [pc, #200] @ (800e8e0 ) - 800e816: 68da ldr r2, [r3, #12] - 800e818: 68bb ldr r3, [r7, #8] - 800e81a: 4013 ands r3, r2 - 800e81c: 68ba ldr r2, [r7, #8] - 800e81e: 429a cmp r2, r3 - 800e820: d002 beq.n 800e828 + 800e83c: 4b32 ldr r3, [pc, #200] @ (800e908 ) + 800e83e: 68da ldr r2, [r3, #12] + 800e840: 68bb ldr r3, [r7, #8] + 800e842: 4013 ands r3, r2 + 800e844: 68ba ldr r2, [r7, #8] + 800e846: 429a cmp r2, r3 + 800e848: d002 beq.n 800e850 { return UTIL_ADV_TRACE_REGIONMASKED; - 800e822: f06f 0305 mvn.w r3, #5 - 800e826: e054 b.n 800e8d2 + 800e84a: f06f 0305 mvn.w r3, #5 + 800e84e: e054 b.n 800e8fa } #if defined(UTIL_ADV_TRACE_UNCHUNK_MODE) if((ADV_TRACE_Ctx.timestamp_func != NULL) && (TimeStampState != 0u)) - 800e828: 4b2d ldr r3, [pc, #180] @ (800e8e0 ) - 800e82a: 685b ldr r3, [r3, #4] - 800e82c: 2b00 cmp r3, #0 - 800e82e: d00a beq.n 800e846 - 800e830: 687b ldr r3, [r7, #4] - 800e832: 2b00 cmp r3, #0 - 800e834: d007 beq.n 800e846 + 800e850: 4b2d ldr r3, [pc, #180] @ (800e908 ) + 800e852: 685b ldr r3, [r3, #4] + 800e854: 2b00 cmp r3, #0 + 800e856: d00a beq.n 800e86e + 800e858: 687b ldr r3, [r7, #4] + 800e85a: 2b00 cmp r3, #0 + 800e85c: d007 beq.n 800e86e { ADV_TRACE_Ctx.timestamp_func(buf,×tamp_size); - 800e836: 4b2a ldr r3, [pc, #168] @ (800e8e0 ) - 800e838: 685b ldr r3, [r3, #4] - 800e83a: f107 0116 add.w r1, r7, #22 - 800e83e: f107 0218 add.w r2, r7, #24 - 800e842: 4610 mov r0, r2 - 800e844: 4798 blx r3 + 800e85e: 4b2a ldr r3, [pc, #168] @ (800e908 ) + 800e860: 685b ldr r3, [r3, #4] + 800e862: f107 0116 add.w r1, r7, #22 + 800e866: f107 0218 add.w r2, r7, #24 + 800e86a: 4610 mov r0, r2 + 800e86c: 4798 blx r3 } va_start( vaArgs, strFormat); - 800e846: f107 0340 add.w r3, r7, #64 @ 0x40 - 800e84a: 62bb str r3, [r7, #40] @ 0x28 + 800e86e: f107 0340 add.w r3, r7, #64 @ 0x40 + 800e872: 62bb str r3, [r7, #40] @ 0x28 buff_size =(uint16_t)UTIL_ADV_TRACE_VSNPRINTF((char *)sztmp,UTIL_ADV_TRACE_TMP_BUF_SIZE, strFormat, vaArgs); - 800e84c: 6abb ldr r3, [r7, #40] @ 0x28 - 800e84e: 6bfa ldr r2, [r7, #60] @ 0x3c - 800e850: f44f 7180 mov.w r1, #256 @ 0x100 - 800e854: 4823 ldr r0, [pc, #140] @ (800e8e4 ) - 800e856: f7ff fa8b bl 800dd70 - 800e85a: 4603 mov r3, r0 - 800e85c: 85bb strh r3, [r7, #44] @ 0x2c + 800e874: 6abb ldr r3, [r7, #40] @ 0x28 + 800e876: 6bfa ldr r2, [r7, #60] @ 0x3c + 800e878: f44f 7180 mov.w r1, #256 @ 0x100 + 800e87c: 4823 ldr r0, [pc, #140] @ (800e90c ) + 800e87e: f7ff fa8b bl 800dd98 + 800e882: 4603 mov r3, r0 + 800e884: 85bb strh r3, [r7, #44] @ 0x2c TRACE_Lock(); - 800e85e: f000 f9f1 bl 800ec44 + 800e886: f000 f9f1 bl 800ec6c /* if allocation is ok, write data into the buffer */ if (TRACE_AllocateBufer((buff_size+timestamp_size),&writepos) != -1) - 800e862: 8afa ldrh r2, [r7, #22] - 800e864: 8dbb ldrh r3, [r7, #44] @ 0x2c - 800e866: 4413 add r3, r2 - 800e868: b29b uxth r3, r3 - 800e86a: f107 0214 add.w r2, r7, #20 - 800e86e: 4611 mov r1, r2 - 800e870: 4618 mov r0, r3 - 800e872: f000 f969 bl 800eb48 - 800e876: 4603 mov r3, r0 - 800e878: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff - 800e87c: d025 beq.n 800e8ca + 800e88a: 8afa ldrh r2, [r7, #22] + 800e88c: 8dbb ldrh r3, [r7, #44] @ 0x2c + 800e88e: 4413 add r3, r2 + 800e890: b29b uxth r3, r3 + 800e892: f107 0214 add.w r2, r7, #20 + 800e896: 4611 mov r1, r2 + 800e898: 4618 mov r0, r3 + 800e89a: f000 f969 bl 800eb70 + 800e89e: 4603 mov r3, r0 + 800e8a0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 800e8a4: d025 beq.n 800e8f2 } UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); #endif /* copy the timestamp */ for (idx = 0u; idx < timestamp_size; idx++) - 800e87e: 2300 movs r3, #0 - 800e880: 85fb strh r3, [r7, #46] @ 0x2e - 800e882: e00e b.n 800e8a2 + 800e8a6: 2300 movs r3, #0 + 800e8a8: 85fb strh r3, [r7, #46] @ 0x2e + 800e8aa: e00e b.n 800e8ca { ADV_TRACE_Buffer[writepos] = buf[idx]; - 800e884: 8dfb ldrh r3, [r7, #46] @ 0x2e - 800e886: 8aba ldrh r2, [r7, #20] - 800e888: 3330 adds r3, #48 @ 0x30 - 800e88a: 443b add r3, r7 - 800e88c: f813 1c18 ldrb.w r1, [r3, #-24] - 800e890: 4b15 ldr r3, [pc, #84] @ (800e8e8 ) - 800e892: 5499 strb r1, [r3, r2] + 800e8ac: 8dfb ldrh r3, [r7, #46] @ 0x2e + 800e8ae: 8aba ldrh r2, [r7, #20] + 800e8b0: 3330 adds r3, #48 @ 0x30 + 800e8b2: 443b add r3, r7 + 800e8b4: f813 1c18 ldrb.w r1, [r3, #-24] + 800e8b8: 4b15 ldr r3, [pc, #84] @ (800e910 ) + 800e8ba: 5499 strb r1, [r3, r2] writepos = writepos + 1u; - 800e894: 8abb ldrh r3, [r7, #20] - 800e896: 3301 adds r3, #1 - 800e898: b29b uxth r3, r3 - 800e89a: 82bb strh r3, [r7, #20] + 800e8bc: 8abb ldrh r3, [r7, #20] + 800e8be: 3301 adds r3, #1 + 800e8c0: b29b uxth r3, r3 + 800e8c2: 82bb strh r3, [r7, #20] for (idx = 0u; idx < timestamp_size; idx++) - 800e89c: 8dfb ldrh r3, [r7, #46] @ 0x2e - 800e89e: 3301 adds r3, #1 - 800e8a0: 85fb strh r3, [r7, #46] @ 0x2e - 800e8a2: 8afb ldrh r3, [r7, #22] - 800e8a4: 8dfa ldrh r2, [r7, #46] @ 0x2e - 800e8a6: 429a cmp r2, r3 - 800e8a8: d3ec bcc.n 800e884 + 800e8c4: 8dfb ldrh r3, [r7, #46] @ 0x2e + 800e8c6: 3301 adds r3, #1 + 800e8c8: 85fb strh r3, [r7, #46] @ 0x2e + 800e8ca: 8afb ldrh r3, [r7, #22] + 800e8cc: 8dfa ldrh r2, [r7, #46] @ 0x2e + 800e8ce: 429a cmp r2, r3 + 800e8d0: d3ec bcc.n 800e8ac } /* copy the data */ (void)UTIL_ADV_TRACE_VSNPRINTF((char *)(&ADV_TRACE_Buffer[writepos]), UTIL_ADV_TRACE_TMP_BUF_SIZE, strFormat, vaArgs); - 800e8aa: 8abb ldrh r3, [r7, #20] - 800e8ac: 461a mov r2, r3 - 800e8ae: 4b0e ldr r3, [pc, #56] @ (800e8e8 ) - 800e8b0: 18d0 adds r0, r2, r3 - 800e8b2: 6abb ldr r3, [r7, #40] @ 0x28 - 800e8b4: 6bfa ldr r2, [r7, #60] @ 0x3c - 800e8b6: f44f 7180 mov.w r1, #256 @ 0x100 - 800e8ba: f7ff fa59 bl 800dd70 + 800e8d2: 8abb ldrh r3, [r7, #20] + 800e8d4: 461a mov r2, r3 + 800e8d6: 4b0e ldr r3, [pc, #56] @ (800e910 ) + 800e8d8: 18d0 adds r0, r2, r3 + 800e8da: 6abb ldr r3, [r7, #40] @ 0x28 + 800e8dc: 6bfa ldr r2, [r7, #60] @ 0x3c + 800e8de: f44f 7180 mov.w r1, #256 @ 0x100 + 800e8e2: f7ff fa59 bl 800dd98 va_end(vaArgs); TRACE_UnLock(); - 800e8be: f000 f9df bl 800ec80 + 800e8e6: f000 f9df bl 800eca8 return TRACE_Send(); - 800e8c2: f000 f831 bl 800e928 - 800e8c6: 4603 mov r3, r0 - 800e8c8: e003 b.n 800e8d2 + 800e8ea: f000 f831 bl 800e950 + 800e8ee: 4603 mov r3, r0 + 800e8f0: e003 b.n 800e8fa } va_end(vaArgs); TRACE_UnLock(); - 800e8ca: f000 f9d9 bl 800ec80 + 800e8f2: f000 f9d9 bl 800eca8 ADV_TRACE_Ctx.OverRunStatus = TRACE_OVERRUN_INDICATION; } UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); #endif return UTIL_ADV_TRACE_MEM_FULL; - 800e8ce: f06f 0302 mvn.w r3, #2 + 800e8f6: f06f 0302 mvn.w r3, #2 buff_size += (uint16_t) UTIL_ADV_TRACE_VSNPRINTF((char* )(buf + buff_size), UTIL_ADV_TRACE_TMP_BUF_SIZE, strFormat, vaArgs); va_end(vaArgs); return UTIL_ADV_TRACE_Send(buf, buff_size); #endif } - 800e8d2: 4618 mov r0, r3 - 800e8d4: 3734 adds r7, #52 @ 0x34 - 800e8d6: 46bd mov sp, r7 - 800e8d8: e8bd 4080 ldmia.w sp!, {r7, lr} - 800e8dc: b001 add sp, #4 - 800e8de: 4770 bx lr - 800e8e0: 20000c34 .word 0x20000c34 - 800e8e4: 20000e4c .word 0x20000e4c - 800e8e8: 20000c4c .word 0x20000c4c + 800e8fa: 4618 mov r0, r3 + 800e8fc: 3734 adds r7, #52 @ 0x34 + 800e8fe: 46bd mov sp, r7 + 800e900: e8bd 4080 ldmia.w sp!, {r7, lr} + 800e904: b001 add sp, #4 + 800e906: 4770 bx lr + 800e908: 20000c6c .word 0x20000c6c + 800e90c: 20000e84 .word 0x20000e84 + 800e910: 20000c84 .word 0x20000c84 -0800e8ec : +0800e914 : } #endif #if defined(UTIL_ADV_TRACE_CONDITIONNAL) void UTIL_ADV_TRACE_RegisterTimeStampFunction(cb_timestamp *cb) { - 800e8ec: b480 push {r7} - 800e8ee: b083 sub sp, #12 - 800e8f0: af00 add r7, sp, #0 - 800e8f2: 6078 str r0, [r7, #4] + 800e914: b480 push {r7} + 800e916: b083 sub sp, #12 + 800e918: af00 add r7, sp, #0 + 800e91a: 6078 str r0, [r7, #4] ADV_TRACE_Ctx.timestamp_func = *cb; - 800e8f4: 4a03 ldr r2, [pc, #12] @ (800e904 ) - 800e8f6: 687b ldr r3, [r7, #4] - 800e8f8: 6053 str r3, [r2, #4] + 800e91c: 4a03 ldr r2, [pc, #12] @ (800e92c ) + 800e91e: 687b ldr r3, [r7, #4] + 800e920: 6053 str r3, [r2, #4] } - 800e8fa: bf00 nop - 800e8fc: 370c adds r7, #12 - 800e8fe: 46bd mov sp, r7 - 800e900: bc80 pop {r7} - 800e902: 4770 bx lr - 800e904: 20000c34 .word 0x20000c34 + 800e922: bf00 nop + 800e924: 370c adds r7, #12 + 800e926: 46bd mov sp, r7 + 800e928: bc80 pop {r7} + 800e92a: 4770 bx lr + 800e92c: 20000c6c .word 0x20000c6c -0800e908 : +0800e930 : void UTIL_ADV_TRACE_SetVerboseLevel(uint8_t Level) { - 800e908: b480 push {r7} - 800e90a: b083 sub sp, #12 - 800e90c: af00 add r7, sp, #0 - 800e90e: 4603 mov r3, r0 - 800e910: 71fb strb r3, [r7, #7] + 800e930: b480 push {r7} + 800e932: b083 sub sp, #12 + 800e934: af00 add r7, sp, #0 + 800e936: 4603 mov r3, r0 + 800e938: 71fb strb r3, [r7, #7] ADV_TRACE_Ctx.CurrentVerboseLevel = Level; - 800e912: 4a04 ldr r2, [pc, #16] @ (800e924 ) - 800e914: 79fb ldrb r3, [r7, #7] - 800e916: 7213 strb r3, [r2, #8] + 800e93a: 4a04 ldr r2, [pc, #16] @ (800e94c ) + 800e93c: 79fb ldrb r3, [r7, #7] + 800e93e: 7213 strb r3, [r2, #8] } - 800e918: bf00 nop - 800e91a: 370c adds r7, #12 - 800e91c: 46bd mov sp, r7 - 800e91e: bc80 pop {r7} - 800e920: 4770 bx lr - 800e922: bf00 nop - 800e924: 20000c34 .word 0x20000c34 + 800e940: bf00 nop + 800e942: 370c adds r7, #12 + 800e944: 46bd mov sp, r7 + 800e946: bc80 pop {r7} + 800e948: 4770 bx lr + 800e94a: bf00 nop + 800e94c: 20000c6c .word 0x20000c6c -0800e928 : +0800e950 : /** * @brief send the data of the trace to low layer * @retval Status based on @ref UTIL_ADV_TRACE_Status_t */ static UTIL_ADV_TRACE_Status_t TRACE_Send(void) { - 800e928: b580 push {r7, lr} - 800e92a: b088 sub sp, #32 - 800e92c: af00 add r7, sp, #0 + 800e950: b580 push {r7, lr} + 800e952: b088 sub sp, #32 + 800e954: af00 add r7, sp, #0 UTIL_ADV_TRACE_Status_t ret = UTIL_ADV_TRACE_OK; - 800e92e: 2300 movs r3, #0 - 800e930: 77fb strb r3, [r7, #31] + 800e956: 2300 movs r3, #0 + 800e958: 77fb strb r3, [r7, #31] uint8_t *ptr = NULL; - 800e932: 2300 movs r3, #0 - 800e934: 61bb str r3, [r7, #24] + 800e95a: 2300 movs r3, #0 + 800e95c: 61bb str r3, [r7, #24] __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800e936: f3ef 8310 mrs r3, PRIMASK - 800e93a: 613b str r3, [r7, #16] + 800e95e: f3ef 8310 mrs r3, PRIMASK + 800e962: 613b str r3, [r7, #16] return(result); - 800e93c: 693b ldr r3, [r7, #16] + 800e964: 693b ldr r3, [r7, #16] UTIL_ADV_TRACE_ENTER_CRITICAL_SECTION(); - 800e93e: 617b str r3, [r7, #20] + 800e966: 617b str r3, [r7, #20] __ASM volatile ("cpsid i" : : : "memory"); - 800e940: b672 cpsid i + 800e968: b672 cpsid i } - 800e942: bf00 nop + 800e96a: bf00 nop if(TRACE_IsLocked() == 0u) - 800e944: f000 f9ba bl 800ecbc - 800e948: 4603 mov r3, r0 - 800e94a: 2b00 cmp r3, #0 - 800e94c: d15d bne.n 800ea0a + 800e96c: f000 f9ba bl 800ece4 + 800e970: 4603 mov r3, r0 + 800e972: 2b00 cmp r3, #0 + 800e974: d15d bne.n 800ea32 { TRACE_Lock(); - 800e94e: f000 f979 bl 800ec44 + 800e976: f000 f979 bl 800ec6c if(ADV_TRACE_Ctx.TraceRdPtr != ADV_TRACE_Ctx.TraceWrPtr) - 800e952: 4b34 ldr r3, [pc, #208] @ (800ea24 ) - 800e954: 8a1a ldrh r2, [r3, #16] - 800e956: 4b33 ldr r3, [pc, #204] @ (800ea24 ) - 800e958: 8a5b ldrh r3, [r3, #18] - 800e95a: 429a cmp r2, r3 - 800e95c: d04d beq.n 800e9fa + 800e97a: 4b34 ldr r3, [pc, #208] @ (800ea4c ) + 800e97c: 8a1a ldrh r2, [r3, #16] + 800e97e: 4b33 ldr r3, [pc, #204] @ (800ea4c ) + 800e980: 8a5b ldrh r3, [r3, #18] + 800e982: 429a cmp r2, r3 + 800e984: d04d beq.n 800ea22 { #ifdef UTIL_ADV_TRACE_UNCHUNK_MODE if(TRACE_UNCHUNK_DETECTED == ADV_TRACE_Ctx.unchunk_status) - 800e95e: 4b31 ldr r3, [pc, #196] @ (800ea24 ) - 800e960: 789b ldrb r3, [r3, #2] - 800e962: 2b01 cmp r3, #1 - 800e964: d117 bne.n 800e996 + 800e986: 4b31 ldr r3, [pc, #196] @ (800ea4c ) + 800e988: 789b ldrb r3, [r3, #2] + 800e98a: 2b01 cmp r3, #1 + 800e98c: d117 bne.n 800e9be { ADV_TRACE_Ctx.TraceSentSize = (uint16_t) (ADV_TRACE_Ctx.unchunk_enabled - ADV_TRACE_Ctx.TraceRdPtr); - 800e966: 4b2f ldr r3, [pc, #188] @ (800ea24 ) - 800e968: 881a ldrh r2, [r3, #0] - 800e96a: 4b2e ldr r3, [pc, #184] @ (800ea24 ) - 800e96c: 8a1b ldrh r3, [r3, #16] - 800e96e: 1ad3 subs r3, r2, r3 - 800e970: b29a uxth r2, r3 - 800e972: 4b2c ldr r3, [pc, #176] @ (800ea24 ) - 800e974: 829a strh r2, [r3, #20] + 800e98e: 4b2f ldr r3, [pc, #188] @ (800ea4c ) + 800e990: 881a ldrh r2, [r3, #0] + 800e992: 4b2e ldr r3, [pc, #184] @ (800ea4c ) + 800e994: 8a1b ldrh r3, [r3, #16] + 800e996: 1ad3 subs r3, r2, r3 + 800e998: b29a uxth r2, r3 + 800e99a: 4b2c ldr r3, [pc, #176] @ (800ea4c ) + 800e99c: 829a strh r2, [r3, #20] ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_TRANSFER; - 800e976: 4b2b ldr r3, [pc, #172] @ (800ea24 ) - 800e978: 2202 movs r2, #2 - 800e97a: 709a strb r2, [r3, #2] + 800e99e: 4b2b ldr r3, [pc, #172] @ (800ea4c ) + 800e9a0: 2202 movs r2, #2 + 800e9a2: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.unchunk_enabled = 0; - 800e97c: 4b29 ldr r3, [pc, #164] @ (800ea24 ) - 800e97e: 2200 movs r2, #0 - 800e980: 801a strh r2, [r3, #0] + 800e9a4: 4b29 ldr r3, [pc, #164] @ (800ea4c ) + 800e9a6: 2200 movs r2, #0 + 800e9a8: 801a strh r2, [r3, #0] UTIL_ADV_TRACE_DEBUG("\nTRACE_TxCpltCallback::unchunk start(%d,%d)\n", ADV_TRACE_Ctx.unchunk_enabled, ADV_TRACE_Ctx.TraceRdPtr); if(0u == ADV_TRACE_Ctx.TraceSentSize) - 800e982: 4b28 ldr r3, [pc, #160] @ (800ea24 ) - 800e984: 8a9b ldrh r3, [r3, #20] - 800e986: 2b00 cmp r3, #0 - 800e988: d105 bne.n 800e996 + 800e9aa: 4b28 ldr r3, [pc, #160] @ (800ea4c ) + 800e9ac: 8a9b ldrh r3, [r3, #20] + 800e9ae: 2b00 cmp r3, #0 + 800e9b0: d105 bne.n 800e9be { ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_NONE; - 800e98a: 4b26 ldr r3, [pc, #152] @ (800ea24 ) - 800e98c: 2200 movs r2, #0 - 800e98e: 709a strb r2, [r3, #2] + 800e9b2: 4b26 ldr r3, [pc, #152] @ (800ea4c ) + 800e9b4: 2200 movs r2, #0 + 800e9b6: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.TraceRdPtr = 0; - 800e990: 4b24 ldr r3, [pc, #144] @ (800ea24 ) - 800e992: 2200 movs r2, #0 - 800e994: 821a strh r2, [r3, #16] + 800e9b8: 4b24 ldr r3, [pc, #144] @ (800ea4c ) + 800e9ba: 2200 movs r2, #0 + 800e9bc: 821a strh r2, [r3, #16] } } if(TRACE_UNCHUNK_NONE == ADV_TRACE_Ctx.unchunk_status) - 800e996: 4b23 ldr r3, [pc, #140] @ (800ea24 ) - 800e998: 789b ldrb r3, [r3, #2] - 800e99a: 2b00 cmp r3, #0 - 800e99c: d115 bne.n 800e9ca + 800e9be: 4b23 ldr r3, [pc, #140] @ (800ea4c ) + 800e9c0: 789b ldrb r3, [r3, #2] + 800e9c2: 2b00 cmp r3, #0 + 800e9c4: d115 bne.n 800e9f2 { #endif if(ADV_TRACE_Ctx.TraceWrPtr > ADV_TRACE_Ctx.TraceRdPtr) - 800e99e: 4b21 ldr r3, [pc, #132] @ (800ea24 ) - 800e9a0: 8a5a ldrh r2, [r3, #18] - 800e9a2: 4b20 ldr r3, [pc, #128] @ (800ea24 ) - 800e9a4: 8a1b ldrh r3, [r3, #16] - 800e9a6: 429a cmp r2, r3 - 800e9a8: d908 bls.n 800e9bc + 800e9c6: 4b21 ldr r3, [pc, #132] @ (800ea4c ) + 800e9c8: 8a5a ldrh r2, [r3, #18] + 800e9ca: 4b20 ldr r3, [pc, #128] @ (800ea4c ) + 800e9cc: 8a1b ldrh r3, [r3, #16] + 800e9ce: 429a cmp r2, r3 + 800e9d0: d908 bls.n 800e9e4 { ADV_TRACE_Ctx.TraceSentSize = ADV_TRACE_Ctx.TraceWrPtr - ADV_TRACE_Ctx.TraceRdPtr; - 800e9aa: 4b1e ldr r3, [pc, #120] @ (800ea24 ) - 800e9ac: 8a5a ldrh r2, [r3, #18] - 800e9ae: 4b1d ldr r3, [pc, #116] @ (800ea24 ) - 800e9b0: 8a1b ldrh r3, [r3, #16] - 800e9b2: 1ad3 subs r3, r2, r3 - 800e9b4: b29a uxth r2, r3 - 800e9b6: 4b1b ldr r3, [pc, #108] @ (800ea24 ) - 800e9b8: 829a strh r2, [r3, #20] - 800e9ba: e006 b.n 800e9ca + 800e9d2: 4b1e ldr r3, [pc, #120] @ (800ea4c ) + 800e9d4: 8a5a ldrh r2, [r3, #18] + 800e9d6: 4b1d ldr r3, [pc, #116] @ (800ea4c ) + 800e9d8: 8a1b ldrh r3, [r3, #16] + 800e9da: 1ad3 subs r3, r2, r3 + 800e9dc: b29a uxth r2, r3 + 800e9de: 4b1b ldr r3, [pc, #108] @ (800ea4c ) + 800e9e0: 829a strh r2, [r3, #20] + 800e9e2: e006 b.n 800e9f2 } else /* TraceRdPtr > TraceWrPtr */ { ADV_TRACE_Ctx.TraceSentSize = UTIL_ADV_TRACE_FIFO_SIZE - ADV_TRACE_Ctx.TraceRdPtr; - 800e9bc: 4b19 ldr r3, [pc, #100] @ (800ea24 ) - 800e9be: 8a1b ldrh r3, [r3, #16] - 800e9c0: f5c3 7300 rsb r3, r3, #512 @ 0x200 - 800e9c4: b29a uxth r2, r3 - 800e9c6: 4b17 ldr r3, [pc, #92] @ (800ea24 ) - 800e9c8: 829a strh r2, [r3, #20] + 800e9e4: 4b19 ldr r3, [pc, #100] @ (800ea4c ) + 800e9e6: 8a1b ldrh r3, [r3, #16] + 800e9e8: f5c3 7300 rsb r3, r3, #512 @ 0x200 + 800e9ec: b29a uxth r2, r3 + 800e9ee: 4b17 ldr r3, [pc, #92] @ (800ea4c ) + 800e9f0: 829a strh r2, [r3, #20] } #ifdef UTIL_ADV_TRACE_UNCHUNK_MODE } #endif ptr = &ADV_TRACE_Buffer[ADV_TRACE_Ctx.TraceRdPtr]; - 800e9ca: 4b16 ldr r3, [pc, #88] @ (800ea24 ) - 800e9cc: 8a1b ldrh r3, [r3, #16] - 800e9ce: 461a mov r2, r3 - 800e9d0: 4b15 ldr r3, [pc, #84] @ (800ea28 ) - 800e9d2: 4413 add r3, r2 - 800e9d4: 61bb str r3, [r7, #24] - 800e9d6: 697b ldr r3, [r7, #20] - 800e9d8: 60fb str r3, [r7, #12] + 800e9f2: 4b16 ldr r3, [pc, #88] @ (800ea4c ) + 800e9f4: 8a1b ldrh r3, [r3, #16] + 800e9f6: 461a mov r2, r3 + 800e9f8: 4b15 ldr r3, [pc, #84] @ (800ea50 ) + 800e9fa: 4413 add r3, r2 + 800e9fc: 61bb str r3, [r7, #24] + 800e9fe: 697b ldr r3, [r7, #20] + 800ea00: 60fb str r3, [r7, #12] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800e9da: 68fb ldr r3, [r7, #12] - 800e9dc: f383 8810 msr PRIMASK, r3 + 800ea02: 68fb ldr r3, [r7, #12] + 800ea04: f383 8810 msr PRIMASK, r3 } - 800e9e0: bf00 nop + 800ea08: bf00 nop UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); UTIL_ADV_TRACE_PreSendHook(); - 800e9e2: f7f2 f901 bl 8000be8 + 800ea0a: f7f2 f8ed bl 8000be8 UTIL_ADV_TRACE_DEBUG("\n--TRACE_Send(%d-%d)--\n", ADV_TRACE_Ctx.TraceRdPtr, ADV_TRACE_Ctx.TraceSentSize); ret = UTIL_TraceDriver.Send(ptr, ADV_TRACE_Ctx.TraceSentSize); - 800e9e6: 4b11 ldr r3, [pc, #68] @ (800ea2c ) - 800e9e8: 68db ldr r3, [r3, #12] - 800e9ea: 4a0e ldr r2, [pc, #56] @ (800ea24 ) - 800e9ec: 8a92 ldrh r2, [r2, #20] - 800e9ee: 4611 mov r1, r2 - 800e9f0: 69b8 ldr r0, [r7, #24] - 800e9f2: 4798 blx r3 - 800e9f4: 4603 mov r3, r0 - 800e9f6: 77fb strb r3, [r7, #31] - 800e9f8: e00d b.n 800ea16 + 800ea0e: 4b11 ldr r3, [pc, #68] @ (800ea54 ) + 800ea10: 68db ldr r3, [r3, #12] + 800ea12: 4a0e ldr r2, [pc, #56] @ (800ea4c ) + 800ea14: 8a92 ldrh r2, [r2, #20] + 800ea16: 4611 mov r1, r2 + 800ea18: 69b8 ldr r0, [r7, #24] + 800ea1a: 4798 blx r3 + 800ea1c: 4603 mov r3, r0 + 800ea1e: 77fb strb r3, [r7, #31] + 800ea20: e00d b.n 800ea3e } else { TRACE_UnLock(); - 800e9fa: f000 f941 bl 800ec80 - 800e9fe: 697b ldr r3, [r7, #20] - 800ea00: 60bb str r3, [r7, #8] + 800ea22: f000 f941 bl 800eca8 + 800ea26: 697b ldr r3, [r7, #20] + 800ea28: 60bb str r3, [r7, #8] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800ea02: 68bb ldr r3, [r7, #8] - 800ea04: f383 8810 msr PRIMASK, r3 + 800ea2a: 68bb ldr r3, [r7, #8] + 800ea2c: f383 8810 msr PRIMASK, r3 } - 800ea08: e005 b.n 800ea16 - 800ea0a: 697b ldr r3, [r7, #20] - 800ea0c: 607b str r3, [r7, #4] + 800ea30: e005 b.n 800ea3e + 800ea32: 697b ldr r3, [r7, #20] + 800ea34: 607b str r3, [r7, #4] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800ea0e: 687b ldr r3, [r7, #4] - 800ea10: f383 8810 msr PRIMASK, r3 + 800ea36: 687b ldr r3, [r7, #4] + 800ea38: f383 8810 msr PRIMASK, r3 } - 800ea14: bf00 nop + 800ea3c: bf00 nop else { UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); } return ret; - 800ea16: f997 301f ldrsb.w r3, [r7, #31] + 800ea3e: f997 301f ldrsb.w r3, [r7, #31] } - 800ea1a: 4618 mov r0, r3 - 800ea1c: 3720 adds r7, #32 - 800ea1e: 46bd mov sp, r7 - 800ea20: bd80 pop {r7, pc} - 800ea22: bf00 nop - 800ea24: 20000c34 .word 0x20000c34 - 800ea28: 20000c4c .word 0x20000c4c - 800ea2c: 0801038c .word 0x0801038c + 800ea42: 4618 mov r0, r3 + 800ea44: 3720 adds r7, #32 + 800ea46: 46bd mov sp, r7 + 800ea48: bd80 pop {r7, pc} + 800ea4a: bf00 nop + 800ea4c: 20000c6c .word 0x20000c6c + 800ea50: 20000c84 .word 0x20000c84 + 800ea54: 080103b4 .word 0x080103b4 -0800ea30 : +0800ea58 : * @brief Tx callback called by the low layer level to inform a transfer complete * @param Ptr pointer not used only for HAL compatibility * @retval none */ static void TRACE_TxCpltCallback(void *Ptr) { - 800ea30: b580 push {r7, lr} - 800ea32: b088 sub sp, #32 - 800ea34: af00 add r7, sp, #0 - 800ea36: 6078 str r0, [r7, #4] + 800ea58: b580 push {r7, lr} + 800ea5a: b088 sub sp, #32 + 800ea5c: af00 add r7, sp, #0 + 800ea5e: 6078 str r0, [r7, #4] uint8_t *ptr = NULL; - 800ea38: 2300 movs r3, #0 - 800ea3a: 61fb str r3, [r7, #28] + 800ea60: 2300 movs r3, #0 + 800ea62: 61fb str r3, [r7, #28] __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800ea3c: f3ef 8310 mrs r3, PRIMASK - 800ea40: 617b str r3, [r7, #20] + 800ea64: f3ef 8310 mrs r3, PRIMASK + 800ea68: 617b str r3, [r7, #20] return(result); - 800ea42: 697b ldr r3, [r7, #20] + 800ea6a: 697b ldr r3, [r7, #20] UTIL_ADV_TRACE_ENTER_CRITICAL_SECTION(); - 800ea44: 61bb str r3, [r7, #24] + 800ea6c: 61bb str r3, [r7, #24] __ASM volatile ("cpsid i" : : : "memory"); - 800ea46: b672 cpsid i + 800ea6e: b672 cpsid i } - 800ea48: bf00 nop + 800ea70: bf00 nop ADV_TRACE_Ctx.TraceSentSize = 0u; } #endif #if defined(UTIL_ADV_TRACE_UNCHUNK_MODE) if(TRACE_UNCHUNK_TRANSFER == ADV_TRACE_Ctx.unchunk_status) - 800ea4a: 4b3c ldr r3, [pc, #240] @ (800eb3c ) - 800ea4c: 789b ldrb r3, [r3, #2] - 800ea4e: 2b02 cmp r3, #2 - 800ea50: d106 bne.n 800ea60 + 800ea72: 4b3c ldr r3, [pc, #240] @ (800eb64 ) + 800ea74: 789b ldrb r3, [r3, #2] + 800ea76: 2b02 cmp r3, #2 + 800ea78: d106 bne.n 800ea88 { ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_NONE; - 800ea52: 4b3a ldr r3, [pc, #232] @ (800eb3c ) - 800ea54: 2200 movs r2, #0 - 800ea56: 709a strb r2, [r3, #2] + 800ea7a: 4b3a ldr r3, [pc, #232] @ (800eb64 ) + 800ea7c: 2200 movs r2, #0 + 800ea7e: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.TraceRdPtr = 0; - 800ea58: 4b38 ldr r3, [pc, #224] @ (800eb3c ) - 800ea5a: 2200 movs r2, #0 - 800ea5c: 821a strh r2, [r3, #16] - 800ea5e: e00a b.n 800ea76 + 800ea80: 4b38 ldr r3, [pc, #224] @ (800eb64 ) + 800ea82: 2200 movs r2, #0 + 800ea84: 821a strh r2, [r3, #16] + 800ea86: e00a b.n 800ea9e UTIL_ADV_TRACE_DEBUG("\nTRACE_TxCpltCallback::unchunk complete\n"); } else { ADV_TRACE_Ctx.TraceRdPtr = (ADV_TRACE_Ctx.TraceRdPtr + ADV_TRACE_Ctx.TraceSentSize) % UTIL_ADV_TRACE_FIFO_SIZE; - 800ea60: 4b36 ldr r3, [pc, #216] @ (800eb3c ) - 800ea62: 8a1a ldrh r2, [r3, #16] - 800ea64: 4b35 ldr r3, [pc, #212] @ (800eb3c ) - 800ea66: 8a9b ldrh r3, [r3, #20] - 800ea68: 4413 add r3, r2 - 800ea6a: b29b uxth r3, r3 - 800ea6c: f3c3 0308 ubfx r3, r3, #0, #9 - 800ea70: b29a uxth r2, r3 - 800ea72: 4b32 ldr r3, [pc, #200] @ (800eb3c ) - 800ea74: 821a strh r2, [r3, #16] + 800ea88: 4b36 ldr r3, [pc, #216] @ (800eb64 ) + 800ea8a: 8a1a ldrh r2, [r3, #16] + 800ea8c: 4b35 ldr r3, [pc, #212] @ (800eb64 ) + 800ea8e: 8a9b ldrh r3, [r3, #20] + 800ea90: 4413 add r3, r2 + 800ea92: b29b uxth r3, r3 + 800ea94: f3c3 0308 ubfx r3, r3, #0, #9 + 800ea98: b29a uxth r2, r3 + 800ea9a: 4b32 ldr r3, [pc, #200] @ (800eb64 ) + 800ea9c: 821a strh r2, [r3, #16] UTIL_TraceDriver.Send(ptr, ADV_TRACE_Ctx.TraceSentSize); return; } #endif if((ADV_TRACE_Ctx.TraceRdPtr != ADV_TRACE_Ctx.TraceWrPtr) && (1u == ADV_TRACE_Ctx.TraceLock)) - 800ea76: 4b31 ldr r3, [pc, #196] @ (800eb3c ) - 800ea78: 8a1a ldrh r2, [r3, #16] - 800ea7a: 4b30 ldr r3, [pc, #192] @ (800eb3c ) - 800ea7c: 8a5b ldrh r3, [r3, #18] - 800ea7e: 429a cmp r2, r3 - 800ea80: d04d beq.n 800eb1e - 800ea82: 4b2e ldr r3, [pc, #184] @ (800eb3c ) - 800ea84: 8adb ldrh r3, [r3, #22] - 800ea86: 2b01 cmp r3, #1 - 800ea88: d149 bne.n 800eb1e + 800ea9e: 4b31 ldr r3, [pc, #196] @ (800eb64 ) + 800eaa0: 8a1a ldrh r2, [r3, #16] + 800eaa2: 4b30 ldr r3, [pc, #192] @ (800eb64 ) + 800eaa4: 8a5b ldrh r3, [r3, #18] + 800eaa6: 429a cmp r2, r3 + 800eaa8: d04d beq.n 800eb46 + 800eaaa: 4b2e ldr r3, [pc, #184] @ (800eb64 ) + 800eaac: 8adb ldrh r3, [r3, #22] + 800eaae: 2b01 cmp r3, #1 + 800eab0: d149 bne.n 800eb46 { #ifdef UTIL_ADV_TRACE_UNCHUNK_MODE if(TRACE_UNCHUNK_DETECTED == ADV_TRACE_Ctx.unchunk_status) - 800ea8a: 4b2c ldr r3, [pc, #176] @ (800eb3c ) - 800ea8c: 789b ldrb r3, [r3, #2] - 800ea8e: 2b01 cmp r3, #1 - 800ea90: d117 bne.n 800eac2 + 800eab2: 4b2c ldr r3, [pc, #176] @ (800eb64 ) + 800eab4: 789b ldrb r3, [r3, #2] + 800eab6: 2b01 cmp r3, #1 + 800eab8: d117 bne.n 800eaea { ADV_TRACE_Ctx.TraceSentSize = ADV_TRACE_Ctx.unchunk_enabled - ADV_TRACE_Ctx.TraceRdPtr; - 800ea92: 4b2a ldr r3, [pc, #168] @ (800eb3c ) - 800ea94: 881a ldrh r2, [r3, #0] - 800ea96: 4b29 ldr r3, [pc, #164] @ (800eb3c ) - 800ea98: 8a1b ldrh r3, [r3, #16] - 800ea9a: 1ad3 subs r3, r2, r3 - 800ea9c: b29a uxth r2, r3 - 800ea9e: 4b27 ldr r3, [pc, #156] @ (800eb3c ) - 800eaa0: 829a strh r2, [r3, #20] + 800eaba: 4b2a ldr r3, [pc, #168] @ (800eb64 ) + 800eabc: 881a ldrh r2, [r3, #0] + 800eabe: 4b29 ldr r3, [pc, #164] @ (800eb64 ) + 800eac0: 8a1b ldrh r3, [r3, #16] + 800eac2: 1ad3 subs r3, r2, r3 + 800eac4: b29a uxth r2, r3 + 800eac6: 4b27 ldr r3, [pc, #156] @ (800eb64 ) + 800eac8: 829a strh r2, [r3, #20] ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_TRANSFER; - 800eaa2: 4b26 ldr r3, [pc, #152] @ (800eb3c ) - 800eaa4: 2202 movs r2, #2 - 800eaa6: 709a strb r2, [r3, #2] + 800eaca: 4b26 ldr r3, [pc, #152] @ (800eb64 ) + 800eacc: 2202 movs r2, #2 + 800eace: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.unchunk_enabled = 0; - 800eaa8: 4b24 ldr r3, [pc, #144] @ (800eb3c ) - 800eaaa: 2200 movs r2, #0 - 800eaac: 801a strh r2, [r3, #0] + 800ead0: 4b24 ldr r3, [pc, #144] @ (800eb64 ) + 800ead2: 2200 movs r2, #0 + 800ead4: 801a strh r2, [r3, #0] UTIL_ADV_TRACE_DEBUG("\nTRACE_TxCpltCallback::unchunk start(%d,%d)\n", ADV_TRACE_Ctx.unchunk_enabled, ADV_TRACE_Ctx.TraceRdPtr); if(0u == ADV_TRACE_Ctx.TraceSentSize) - 800eaae: 4b23 ldr r3, [pc, #140] @ (800eb3c ) - 800eab0: 8a9b ldrh r3, [r3, #20] - 800eab2: 2b00 cmp r3, #0 - 800eab4: d105 bne.n 800eac2 + 800ead6: 4b23 ldr r3, [pc, #140] @ (800eb64 ) + 800ead8: 8a9b ldrh r3, [r3, #20] + 800eada: 2b00 cmp r3, #0 + 800eadc: d105 bne.n 800eaea { /* this case occurs when an ongoing write aligned the Rd position with chunk position */ /* in that case the unchunk is forgot */ ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_NONE; - 800eab6: 4b21 ldr r3, [pc, #132] @ (800eb3c ) - 800eab8: 2200 movs r2, #0 - 800eaba: 709a strb r2, [r3, #2] + 800eade: 4b21 ldr r3, [pc, #132] @ (800eb64 ) + 800eae0: 2200 movs r2, #0 + 800eae2: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.TraceRdPtr = 0; - 800eabc: 4b1f ldr r3, [pc, #124] @ (800eb3c ) - 800eabe: 2200 movs r2, #0 - 800eac0: 821a strh r2, [r3, #16] + 800eae4: 4b1f ldr r3, [pc, #124] @ (800eb64 ) + 800eae6: 2200 movs r2, #0 + 800eae8: 821a strh r2, [r3, #16] } } if(TRACE_UNCHUNK_NONE == ADV_TRACE_Ctx.unchunk_status) - 800eac2: 4b1e ldr r3, [pc, #120] @ (800eb3c ) - 800eac4: 789b ldrb r3, [r3, #2] - 800eac6: 2b00 cmp r3, #0 - 800eac8: d115 bne.n 800eaf6 + 800eaea: 4b1e ldr r3, [pc, #120] @ (800eb64 ) + 800eaec: 789b ldrb r3, [r3, #2] + 800eaee: 2b00 cmp r3, #0 + 800eaf0: d115 bne.n 800eb1e { #endif if(ADV_TRACE_Ctx.TraceWrPtr > ADV_TRACE_Ctx.TraceRdPtr) - 800eaca: 4b1c ldr r3, [pc, #112] @ (800eb3c ) - 800eacc: 8a5a ldrh r2, [r3, #18] - 800eace: 4b1b ldr r3, [pc, #108] @ (800eb3c ) - 800ead0: 8a1b ldrh r3, [r3, #16] - 800ead2: 429a cmp r2, r3 - 800ead4: d908 bls.n 800eae8 + 800eaf2: 4b1c ldr r3, [pc, #112] @ (800eb64 ) + 800eaf4: 8a5a ldrh r2, [r3, #18] + 800eaf6: 4b1b ldr r3, [pc, #108] @ (800eb64 ) + 800eaf8: 8a1b ldrh r3, [r3, #16] + 800eafa: 429a cmp r2, r3 + 800eafc: d908 bls.n 800eb10 { ADV_TRACE_Ctx.TraceSentSize = ADV_TRACE_Ctx.TraceWrPtr - ADV_TRACE_Ctx.TraceRdPtr; - 800ead6: 4b19 ldr r3, [pc, #100] @ (800eb3c ) - 800ead8: 8a5a ldrh r2, [r3, #18] - 800eada: 4b18 ldr r3, [pc, #96] @ (800eb3c ) - 800eadc: 8a1b ldrh r3, [r3, #16] - 800eade: 1ad3 subs r3, r2, r3 - 800eae0: b29a uxth r2, r3 - 800eae2: 4b16 ldr r3, [pc, #88] @ (800eb3c ) - 800eae4: 829a strh r2, [r3, #20] - 800eae6: e006 b.n 800eaf6 + 800eafe: 4b19 ldr r3, [pc, #100] @ (800eb64 ) + 800eb00: 8a5a ldrh r2, [r3, #18] + 800eb02: 4b18 ldr r3, [pc, #96] @ (800eb64 ) + 800eb04: 8a1b ldrh r3, [r3, #16] + 800eb06: 1ad3 subs r3, r2, r3 + 800eb08: b29a uxth r2, r3 + 800eb0a: 4b16 ldr r3, [pc, #88] @ (800eb64 ) + 800eb0c: 829a strh r2, [r3, #20] + 800eb0e: e006 b.n 800eb1e } else /* TraceRdPtr > TraceWrPtr */ { ADV_TRACE_Ctx.TraceSentSize = UTIL_ADV_TRACE_FIFO_SIZE - ADV_TRACE_Ctx.TraceRdPtr; - 800eae8: 4b14 ldr r3, [pc, #80] @ (800eb3c ) - 800eaea: 8a1b ldrh r3, [r3, #16] - 800eaec: f5c3 7300 rsb r3, r3, #512 @ 0x200 - 800eaf0: b29a uxth r2, r3 - 800eaf2: 4b12 ldr r3, [pc, #72] @ (800eb3c ) - 800eaf4: 829a strh r2, [r3, #20] + 800eb10: 4b14 ldr r3, [pc, #80] @ (800eb64 ) + 800eb12: 8a1b ldrh r3, [r3, #16] + 800eb14: f5c3 7300 rsb r3, r3, #512 @ 0x200 + 800eb18: b29a uxth r2, r3 + 800eb1a: 4b12 ldr r3, [pc, #72] @ (800eb64 ) + 800eb1c: 829a strh r2, [r3, #20] } #ifdef UTIL_ADV_TRACE_UNCHUNK_MODE } #endif ptr = &ADV_TRACE_Buffer[ADV_TRACE_Ctx.TraceRdPtr]; - 800eaf6: 4b11 ldr r3, [pc, #68] @ (800eb3c ) - 800eaf8: 8a1b ldrh r3, [r3, #16] - 800eafa: 461a mov r2, r3 - 800eafc: 4b10 ldr r3, [pc, #64] @ (800eb40 ) - 800eafe: 4413 add r3, r2 - 800eb00: 61fb str r3, [r7, #28] - 800eb02: 69bb ldr r3, [r7, #24] - 800eb04: 613b str r3, [r7, #16] + 800eb1e: 4b11 ldr r3, [pc, #68] @ (800eb64 ) + 800eb20: 8a1b ldrh r3, [r3, #16] + 800eb22: 461a mov r2, r3 + 800eb24: 4b10 ldr r3, [pc, #64] @ (800eb68 ) + 800eb26: 4413 add r3, r2 + 800eb28: 61fb str r3, [r7, #28] + 800eb2a: 69bb ldr r3, [r7, #24] + 800eb2c: 613b str r3, [r7, #16] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800eb06: 693b ldr r3, [r7, #16] - 800eb08: f383 8810 msr PRIMASK, r3 + 800eb2e: 693b ldr r3, [r7, #16] + 800eb30: f383 8810 msr PRIMASK, r3 } - 800eb0c: bf00 nop + 800eb34: bf00 nop UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); UTIL_ADV_TRACE_DEBUG("\n--TRACE_Send(%d-%d)--\n", ADV_TRACE_Ctx.TraceRdPtr, ADV_TRACE_Ctx.TraceSentSize); UTIL_TraceDriver.Send(ptr, ADV_TRACE_Ctx.TraceSentSize); - 800eb0e: 4b0d ldr r3, [pc, #52] @ (800eb44 ) - 800eb10: 68db ldr r3, [r3, #12] - 800eb12: 4a0a ldr r2, [pc, #40] @ (800eb3c ) - 800eb14: 8a92 ldrh r2, [r2, #20] - 800eb16: 4611 mov r1, r2 - 800eb18: 69f8 ldr r0, [r7, #28] - 800eb1a: 4798 blx r3 - 800eb1c: e00a b.n 800eb34 - 800eb1e: 69bb ldr r3, [r7, #24] - 800eb20: 60fb str r3, [r7, #12] + 800eb36: 4b0d ldr r3, [pc, #52] @ (800eb6c ) + 800eb38: 68db ldr r3, [r3, #12] + 800eb3a: 4a0a ldr r2, [pc, #40] @ (800eb64 ) + 800eb3c: 8a92 ldrh r2, [r2, #20] + 800eb3e: 4611 mov r1, r2 + 800eb40: 69f8 ldr r0, [r7, #28] + 800eb42: 4798 blx r3 + 800eb44: e00a b.n 800eb5c + 800eb46: 69bb ldr r3, [r7, #24] + 800eb48: 60fb str r3, [r7, #12] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800eb22: 68fb ldr r3, [r7, #12] - 800eb24: f383 8810 msr PRIMASK, r3 + 800eb4a: 68fb ldr r3, [r7, #12] + 800eb4c: f383 8810 msr PRIMASK, r3 } - 800eb28: bf00 nop + 800eb50: bf00 nop } else { UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); UTIL_ADV_TRACE_PostSendHook(); - 800eb2a: f7f2 f865 bl 8000bf8 + 800eb52: f7f2 f851 bl 8000bf8 TRACE_UnLock(); - 800eb2e: f000 f8a7 bl 800ec80 + 800eb56: f000 f8a7 bl 800eca8 } } - 800eb32: bf00 nop - 800eb34: bf00 nop - 800eb36: 3720 adds r7, #32 - 800eb38: 46bd mov sp, r7 - 800eb3a: bd80 pop {r7, pc} - 800eb3c: 20000c34 .word 0x20000c34 - 800eb40: 20000c4c .word 0x20000c4c - 800eb44: 0801038c .word 0x0801038c + 800eb5a: bf00 nop + 800eb5c: bf00 nop + 800eb5e: 3720 adds r7, #32 + 800eb60: 46bd mov sp, r7 + 800eb62: bd80 pop {r7, pc} + 800eb64: 20000c6c .word 0x20000c6c + 800eb68: 20000c84 .word 0x20000c84 + 800eb6c: 080103b4 .word 0x080103b4 -0800eb48 : +0800eb70 : * @param Size to allocate within fifo * @param Pos position within the fifo * @retval write position inside the buffer is -1 no space available. */ static int16_t TRACE_AllocateBufer(uint16_t Size, uint16_t *Pos) { - 800eb48: b480 push {r7} - 800eb4a: b087 sub sp, #28 - 800eb4c: af00 add r7, sp, #0 - 800eb4e: 4603 mov r3, r0 - 800eb50: 6039 str r1, [r7, #0] - 800eb52: 80fb strh r3, [r7, #6] + 800eb70: b480 push {r7} + 800eb72: b087 sub sp, #28 + 800eb74: af00 add r7, sp, #0 + 800eb76: 4603 mov r3, r0 + 800eb78: 6039 str r1, [r7, #0] + 800eb7a: 80fb strh r3, [r7, #6] uint16_t freesize; int16_t ret = -1; - 800eb54: f64f 73ff movw r3, #65535 @ 0xffff - 800eb58: 82bb strh r3, [r7, #20] + 800eb7c: f64f 73ff movw r3, #65535 @ 0xffff + 800eb80: 82bb strh r3, [r7, #20] __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800eb5a: f3ef 8310 mrs r3, PRIMASK - 800eb5e: 60fb str r3, [r7, #12] + 800eb82: f3ef 8310 mrs r3, PRIMASK + 800eb86: 60fb str r3, [r7, #12] return(result); - 800eb60: 68fb ldr r3, [r7, #12] + 800eb88: 68fb ldr r3, [r7, #12] UTIL_ADV_TRACE_ENTER_CRITICAL_SECTION(); - 800eb62: 613b str r3, [r7, #16] + 800eb8a: 613b str r3, [r7, #16] __ASM volatile ("cpsid i" : : : "memory"); - 800eb64: b672 cpsid i + 800eb8c: b672 cpsid i } - 800eb66: bf00 nop + 800eb8e: bf00 nop if(ADV_TRACE_Ctx.TraceWrPtr == ADV_TRACE_Ctx.TraceRdPtr) - 800eb68: 4b35 ldr r3, [pc, #212] @ (800ec40 ) - 800eb6a: 8a5a ldrh r2, [r3, #18] - 800eb6c: 4b34 ldr r3, [pc, #208] @ (800ec40 ) - 800eb6e: 8a1b ldrh r3, [r3, #16] - 800eb70: 429a cmp r2, r3 - 800eb72: d11b bne.n 800ebac + 800eb90: 4b35 ldr r3, [pc, #212] @ (800ec68 ) + 800eb92: 8a5a ldrh r2, [r3, #18] + 800eb94: 4b34 ldr r3, [pc, #208] @ (800ec68 ) + 800eb96: 8a1b ldrh r3, [r3, #16] + 800eb98: 429a cmp r2, r3 + 800eb9a: d11b bne.n 800ebd4 { #ifdef UTIL_ADV_TRACE_UNCHUNK_MODE freesize = (uint16_t)(UTIL_ADV_TRACE_FIFO_SIZE - ADV_TRACE_Ctx.TraceWrPtr); - 800eb74: 4b32 ldr r3, [pc, #200] @ (800ec40 ) - 800eb76: 8a5b ldrh r3, [r3, #18] - 800eb78: f5c3 7300 rsb r3, r3, #512 @ 0x200 - 800eb7c: 82fb strh r3, [r7, #22] + 800eb9c: 4b32 ldr r3, [pc, #200] @ (800ec68 ) + 800eb9e: 8a5b ldrh r3, [r3, #18] + 800eba0: f5c3 7300 rsb r3, r3, #512 @ 0x200 + 800eba4: 82fb strh r3, [r7, #22] if((Size >= freesize) && (ADV_TRACE_Ctx.TraceRdPtr > Size)) - 800eb7e: 88fa ldrh r2, [r7, #6] - 800eb80: 8afb ldrh r3, [r7, #22] - 800eb82: 429a cmp r2, r3 - 800eb84: d33a bcc.n 800ebfc - 800eb86: 4b2e ldr r3, [pc, #184] @ (800ec40 ) - 800eb88: 8a1b ldrh r3, [r3, #16] - 800eb8a: 88fa ldrh r2, [r7, #6] - 800eb8c: 429a cmp r2, r3 - 800eb8e: d235 bcs.n 800ebfc + 800eba6: 88fa ldrh r2, [r7, #6] + 800eba8: 8afb ldrh r3, [r7, #22] + 800ebaa: 429a cmp r2, r3 + 800ebac: d33a bcc.n 800ec24 + 800ebae: 4b2e ldr r3, [pc, #184] @ (800ec68 ) + 800ebb0: 8a1b ldrh r3, [r3, #16] + 800ebb2: 88fa ldrh r2, [r7, #6] + 800ebb4: 429a cmp r2, r3 + 800ebb6: d235 bcs.n 800ec24 { ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_DETECTED; - 800eb90: 4b2b ldr r3, [pc, #172] @ (800ec40 ) - 800eb92: 2201 movs r2, #1 - 800eb94: 709a strb r2, [r3, #2] + 800ebb8: 4b2b ldr r3, [pc, #172] @ (800ec68 ) + 800ebba: 2201 movs r2, #1 + 800ebbc: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.unchunk_enabled = ADV_TRACE_Ctx.TraceWrPtr; - 800eb96: 4b2a ldr r3, [pc, #168] @ (800ec40 ) - 800eb98: 8a5a ldrh r2, [r3, #18] - 800eb9a: 4b29 ldr r3, [pc, #164] @ (800ec40 ) - 800eb9c: 801a strh r2, [r3, #0] + 800ebbe: 4b2a ldr r3, [pc, #168] @ (800ec68 ) + 800ebc0: 8a5a ldrh r2, [r3, #18] + 800ebc2: 4b29 ldr r3, [pc, #164] @ (800ec68 ) + 800ebc4: 801a strh r2, [r3, #0] freesize = ADV_TRACE_Ctx.TraceRdPtr; - 800eb9e: 4b28 ldr r3, [pc, #160] @ (800ec40 ) - 800eba0: 8a1b ldrh r3, [r3, #16] - 800eba2: 82fb strh r3, [r7, #22] + 800ebc6: 4b28 ldr r3, [pc, #160] @ (800ec68 ) + 800ebc8: 8a1b ldrh r3, [r3, #16] + 800ebca: 82fb strh r3, [r7, #22] ADV_TRACE_Ctx.TraceWrPtr = 0; - 800eba4: 4b26 ldr r3, [pc, #152] @ (800ec40 ) - 800eba6: 2200 movs r2, #0 - 800eba8: 825a strh r2, [r3, #18] - 800ebaa: e027 b.n 800ebfc + 800ebcc: 4b26 ldr r3, [pc, #152] @ (800ec68 ) + 800ebce: 2200 movs r2, #0 + 800ebd0: 825a strh r2, [r3, #18] + 800ebd2: e027 b.n 800ec24 #endif } else { #ifdef UTIL_ADV_TRACE_UNCHUNK_MODE if (ADV_TRACE_Ctx.TraceWrPtr > ADV_TRACE_Ctx.TraceRdPtr) - 800ebac: 4b24 ldr r3, [pc, #144] @ (800ec40 ) - 800ebae: 8a5a ldrh r2, [r3, #18] - 800ebb0: 4b23 ldr r3, [pc, #140] @ (800ec40 ) - 800ebb2: 8a1b ldrh r3, [r3, #16] - 800ebb4: 429a cmp r2, r3 - 800ebb6: d91b bls.n 800ebf0 + 800ebd4: 4b24 ldr r3, [pc, #144] @ (800ec68 ) + 800ebd6: 8a5a ldrh r2, [r3, #18] + 800ebd8: 4b23 ldr r3, [pc, #140] @ (800ec68 ) + 800ebda: 8a1b ldrh r3, [r3, #16] + 800ebdc: 429a cmp r2, r3 + 800ebde: d91b bls.n 800ec18 { freesize = (uint16_t)(UTIL_ADV_TRACE_FIFO_SIZE - ADV_TRACE_Ctx.TraceWrPtr); - 800ebb8: 4b21 ldr r3, [pc, #132] @ (800ec40 ) - 800ebba: 8a5b ldrh r3, [r3, #18] - 800ebbc: f5c3 7300 rsb r3, r3, #512 @ 0x200 - 800ebc0: 82fb strh r3, [r7, #22] + 800ebe0: 4b21 ldr r3, [pc, #132] @ (800ec68 ) + 800ebe2: 8a5b ldrh r3, [r3, #18] + 800ebe4: f5c3 7300 rsb r3, r3, #512 @ 0x200 + 800ebe8: 82fb strh r3, [r7, #22] if((Size >= freesize) && (ADV_TRACE_Ctx.TraceRdPtr > Size)) - 800ebc2: 88fa ldrh r2, [r7, #6] - 800ebc4: 8afb ldrh r3, [r7, #22] - 800ebc6: 429a cmp r2, r3 - 800ebc8: d318 bcc.n 800ebfc - 800ebca: 4b1d ldr r3, [pc, #116] @ (800ec40 ) - 800ebcc: 8a1b ldrh r3, [r3, #16] - 800ebce: 88fa ldrh r2, [r7, #6] - 800ebd0: 429a cmp r2, r3 - 800ebd2: d213 bcs.n 800ebfc + 800ebea: 88fa ldrh r2, [r7, #6] + 800ebec: 8afb ldrh r3, [r7, #22] + 800ebee: 429a cmp r2, r3 + 800ebf0: d318 bcc.n 800ec24 + 800ebf2: 4b1d ldr r3, [pc, #116] @ (800ec68 ) + 800ebf4: 8a1b ldrh r3, [r3, #16] + 800ebf6: 88fa ldrh r2, [r7, #6] + 800ebf8: 429a cmp r2, r3 + 800ebfa: d213 bcs.n 800ec24 { ADV_TRACE_Ctx.unchunk_status = TRACE_UNCHUNK_DETECTED; - 800ebd4: 4b1a ldr r3, [pc, #104] @ (800ec40 ) - 800ebd6: 2201 movs r2, #1 - 800ebd8: 709a strb r2, [r3, #2] + 800ebfc: 4b1a ldr r3, [pc, #104] @ (800ec68 ) + 800ebfe: 2201 movs r2, #1 + 800ec00: 709a strb r2, [r3, #2] ADV_TRACE_Ctx.unchunk_enabled = ADV_TRACE_Ctx.TraceWrPtr; - 800ebda: 4b19 ldr r3, [pc, #100] @ (800ec40 ) - 800ebdc: 8a5a ldrh r2, [r3, #18] - 800ebde: 4b18 ldr r3, [pc, #96] @ (800ec40 ) - 800ebe0: 801a strh r2, [r3, #0] + 800ec02: 4b19 ldr r3, [pc, #100] @ (800ec68 ) + 800ec04: 8a5a ldrh r2, [r3, #18] + 800ec06: 4b18 ldr r3, [pc, #96] @ (800ec68 ) + 800ec08: 801a strh r2, [r3, #0] freesize = ADV_TRACE_Ctx.TraceRdPtr; - 800ebe2: 4b17 ldr r3, [pc, #92] @ (800ec40 ) - 800ebe4: 8a1b ldrh r3, [r3, #16] - 800ebe6: 82fb strh r3, [r7, #22] + 800ec0a: 4b17 ldr r3, [pc, #92] @ (800ec68 ) + 800ec0c: 8a1b ldrh r3, [r3, #16] + 800ec0e: 82fb strh r3, [r7, #22] ADV_TRACE_Ctx.TraceWrPtr = 0; - 800ebe8: 4b15 ldr r3, [pc, #84] @ (800ec40 ) - 800ebea: 2200 movs r2, #0 - 800ebec: 825a strh r2, [r3, #18] - 800ebee: e005 b.n 800ebfc + 800ec10: 4b15 ldr r3, [pc, #84] @ (800ec68 ) + 800ec12: 2200 movs r2, #0 + 800ec14: 825a strh r2, [r3, #18] + 800ec16: e005 b.n 800ec24 } } else { freesize = (uint16_t)(ADV_TRACE_Ctx.TraceRdPtr - ADV_TRACE_Ctx.TraceWrPtr); - 800ebf0: 4b13 ldr r3, [pc, #76] @ (800ec40 ) - 800ebf2: 8a1a ldrh r2, [r3, #16] - 800ebf4: 4b12 ldr r3, [pc, #72] @ (800ec40 ) - 800ebf6: 8a5b ldrh r3, [r3, #18] - 800ebf8: 1ad3 subs r3, r2, r3 - 800ebfa: 82fb strh r3, [r7, #22] + 800ec18: 4b13 ldr r3, [pc, #76] @ (800ec68 ) + 800ec1a: 8a1a ldrh r2, [r3, #16] + 800ec1c: 4b12 ldr r3, [pc, #72] @ (800ec68 ) + 800ec1e: 8a5b ldrh r3, [r3, #18] + 800ec20: 1ad3 subs r3, r2, r3 + 800ec22: 82fb strh r3, [r7, #22] freesize = ADV_TRACE_Ctx.TraceRdPtr - ADV_TRACE_Ctx.TraceWrPtr; } #endif } if(freesize > Size) - 800ebfc: 8afa ldrh r2, [r7, #22] - 800ebfe: 88fb ldrh r3, [r7, #6] - 800ec00: 429a cmp r2, r3 - 800ec02: d90f bls.n 800ec24 + 800ec24: 8afa ldrh r2, [r7, #22] + 800ec26: 88fb ldrh r3, [r7, #6] + 800ec28: 429a cmp r2, r3 + 800ec2a: d90f bls.n 800ec4c { *Pos = ADV_TRACE_Ctx.TraceWrPtr; - 800ec04: 4b0e ldr r3, [pc, #56] @ (800ec40 ) - 800ec06: 8a5a ldrh r2, [r3, #18] - 800ec08: 683b ldr r3, [r7, #0] - 800ec0a: 801a strh r2, [r3, #0] + 800ec2c: 4b0e ldr r3, [pc, #56] @ (800ec68 ) + 800ec2e: 8a5a ldrh r2, [r3, #18] + 800ec30: 683b ldr r3, [r7, #0] + 800ec32: 801a strh r2, [r3, #0] ADV_TRACE_Ctx.TraceWrPtr = (ADV_TRACE_Ctx.TraceWrPtr + Size) % UTIL_ADV_TRACE_FIFO_SIZE; - 800ec0c: 4b0c ldr r3, [pc, #48] @ (800ec40 ) - 800ec0e: 8a5a ldrh r2, [r3, #18] - 800ec10: 88fb ldrh r3, [r7, #6] - 800ec12: 4413 add r3, r2 - 800ec14: b29b uxth r3, r3 - 800ec16: f3c3 0308 ubfx r3, r3, #0, #9 - 800ec1a: b29a uxth r2, r3 - 800ec1c: 4b08 ldr r3, [pc, #32] @ (800ec40 ) - 800ec1e: 825a strh r2, [r3, #18] + 800ec34: 4b0c ldr r3, [pc, #48] @ (800ec68 ) + 800ec36: 8a5a ldrh r2, [r3, #18] + 800ec38: 88fb ldrh r3, [r7, #6] + 800ec3a: 4413 add r3, r2 + 800ec3c: b29b uxth r3, r3 + 800ec3e: f3c3 0308 ubfx r3, r3, #0, #9 + 800ec42: b29a uxth r2, r3 + 800ec44: 4b08 ldr r3, [pc, #32] @ (800ec68 ) + 800ec46: 825a strh r2, [r3, #18] ret = 0; - 800ec20: 2300 movs r3, #0 - 800ec22: 82bb strh r3, [r7, #20] - 800ec24: 693b ldr r3, [r7, #16] - 800ec26: 60bb str r3, [r7, #8] + 800ec48: 2300 movs r3, #0 + 800ec4a: 82bb strh r3, [r7, #20] + 800ec4c: 693b ldr r3, [r7, #16] + 800ec4e: 60bb str r3, [r7, #8] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800ec28: 68bb ldr r3, [r7, #8] - 800ec2a: f383 8810 msr PRIMASK, r3 + 800ec50: 68bb ldr r3, [r7, #8] + 800ec52: f383 8810 msr PRIMASK, r3 } - 800ec2e: bf00 nop + 800ec56: bf00 nop } } #endif UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); return ret; - 800ec30: f9b7 3014 ldrsh.w r3, [r7, #20] + 800ec58: f9b7 3014 ldrsh.w r3, [r7, #20] } - 800ec34: 4618 mov r0, r3 - 800ec36: 371c adds r7, #28 - 800ec38: 46bd mov sp, r7 - 800ec3a: bc80 pop {r7} - 800ec3c: 4770 bx lr - 800ec3e: bf00 nop - 800ec40: 20000c34 .word 0x20000c34 + 800ec5c: 4618 mov r0, r3 + 800ec5e: 371c adds r7, #28 + 800ec60: 46bd mov sp, r7 + 800ec62: bc80 pop {r7} + 800ec64: 4770 bx lr + 800ec66: bf00 nop + 800ec68: 20000c6c .word 0x20000c6c -0800ec44 : +0800ec6c : /** * @brief Lock the trace buffer. * @retval None. */ static void TRACE_Lock(void) { - 800ec44: b480 push {r7} - 800ec46: b085 sub sp, #20 - 800ec48: af00 add r7, sp, #0 + 800ec6c: b480 push {r7} + 800ec6e: b085 sub sp, #20 + 800ec70: af00 add r7, sp, #0 __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800ec4a: f3ef 8310 mrs r3, PRIMASK - 800ec4e: 607b str r3, [r7, #4] + 800ec72: f3ef 8310 mrs r3, PRIMASK + 800ec76: 607b str r3, [r7, #4] return(result); - 800ec50: 687b ldr r3, [r7, #4] + 800ec78: 687b ldr r3, [r7, #4] UTIL_ADV_TRACE_ENTER_CRITICAL_SECTION(); - 800ec52: 60fb str r3, [r7, #12] + 800ec7a: 60fb str r3, [r7, #12] __ASM volatile ("cpsid i" : : : "memory"); - 800ec54: b672 cpsid i + 800ec7c: b672 cpsid i } - 800ec56: bf00 nop + 800ec7e: bf00 nop ADV_TRACE_Ctx.TraceLock++; - 800ec58: 4b08 ldr r3, [pc, #32] @ (800ec7c ) - 800ec5a: 8adb ldrh r3, [r3, #22] - 800ec5c: 3301 adds r3, #1 - 800ec5e: b29a uxth r2, r3 - 800ec60: 4b06 ldr r3, [pc, #24] @ (800ec7c ) - 800ec62: 82da strh r2, [r3, #22] - 800ec64: 68fb ldr r3, [r7, #12] - 800ec66: 60bb str r3, [r7, #8] + 800ec80: 4b08 ldr r3, [pc, #32] @ (800eca4 ) + 800ec82: 8adb ldrh r3, [r3, #22] + 800ec84: 3301 adds r3, #1 + 800ec86: b29a uxth r2, r3 + 800ec88: 4b06 ldr r3, [pc, #24] @ (800eca4 ) + 800ec8a: 82da strh r2, [r3, #22] + 800ec8c: 68fb ldr r3, [r7, #12] + 800ec8e: 60bb str r3, [r7, #8] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800ec68: 68bb ldr r3, [r7, #8] - 800ec6a: f383 8810 msr PRIMASK, r3 + 800ec90: 68bb ldr r3, [r7, #8] + 800ec92: f383 8810 msr PRIMASK, r3 } - 800ec6e: bf00 nop + 800ec96: bf00 nop UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); } - 800ec70: bf00 nop - 800ec72: 3714 adds r7, #20 - 800ec74: 46bd mov sp, r7 - 800ec76: bc80 pop {r7} - 800ec78: 4770 bx lr - 800ec7a: bf00 nop - 800ec7c: 20000c34 .word 0x20000c34 + 800ec98: bf00 nop + 800ec9a: 3714 adds r7, #20 + 800ec9c: 46bd mov sp, r7 + 800ec9e: bc80 pop {r7} + 800eca0: 4770 bx lr + 800eca2: bf00 nop + 800eca4: 20000c6c .word 0x20000c6c -0800ec80 : +0800eca8 : /** * @brief UnLock the trace buffer. * @retval None. */ static void TRACE_UnLock(void) { - 800ec80: b480 push {r7} - 800ec82: b085 sub sp, #20 - 800ec84: af00 add r7, sp, #0 + 800eca8: b480 push {r7} + 800ecaa: b085 sub sp, #20 + 800ecac: af00 add r7, sp, #0 __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - 800ec86: f3ef 8310 mrs r3, PRIMASK - 800ec8a: 607b str r3, [r7, #4] + 800ecae: f3ef 8310 mrs r3, PRIMASK + 800ecb2: 607b str r3, [r7, #4] return(result); - 800ec8c: 687b ldr r3, [r7, #4] + 800ecb4: 687b ldr r3, [r7, #4] UTIL_ADV_TRACE_ENTER_CRITICAL_SECTION(); - 800ec8e: 60fb str r3, [r7, #12] + 800ecb6: 60fb str r3, [r7, #12] __ASM volatile ("cpsid i" : : : "memory"); - 800ec90: b672 cpsid i + 800ecb8: b672 cpsid i } - 800ec92: bf00 nop + 800ecba: bf00 nop ADV_TRACE_Ctx.TraceLock--; - 800ec94: 4b08 ldr r3, [pc, #32] @ (800ecb8 ) - 800ec96: 8adb ldrh r3, [r3, #22] - 800ec98: 3b01 subs r3, #1 - 800ec9a: b29a uxth r2, r3 - 800ec9c: 4b06 ldr r3, [pc, #24] @ (800ecb8 ) - 800ec9e: 82da strh r2, [r3, #22] - 800eca0: 68fb ldr r3, [r7, #12] - 800eca2: 60bb str r3, [r7, #8] + 800ecbc: 4b08 ldr r3, [pc, #32] @ (800ece0 ) + 800ecbe: 8adb ldrh r3, [r3, #22] + 800ecc0: 3b01 subs r3, #1 + 800ecc2: b29a uxth r2, r3 + 800ecc4: 4b06 ldr r3, [pc, #24] @ (800ece0 ) + 800ecc6: 82da strh r2, [r3, #22] + 800ecc8: 68fb ldr r3, [r7, #12] + 800ecca: 60bb str r3, [r7, #8] __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); - 800eca4: 68bb ldr r3, [r7, #8] - 800eca6: f383 8810 msr PRIMASK, r3 + 800eccc: 68bb ldr r3, [r7, #8] + 800ecce: f383 8810 msr PRIMASK, r3 } - 800ecaa: bf00 nop + 800ecd2: bf00 nop UTIL_ADV_TRACE_EXIT_CRITICAL_SECTION(); } - 800ecac: bf00 nop - 800ecae: 3714 adds r7, #20 - 800ecb0: 46bd mov sp, r7 - 800ecb2: bc80 pop {r7} - 800ecb4: 4770 bx lr - 800ecb6: bf00 nop - 800ecb8: 20000c34 .word 0x20000c34 + 800ecd4: bf00 nop + 800ecd6: 3714 adds r7, #20 + 800ecd8: 46bd mov sp, r7 + 800ecda: bc80 pop {r7} + 800ecdc: 4770 bx lr + 800ecde: bf00 nop + 800ece0: 20000c6c .word 0x20000c6c -0800ecbc : +0800ece4 : /** * @brief UnLock the trace buffer. * @retval None. */ static uint32_t TRACE_IsLocked(void) { - 800ecbc: b480 push {r7} - 800ecbe: af00 add r7, sp, #0 + 800ece4: b480 push {r7} + 800ece6: af00 add r7, sp, #0 return (ADV_TRACE_Ctx.TraceLock == 0u? 0u: 1u); - 800ecc0: 4b05 ldr r3, [pc, #20] @ (800ecd8 ) - 800ecc2: 8adb ldrh r3, [r3, #22] - 800ecc4: 2b00 cmp r3, #0 - 800ecc6: bf14 ite ne - 800ecc8: 2301 movne r3, #1 - 800ecca: 2300 moveq r3, #0 - 800eccc: b2db uxtb r3, r3 + 800ece8: 4b05 ldr r3, [pc, #20] @ (800ed00 ) + 800ecea: 8adb ldrh r3, [r3, #22] + 800ecec: 2b00 cmp r3, #0 + 800ecee: bf14 ite ne + 800ecf0: 2301 movne r3, #1 + 800ecf2: 2300 moveq r3, #0 + 800ecf4: b2db uxtb r3, r3 } - 800ecce: 4618 mov r0, r3 - 800ecd0: 46bd mov sp, r7 - 800ecd2: bc80 pop {r7} - 800ecd4: 4770 bx lr - 800ecd6: bf00 nop - 800ecd8: 20000c34 .word 0x20000c34 + 800ecf6: 4618 mov r0, r3 + 800ecf8: 46bd mov sp, r7 + 800ecfa: bc80 pop {r7} + 800ecfc: 4770 bx lr + 800ecfe: bf00 nop + 800ed00: 20000c6c .word 0x20000c6c -0800ecdc <_strtol_l.isra.0>: - 800ecdc: 2b24 cmp r3, #36 @ 0x24 - 800ecde: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 800ece2: 4686 mov lr, r0 - 800ece4: 4690 mov r8, r2 - 800ece6: d801 bhi.n 800ecec <_strtol_l.isra.0+0x10> - 800ece8: 2b01 cmp r3, #1 - 800ecea: d106 bne.n 800ecfa <_strtol_l.isra.0+0x1e> - 800ecec: f000 f948 bl 800ef80 <__errno> - 800ecf0: 2316 movs r3, #22 - 800ecf2: 6003 str r3, [r0, #0] - 800ecf4: 2000 movs r0, #0 - 800ecf6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 800ecfa: 4834 ldr r0, [pc, #208] @ (800edcc <_strtol_l.isra.0+0xf0>) - 800ecfc: 460d mov r5, r1 - 800ecfe: 462a mov r2, r5 - 800ed00: f815 4b01 ldrb.w r4, [r5], #1 - 800ed04: 5d06 ldrb r6, [r0, r4] - 800ed06: f016 0608 ands.w r6, r6, #8 - 800ed0a: d1f8 bne.n 800ecfe <_strtol_l.isra.0+0x22> - 800ed0c: 2c2d cmp r4, #45 @ 0x2d - 800ed0e: d110 bne.n 800ed32 <_strtol_l.isra.0+0x56> - 800ed10: 782c ldrb r4, [r5, #0] - 800ed12: 2601 movs r6, #1 - 800ed14: 1c95 adds r5, r2, #2 - 800ed16: f033 0210 bics.w r2, r3, #16 - 800ed1a: d115 bne.n 800ed48 <_strtol_l.isra.0+0x6c> - 800ed1c: 2c30 cmp r4, #48 @ 0x30 - 800ed1e: d10d bne.n 800ed3c <_strtol_l.isra.0+0x60> - 800ed20: 782a ldrb r2, [r5, #0] - 800ed22: f002 02df and.w r2, r2, #223 @ 0xdf - 800ed26: 2a58 cmp r2, #88 @ 0x58 - 800ed28: d108 bne.n 800ed3c <_strtol_l.isra.0+0x60> - 800ed2a: 786c ldrb r4, [r5, #1] - 800ed2c: 3502 adds r5, #2 - 800ed2e: 2310 movs r3, #16 - 800ed30: e00a b.n 800ed48 <_strtol_l.isra.0+0x6c> - 800ed32: 2c2b cmp r4, #43 @ 0x2b - 800ed34: bf04 itt eq - 800ed36: 782c ldrbeq r4, [r5, #0] - 800ed38: 1c95 addeq r5, r2, #2 - 800ed3a: e7ec b.n 800ed16 <_strtol_l.isra.0+0x3a> - 800ed3c: 2b00 cmp r3, #0 - 800ed3e: d1f6 bne.n 800ed2e <_strtol_l.isra.0+0x52> - 800ed40: 2c30 cmp r4, #48 @ 0x30 - 800ed42: bf14 ite ne - 800ed44: 230a movne r3, #10 - 800ed46: 2308 moveq r3, #8 - 800ed48: f106 4c00 add.w ip, r6, #2147483648 @ 0x80000000 - 800ed4c: f10c 3cff add.w ip, ip, #4294967295 @ 0xffffffff - 800ed50: 2200 movs r2, #0 - 800ed52: fbbc f9f3 udiv r9, ip, r3 - 800ed56: 4610 mov r0, r2 - 800ed58: fb03 ca19 mls sl, r3, r9, ip - 800ed5c: f1a4 0730 sub.w r7, r4, #48 @ 0x30 - 800ed60: 2f09 cmp r7, #9 - 800ed62: d80f bhi.n 800ed84 <_strtol_l.isra.0+0xa8> - 800ed64: 463c mov r4, r7 - 800ed66: 42a3 cmp r3, r4 - 800ed68: dd1b ble.n 800eda2 <_strtol_l.isra.0+0xc6> - 800ed6a: 1c57 adds r7, r2, #1 - 800ed6c: d007 beq.n 800ed7e <_strtol_l.isra.0+0xa2> - 800ed6e: 4581 cmp r9, r0 - 800ed70: d314 bcc.n 800ed9c <_strtol_l.isra.0+0xc0> - 800ed72: d101 bne.n 800ed78 <_strtol_l.isra.0+0x9c> - 800ed74: 45a2 cmp sl, r4 - 800ed76: db11 blt.n 800ed9c <_strtol_l.isra.0+0xc0> - 800ed78: fb00 4003 mla r0, r0, r3, r4 - 800ed7c: 2201 movs r2, #1 - 800ed7e: f815 4b01 ldrb.w r4, [r5], #1 - 800ed82: e7eb b.n 800ed5c <_strtol_l.isra.0+0x80> - 800ed84: f1a4 0741 sub.w r7, r4, #65 @ 0x41 - 800ed88: 2f19 cmp r7, #25 - 800ed8a: d801 bhi.n 800ed90 <_strtol_l.isra.0+0xb4> - 800ed8c: 3c37 subs r4, #55 @ 0x37 - 800ed8e: e7ea b.n 800ed66 <_strtol_l.isra.0+0x8a> - 800ed90: f1a4 0761 sub.w r7, r4, #97 @ 0x61 - 800ed94: 2f19 cmp r7, #25 - 800ed96: d804 bhi.n 800eda2 <_strtol_l.isra.0+0xc6> - 800ed98: 3c57 subs r4, #87 @ 0x57 - 800ed9a: e7e4 b.n 800ed66 <_strtol_l.isra.0+0x8a> - 800ed9c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 800eda0: e7ed b.n 800ed7e <_strtol_l.isra.0+0xa2> - 800eda2: 1c53 adds r3, r2, #1 - 800eda4: d108 bne.n 800edb8 <_strtol_l.isra.0+0xdc> - 800eda6: 2322 movs r3, #34 @ 0x22 - 800eda8: f8ce 3000 str.w r3, [lr] - 800edac: 4660 mov r0, ip - 800edae: f1b8 0f00 cmp.w r8, #0 - 800edb2: d0a0 beq.n 800ecf6 <_strtol_l.isra.0+0x1a> - 800edb4: 1e69 subs r1, r5, #1 - 800edb6: e006 b.n 800edc6 <_strtol_l.isra.0+0xea> - 800edb8: b106 cbz r6, 800edbc <_strtol_l.isra.0+0xe0> - 800edba: 4240 negs r0, r0 - 800edbc: f1b8 0f00 cmp.w r8, #0 - 800edc0: d099 beq.n 800ecf6 <_strtol_l.isra.0+0x1a> - 800edc2: 2a00 cmp r2, #0 - 800edc4: d1f6 bne.n 800edb4 <_strtol_l.isra.0+0xd8> - 800edc6: f8c8 1000 str.w r1, [r8] - 800edca: e794 b.n 800ecf6 <_strtol_l.isra.0+0x1a> - 800edcc: 08010519 .word 0x08010519 +0800ed04 <_strtol_l.isra.0>: + 800ed04: 2b24 cmp r3, #36 @ 0x24 + 800ed06: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 800ed0a: 4686 mov lr, r0 + 800ed0c: 4690 mov r8, r2 + 800ed0e: d801 bhi.n 800ed14 <_strtol_l.isra.0+0x10> + 800ed10: 2b01 cmp r3, #1 + 800ed12: d106 bne.n 800ed22 <_strtol_l.isra.0+0x1e> + 800ed14: f000 f948 bl 800efa8 <__errno> + 800ed18: 2316 movs r3, #22 + 800ed1a: 6003 str r3, [r0, #0] + 800ed1c: 2000 movs r0, #0 + 800ed1e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 800ed22: 4834 ldr r0, [pc, #208] @ (800edf4 <_strtol_l.isra.0+0xf0>) + 800ed24: 460d mov r5, r1 + 800ed26: 462a mov r2, r5 + 800ed28: f815 4b01 ldrb.w r4, [r5], #1 + 800ed2c: 5d06 ldrb r6, [r0, r4] + 800ed2e: f016 0608 ands.w r6, r6, #8 + 800ed32: d1f8 bne.n 800ed26 <_strtol_l.isra.0+0x22> + 800ed34: 2c2d cmp r4, #45 @ 0x2d + 800ed36: d110 bne.n 800ed5a <_strtol_l.isra.0+0x56> + 800ed38: 782c ldrb r4, [r5, #0] + 800ed3a: 2601 movs r6, #1 + 800ed3c: 1c95 adds r5, r2, #2 + 800ed3e: f033 0210 bics.w r2, r3, #16 + 800ed42: d115 bne.n 800ed70 <_strtol_l.isra.0+0x6c> + 800ed44: 2c30 cmp r4, #48 @ 0x30 + 800ed46: d10d bne.n 800ed64 <_strtol_l.isra.0+0x60> + 800ed48: 782a ldrb r2, [r5, #0] + 800ed4a: f002 02df and.w r2, r2, #223 @ 0xdf + 800ed4e: 2a58 cmp r2, #88 @ 0x58 + 800ed50: d108 bne.n 800ed64 <_strtol_l.isra.0+0x60> + 800ed52: 786c ldrb r4, [r5, #1] + 800ed54: 3502 adds r5, #2 + 800ed56: 2310 movs r3, #16 + 800ed58: e00a b.n 800ed70 <_strtol_l.isra.0+0x6c> + 800ed5a: 2c2b cmp r4, #43 @ 0x2b + 800ed5c: bf04 itt eq + 800ed5e: 782c ldrbeq r4, [r5, #0] + 800ed60: 1c95 addeq r5, r2, #2 + 800ed62: e7ec b.n 800ed3e <_strtol_l.isra.0+0x3a> + 800ed64: 2b00 cmp r3, #0 + 800ed66: d1f6 bne.n 800ed56 <_strtol_l.isra.0+0x52> + 800ed68: 2c30 cmp r4, #48 @ 0x30 + 800ed6a: bf14 ite ne + 800ed6c: 230a movne r3, #10 + 800ed6e: 2308 moveq r3, #8 + 800ed70: f106 4c00 add.w ip, r6, #2147483648 @ 0x80000000 + 800ed74: f10c 3cff add.w ip, ip, #4294967295 @ 0xffffffff + 800ed78: 2200 movs r2, #0 + 800ed7a: fbbc f9f3 udiv r9, ip, r3 + 800ed7e: 4610 mov r0, r2 + 800ed80: fb03 ca19 mls sl, r3, r9, ip + 800ed84: f1a4 0730 sub.w r7, r4, #48 @ 0x30 + 800ed88: 2f09 cmp r7, #9 + 800ed8a: d80f bhi.n 800edac <_strtol_l.isra.0+0xa8> + 800ed8c: 463c mov r4, r7 + 800ed8e: 42a3 cmp r3, r4 + 800ed90: dd1b ble.n 800edca <_strtol_l.isra.0+0xc6> + 800ed92: 1c57 adds r7, r2, #1 + 800ed94: d007 beq.n 800eda6 <_strtol_l.isra.0+0xa2> + 800ed96: 4581 cmp r9, r0 + 800ed98: d314 bcc.n 800edc4 <_strtol_l.isra.0+0xc0> + 800ed9a: d101 bne.n 800eda0 <_strtol_l.isra.0+0x9c> + 800ed9c: 45a2 cmp sl, r4 + 800ed9e: db11 blt.n 800edc4 <_strtol_l.isra.0+0xc0> + 800eda0: fb00 4003 mla r0, r0, r3, r4 + 800eda4: 2201 movs r2, #1 + 800eda6: f815 4b01 ldrb.w r4, [r5], #1 + 800edaa: e7eb b.n 800ed84 <_strtol_l.isra.0+0x80> + 800edac: f1a4 0741 sub.w r7, r4, #65 @ 0x41 + 800edb0: 2f19 cmp r7, #25 + 800edb2: d801 bhi.n 800edb8 <_strtol_l.isra.0+0xb4> + 800edb4: 3c37 subs r4, #55 @ 0x37 + 800edb6: e7ea b.n 800ed8e <_strtol_l.isra.0+0x8a> + 800edb8: f1a4 0761 sub.w r7, r4, #97 @ 0x61 + 800edbc: 2f19 cmp r7, #25 + 800edbe: d804 bhi.n 800edca <_strtol_l.isra.0+0xc6> + 800edc0: 3c57 subs r4, #87 @ 0x57 + 800edc2: e7e4 b.n 800ed8e <_strtol_l.isra.0+0x8a> + 800edc4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 800edc8: e7ed b.n 800eda6 <_strtol_l.isra.0+0xa2> + 800edca: 1c53 adds r3, r2, #1 + 800edcc: d108 bne.n 800ede0 <_strtol_l.isra.0+0xdc> + 800edce: 2322 movs r3, #34 @ 0x22 + 800edd0: f8ce 3000 str.w r3, [lr] + 800edd4: 4660 mov r0, ip + 800edd6: f1b8 0f00 cmp.w r8, #0 + 800edda: d0a0 beq.n 800ed1e <_strtol_l.isra.0+0x1a> + 800eddc: 1e69 subs r1, r5, #1 + 800edde: e006 b.n 800edee <_strtol_l.isra.0+0xea> + 800ede0: b106 cbz r6, 800ede4 <_strtol_l.isra.0+0xe0> + 800ede2: 4240 negs r0, r0 + 800ede4: f1b8 0f00 cmp.w r8, #0 + 800ede8: d099 beq.n 800ed1e <_strtol_l.isra.0+0x1a> + 800edea: 2a00 cmp r2, #0 + 800edec: d1f6 bne.n 800eddc <_strtol_l.isra.0+0xd8> + 800edee: f8c8 1000 str.w r1, [r8] + 800edf2: e794 b.n 800ed1e <_strtol_l.isra.0+0x1a> + 800edf4: 08010541 .word 0x08010541 -0800edd0 : - 800edd0: 4613 mov r3, r2 - 800edd2: 460a mov r2, r1 - 800edd4: 4601 mov r1, r0 - 800edd6: 4802 ldr r0, [pc, #8] @ (800ede0 ) - 800edd8: 6800 ldr r0, [r0, #0] - 800edda: f7ff bf7f b.w 800ecdc <_strtol_l.isra.0> - 800edde: bf00 nop - 800ede0: 2000001c .word 0x2000001c +0800edf8 : + 800edf8: 4613 mov r3, r2 + 800edfa: 460a mov r2, r1 + 800edfc: 4601 mov r1, r0 + 800edfe: 4802 ldr r0, [pc, #8] @ (800ee08 ) + 800ee00: 6800 ldr r0, [r0, #0] + 800ee02: f7ff bf7f b.w 800ed04 <_strtol_l.isra.0> + 800ee06: bf00 nop + 800ee08: 2000001c .word 0x2000001c -0800ede4 <_strtoul_l.isra.0>: - 800ede4: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - 800ede8: 4e34 ldr r6, [pc, #208] @ (800eebc <_strtoul_l.isra.0+0xd8>) - 800edea: 4686 mov lr, r0 - 800edec: 460d mov r5, r1 - 800edee: 4628 mov r0, r5 - 800edf0: f815 4b01 ldrb.w r4, [r5], #1 - 800edf4: 5d37 ldrb r7, [r6, r4] - 800edf6: f017 0708 ands.w r7, r7, #8 - 800edfa: d1f8 bne.n 800edee <_strtoul_l.isra.0+0xa> - 800edfc: 2c2d cmp r4, #45 @ 0x2d - 800edfe: d110 bne.n 800ee22 <_strtoul_l.isra.0+0x3e> - 800ee00: 782c ldrb r4, [r5, #0] - 800ee02: 2701 movs r7, #1 - 800ee04: 1c85 adds r5, r0, #2 - 800ee06: f033 0010 bics.w r0, r3, #16 - 800ee0a: d115 bne.n 800ee38 <_strtoul_l.isra.0+0x54> - 800ee0c: 2c30 cmp r4, #48 @ 0x30 - 800ee0e: d10d bne.n 800ee2c <_strtoul_l.isra.0+0x48> - 800ee10: 7828 ldrb r0, [r5, #0] - 800ee12: f000 00df and.w r0, r0, #223 @ 0xdf - 800ee16: 2858 cmp r0, #88 @ 0x58 - 800ee18: d108 bne.n 800ee2c <_strtoul_l.isra.0+0x48> - 800ee1a: 786c ldrb r4, [r5, #1] - 800ee1c: 3502 adds r5, #2 - 800ee1e: 2310 movs r3, #16 - 800ee20: e00a b.n 800ee38 <_strtoul_l.isra.0+0x54> - 800ee22: 2c2b cmp r4, #43 @ 0x2b - 800ee24: bf04 itt eq - 800ee26: 782c ldrbeq r4, [r5, #0] - 800ee28: 1c85 addeq r5, r0, #2 - 800ee2a: e7ec b.n 800ee06 <_strtoul_l.isra.0+0x22> - 800ee2c: 2b00 cmp r3, #0 - 800ee2e: d1f6 bne.n 800ee1e <_strtoul_l.isra.0+0x3a> - 800ee30: 2c30 cmp r4, #48 @ 0x30 - 800ee32: bf14 ite ne - 800ee34: 230a movne r3, #10 - 800ee36: 2308 moveq r3, #8 - 800ee38: f04f 38ff mov.w r8, #4294967295 @ 0xffffffff - 800ee3c: 2600 movs r6, #0 - 800ee3e: fbb8 f8f3 udiv r8, r8, r3 - 800ee42: fb03 f908 mul.w r9, r3, r8 - 800ee46: ea6f 0909 mvn.w r9, r9 - 800ee4a: 4630 mov r0, r6 - 800ee4c: f1a4 0c30 sub.w ip, r4, #48 @ 0x30 - 800ee50: f1bc 0f09 cmp.w ip, #9 - 800ee54: d810 bhi.n 800ee78 <_strtoul_l.isra.0+0x94> - 800ee56: 4664 mov r4, ip - 800ee58: 42a3 cmp r3, r4 - 800ee5a: dd1e ble.n 800ee9a <_strtoul_l.isra.0+0xb6> - 800ee5c: f1b6 3fff cmp.w r6, #4294967295 @ 0xffffffff - 800ee60: d007 beq.n 800ee72 <_strtoul_l.isra.0+0x8e> - 800ee62: 4580 cmp r8, r0 - 800ee64: d316 bcc.n 800ee94 <_strtoul_l.isra.0+0xb0> - 800ee66: d101 bne.n 800ee6c <_strtoul_l.isra.0+0x88> - 800ee68: 45a1 cmp r9, r4 - 800ee6a: db13 blt.n 800ee94 <_strtoul_l.isra.0+0xb0> - 800ee6c: fb00 4003 mla r0, r0, r3, r4 - 800ee70: 2601 movs r6, #1 - 800ee72: f815 4b01 ldrb.w r4, [r5], #1 - 800ee76: e7e9 b.n 800ee4c <_strtoul_l.isra.0+0x68> - 800ee78: f1a4 0c41 sub.w ip, r4, #65 @ 0x41 - 800ee7c: f1bc 0f19 cmp.w ip, #25 - 800ee80: d801 bhi.n 800ee86 <_strtoul_l.isra.0+0xa2> - 800ee82: 3c37 subs r4, #55 @ 0x37 - 800ee84: e7e8 b.n 800ee58 <_strtoul_l.isra.0+0x74> - 800ee86: f1a4 0c61 sub.w ip, r4, #97 @ 0x61 - 800ee8a: f1bc 0f19 cmp.w ip, #25 - 800ee8e: d804 bhi.n 800ee9a <_strtoul_l.isra.0+0xb6> - 800ee90: 3c57 subs r4, #87 @ 0x57 - 800ee92: e7e1 b.n 800ee58 <_strtoul_l.isra.0+0x74> - 800ee94: f04f 36ff mov.w r6, #4294967295 @ 0xffffffff - 800ee98: e7eb b.n 800ee72 <_strtoul_l.isra.0+0x8e> - 800ee9a: 1c73 adds r3, r6, #1 - 800ee9c: d106 bne.n 800eeac <_strtoul_l.isra.0+0xc8> - 800ee9e: 2322 movs r3, #34 @ 0x22 - 800eea0: f8ce 3000 str.w r3, [lr] - 800eea4: 4630 mov r0, r6 - 800eea6: b932 cbnz r2, 800eeb6 <_strtoul_l.isra.0+0xd2> - 800eea8: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} - 800eeac: b107 cbz r7, 800eeb0 <_strtoul_l.isra.0+0xcc> - 800eeae: 4240 negs r0, r0 - 800eeb0: 2a00 cmp r2, #0 - 800eeb2: d0f9 beq.n 800eea8 <_strtoul_l.isra.0+0xc4> - 800eeb4: b106 cbz r6, 800eeb8 <_strtoul_l.isra.0+0xd4> - 800eeb6: 1e69 subs r1, r5, #1 - 800eeb8: 6011 str r1, [r2, #0] - 800eeba: e7f5 b.n 800eea8 <_strtoul_l.isra.0+0xc4> - 800eebc: 08010519 .word 0x08010519 +0800ee0c <_strtoul_l.isra.0>: + 800ee0c: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + 800ee10: 4e34 ldr r6, [pc, #208] @ (800eee4 <_strtoul_l.isra.0+0xd8>) + 800ee12: 4686 mov lr, r0 + 800ee14: 460d mov r5, r1 + 800ee16: 4628 mov r0, r5 + 800ee18: f815 4b01 ldrb.w r4, [r5], #1 + 800ee1c: 5d37 ldrb r7, [r6, r4] + 800ee1e: f017 0708 ands.w r7, r7, #8 + 800ee22: d1f8 bne.n 800ee16 <_strtoul_l.isra.0+0xa> + 800ee24: 2c2d cmp r4, #45 @ 0x2d + 800ee26: d110 bne.n 800ee4a <_strtoul_l.isra.0+0x3e> + 800ee28: 782c ldrb r4, [r5, #0] + 800ee2a: 2701 movs r7, #1 + 800ee2c: 1c85 adds r5, r0, #2 + 800ee2e: f033 0010 bics.w r0, r3, #16 + 800ee32: d115 bne.n 800ee60 <_strtoul_l.isra.0+0x54> + 800ee34: 2c30 cmp r4, #48 @ 0x30 + 800ee36: d10d bne.n 800ee54 <_strtoul_l.isra.0+0x48> + 800ee38: 7828 ldrb r0, [r5, #0] + 800ee3a: f000 00df and.w r0, r0, #223 @ 0xdf + 800ee3e: 2858 cmp r0, #88 @ 0x58 + 800ee40: d108 bne.n 800ee54 <_strtoul_l.isra.0+0x48> + 800ee42: 786c ldrb r4, [r5, #1] + 800ee44: 3502 adds r5, #2 + 800ee46: 2310 movs r3, #16 + 800ee48: e00a b.n 800ee60 <_strtoul_l.isra.0+0x54> + 800ee4a: 2c2b cmp r4, #43 @ 0x2b + 800ee4c: bf04 itt eq + 800ee4e: 782c ldrbeq r4, [r5, #0] + 800ee50: 1c85 addeq r5, r0, #2 + 800ee52: e7ec b.n 800ee2e <_strtoul_l.isra.0+0x22> + 800ee54: 2b00 cmp r3, #0 + 800ee56: d1f6 bne.n 800ee46 <_strtoul_l.isra.0+0x3a> + 800ee58: 2c30 cmp r4, #48 @ 0x30 + 800ee5a: bf14 ite ne + 800ee5c: 230a movne r3, #10 + 800ee5e: 2308 moveq r3, #8 + 800ee60: f04f 38ff mov.w r8, #4294967295 @ 0xffffffff + 800ee64: 2600 movs r6, #0 + 800ee66: fbb8 f8f3 udiv r8, r8, r3 + 800ee6a: fb03 f908 mul.w r9, r3, r8 + 800ee6e: ea6f 0909 mvn.w r9, r9 + 800ee72: 4630 mov r0, r6 + 800ee74: f1a4 0c30 sub.w ip, r4, #48 @ 0x30 + 800ee78: f1bc 0f09 cmp.w ip, #9 + 800ee7c: d810 bhi.n 800eea0 <_strtoul_l.isra.0+0x94> + 800ee7e: 4664 mov r4, ip + 800ee80: 42a3 cmp r3, r4 + 800ee82: dd1e ble.n 800eec2 <_strtoul_l.isra.0+0xb6> + 800ee84: f1b6 3fff cmp.w r6, #4294967295 @ 0xffffffff + 800ee88: d007 beq.n 800ee9a <_strtoul_l.isra.0+0x8e> + 800ee8a: 4580 cmp r8, r0 + 800ee8c: d316 bcc.n 800eebc <_strtoul_l.isra.0+0xb0> + 800ee8e: d101 bne.n 800ee94 <_strtoul_l.isra.0+0x88> + 800ee90: 45a1 cmp r9, r4 + 800ee92: db13 blt.n 800eebc <_strtoul_l.isra.0+0xb0> + 800ee94: fb00 4003 mla r0, r0, r3, r4 + 800ee98: 2601 movs r6, #1 + 800ee9a: f815 4b01 ldrb.w r4, [r5], #1 + 800ee9e: e7e9 b.n 800ee74 <_strtoul_l.isra.0+0x68> + 800eea0: f1a4 0c41 sub.w ip, r4, #65 @ 0x41 + 800eea4: f1bc 0f19 cmp.w ip, #25 + 800eea8: d801 bhi.n 800eeae <_strtoul_l.isra.0+0xa2> + 800eeaa: 3c37 subs r4, #55 @ 0x37 + 800eeac: e7e8 b.n 800ee80 <_strtoul_l.isra.0+0x74> + 800eeae: f1a4 0c61 sub.w ip, r4, #97 @ 0x61 + 800eeb2: f1bc 0f19 cmp.w ip, #25 + 800eeb6: d804 bhi.n 800eec2 <_strtoul_l.isra.0+0xb6> + 800eeb8: 3c57 subs r4, #87 @ 0x57 + 800eeba: e7e1 b.n 800ee80 <_strtoul_l.isra.0+0x74> + 800eebc: f04f 36ff mov.w r6, #4294967295 @ 0xffffffff + 800eec0: e7eb b.n 800ee9a <_strtoul_l.isra.0+0x8e> + 800eec2: 1c73 adds r3, r6, #1 + 800eec4: d106 bne.n 800eed4 <_strtoul_l.isra.0+0xc8> + 800eec6: 2322 movs r3, #34 @ 0x22 + 800eec8: f8ce 3000 str.w r3, [lr] + 800eecc: 4630 mov r0, r6 + 800eece: b932 cbnz r2, 800eede <_strtoul_l.isra.0+0xd2> + 800eed0: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} + 800eed4: b107 cbz r7, 800eed8 <_strtoul_l.isra.0+0xcc> + 800eed6: 4240 negs r0, r0 + 800eed8: 2a00 cmp r2, #0 + 800eeda: d0f9 beq.n 800eed0 <_strtoul_l.isra.0+0xc4> + 800eedc: b106 cbz r6, 800eee0 <_strtoul_l.isra.0+0xd4> + 800eede: 1e69 subs r1, r5, #1 + 800eee0: 6011 str r1, [r2, #0] + 800eee2: e7f5 b.n 800eed0 <_strtoul_l.isra.0+0xc4> + 800eee4: 08010541 .word 0x08010541 -0800eec0 : - 800eec0: 4613 mov r3, r2 - 800eec2: 460a mov r2, r1 - 800eec4: 4601 mov r1, r0 - 800eec6: 4802 ldr r0, [pc, #8] @ (800eed0 ) - 800eec8: 6800 ldr r0, [r0, #0] - 800eeca: f7ff bf8b b.w 800ede4 <_strtoul_l.isra.0> - 800eece: bf00 nop - 800eed0: 2000001c .word 0x2000001c +0800eee8 : + 800eee8: 4613 mov r3, r2 + 800eeea: 460a mov r2, r1 + 800eeec: 4601 mov r1, r0 + 800eeee: 4802 ldr r0, [pc, #8] @ (800eef8 ) + 800eef0: 6800 ldr r0, [r0, #0] + 800eef2: f7ff bf8b b.w 800ee0c <_strtoul_l.isra.0> + 800eef6: bf00 nop + 800eef8: 2000001c .word 0x2000001c -0800eed4 <_vsniprintf_r>: - 800eed4: b530 push {r4, r5, lr} - 800eed6: 4614 mov r4, r2 - 800eed8: 2c00 cmp r4, #0 - 800eeda: b09b sub sp, #108 @ 0x6c - 800eedc: 4605 mov r5, r0 - 800eede: 461a mov r2, r3 - 800eee0: da05 bge.n 800eeee <_vsniprintf_r+0x1a> - 800eee2: 238b movs r3, #139 @ 0x8b - 800eee4: 6003 str r3, [r0, #0] - 800eee6: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800eeea: b01b add sp, #108 @ 0x6c - 800eeec: bd30 pop {r4, r5, pc} - 800eeee: f44f 7302 mov.w r3, #520 @ 0x208 - 800eef2: f8ad 300c strh.w r3, [sp, #12] - 800eef6: f04f 0300 mov.w r3, #0 - 800eefa: 9319 str r3, [sp, #100] @ 0x64 - 800eefc: bf14 ite ne - 800eefe: f104 33ff addne.w r3, r4, #4294967295 @ 0xffffffff - 800ef02: 4623 moveq r3, r4 - 800ef04: 9302 str r3, [sp, #8] - 800ef06: 9305 str r3, [sp, #20] - 800ef08: f64f 73ff movw r3, #65535 @ 0xffff - 800ef0c: 9100 str r1, [sp, #0] - 800ef0e: 9104 str r1, [sp, #16] - 800ef10: f8ad 300e strh.w r3, [sp, #14] - 800ef14: 4669 mov r1, sp - 800ef16: 9b1e ldr r3, [sp, #120] @ 0x78 - 800ef18: f000 f9c0 bl 800f29c <_svfiprintf_r> - 800ef1c: 1c43 adds r3, r0, #1 - 800ef1e: bfbc itt lt - 800ef20: 238b movlt r3, #139 @ 0x8b - 800ef22: 602b strlt r3, [r5, #0] - 800ef24: 2c00 cmp r4, #0 - 800ef26: d0e0 beq.n 800eeea <_vsniprintf_r+0x16> - 800ef28: 9b00 ldr r3, [sp, #0] - 800ef2a: 2200 movs r2, #0 - 800ef2c: 701a strb r2, [r3, #0] - 800ef2e: e7dc b.n 800eeea <_vsniprintf_r+0x16> +0800eefc <_vsniprintf_r>: + 800eefc: b530 push {r4, r5, lr} + 800eefe: 4614 mov r4, r2 + 800ef00: 2c00 cmp r4, #0 + 800ef02: b09b sub sp, #108 @ 0x6c + 800ef04: 4605 mov r5, r0 + 800ef06: 461a mov r2, r3 + 800ef08: da05 bge.n 800ef16 <_vsniprintf_r+0x1a> + 800ef0a: 238b movs r3, #139 @ 0x8b + 800ef0c: 6003 str r3, [r0, #0] + 800ef0e: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800ef12: b01b add sp, #108 @ 0x6c + 800ef14: bd30 pop {r4, r5, pc} + 800ef16: f44f 7302 mov.w r3, #520 @ 0x208 + 800ef1a: f8ad 300c strh.w r3, [sp, #12] + 800ef1e: f04f 0300 mov.w r3, #0 + 800ef22: 9319 str r3, [sp, #100] @ 0x64 + 800ef24: bf14 ite ne + 800ef26: f104 33ff addne.w r3, r4, #4294967295 @ 0xffffffff + 800ef2a: 4623 moveq r3, r4 + 800ef2c: 9302 str r3, [sp, #8] + 800ef2e: 9305 str r3, [sp, #20] + 800ef30: f64f 73ff movw r3, #65535 @ 0xffff + 800ef34: 9100 str r1, [sp, #0] + 800ef36: 9104 str r1, [sp, #16] + 800ef38: f8ad 300e strh.w r3, [sp, #14] + 800ef3c: 4669 mov r1, sp + 800ef3e: 9b1e ldr r3, [sp, #120] @ 0x78 + 800ef40: f000 f9c0 bl 800f2c4 <_svfiprintf_r> + 800ef44: 1c43 adds r3, r0, #1 + 800ef46: bfbc itt lt + 800ef48: 238b movlt r3, #139 @ 0x8b + 800ef4a: 602b strlt r3, [r5, #0] + 800ef4c: 2c00 cmp r4, #0 + 800ef4e: d0e0 beq.n 800ef12 <_vsniprintf_r+0x16> + 800ef50: 9b00 ldr r3, [sp, #0] + 800ef52: 2200 movs r2, #0 + 800ef54: 701a strb r2, [r3, #0] + 800ef56: e7dc b.n 800ef12 <_vsniprintf_r+0x16> -0800ef30 : - 800ef30: b507 push {r0, r1, r2, lr} - 800ef32: 9300 str r3, [sp, #0] - 800ef34: 4613 mov r3, r2 - 800ef36: 460a mov r2, r1 - 800ef38: 4601 mov r1, r0 - 800ef3a: 4803 ldr r0, [pc, #12] @ (800ef48 ) - 800ef3c: 6800 ldr r0, [r0, #0] - 800ef3e: f7ff ffc9 bl 800eed4 <_vsniprintf_r> - 800ef42: b003 add sp, #12 - 800ef44: f85d fb04 ldr.w pc, [sp], #4 - 800ef48: 2000001c .word 0x2000001c +0800ef58 : + 800ef58: b507 push {r0, r1, r2, lr} + 800ef5a: 9300 str r3, [sp, #0] + 800ef5c: 4613 mov r3, r2 + 800ef5e: 460a mov r2, r1 + 800ef60: 4601 mov r1, r0 + 800ef62: 4803 ldr r0, [pc, #12] @ (800ef70 ) + 800ef64: 6800 ldr r0, [r0, #0] + 800ef66: f7ff ffc9 bl 800eefc <_vsniprintf_r> + 800ef6a: b003 add sp, #12 + 800ef6c: f85d fb04 ldr.w pc, [sp], #4 + 800ef70: 2000001c .word 0x2000001c -0800ef4c : - 800ef4c: 4402 add r2, r0 - 800ef4e: 4603 mov r3, r0 - 800ef50: 4293 cmp r3, r2 - 800ef52: d100 bne.n 800ef56 - 800ef54: 4770 bx lr - 800ef56: f803 1b01 strb.w r1, [r3], #1 - 800ef5a: e7f9 b.n 800ef50 +0800ef74 : + 800ef74: 4402 add r2, r0 + 800ef76: 4603 mov r3, r0 + 800ef78: 4293 cmp r3, r2 + 800ef7a: d100 bne.n 800ef7e + 800ef7c: 4770 bx lr + 800ef7e: f803 1b01 strb.w r1, [r3], #1 + 800ef82: e7f9 b.n 800ef78 -0800ef5c : - 800ef5c: b510 push {r4, lr} - 800ef5e: b16a cbz r2, 800ef7c - 800ef60: 3901 subs r1, #1 - 800ef62: 1884 adds r4, r0, r2 - 800ef64: f810 2b01 ldrb.w r2, [r0], #1 - 800ef68: f811 3f01 ldrb.w r3, [r1, #1]! - 800ef6c: 429a cmp r2, r3 - 800ef6e: d103 bne.n 800ef78 - 800ef70: 42a0 cmp r0, r4 - 800ef72: d001 beq.n 800ef78 - 800ef74: 2a00 cmp r2, #0 - 800ef76: d1f5 bne.n 800ef64 - 800ef78: 1ad0 subs r0, r2, r3 - 800ef7a: bd10 pop {r4, pc} - 800ef7c: 4610 mov r0, r2 - 800ef7e: e7fc b.n 800ef7a +0800ef84 : + 800ef84: b510 push {r4, lr} + 800ef86: b16a cbz r2, 800efa4 + 800ef88: 3901 subs r1, #1 + 800ef8a: 1884 adds r4, r0, r2 + 800ef8c: f810 2b01 ldrb.w r2, [r0], #1 + 800ef90: f811 3f01 ldrb.w r3, [r1, #1]! + 800ef94: 429a cmp r2, r3 + 800ef96: d103 bne.n 800efa0 + 800ef98: 42a0 cmp r0, r4 + 800ef9a: d001 beq.n 800efa0 + 800ef9c: 2a00 cmp r2, #0 + 800ef9e: d1f5 bne.n 800ef8c + 800efa0: 1ad0 subs r0, r2, r3 + 800efa2: bd10 pop {r4, pc} + 800efa4: 4610 mov r0, r2 + 800efa6: e7fc b.n 800efa2 -0800ef80 <__errno>: - 800ef80: 4b01 ldr r3, [pc, #4] @ (800ef88 <__errno+0x8>) - 800ef82: 6818 ldr r0, [r3, #0] - 800ef84: 4770 bx lr - 800ef86: bf00 nop - 800ef88: 2000001c .word 0x2000001c +0800efa8 <__errno>: + 800efa8: 4b01 ldr r3, [pc, #4] @ (800efb0 <__errno+0x8>) + 800efaa: 6818 ldr r0, [r3, #0] + 800efac: 4770 bx lr + 800efae: bf00 nop + 800efb0: 2000001c .word 0x2000001c -0800ef8c <__libc_init_array>: - 800ef8c: b570 push {r4, r5, r6, lr} - 800ef8e: 4d0d ldr r5, [pc, #52] @ (800efc4 <__libc_init_array+0x38>) - 800ef90: 4c0d ldr r4, [pc, #52] @ (800efc8 <__libc_init_array+0x3c>) - 800ef92: 1b64 subs r4, r4, r5 - 800ef94: 10a4 asrs r4, r4, #2 - 800ef96: 2600 movs r6, #0 - 800ef98: 42a6 cmp r6, r4 - 800ef9a: d109 bne.n 800efb0 <__libc_init_array+0x24> - 800ef9c: 4d0b ldr r5, [pc, #44] @ (800efcc <__libc_init_array+0x40>) - 800ef9e: 4c0c ldr r4, [pc, #48] @ (800efd0 <__libc_init_array+0x44>) - 800efa0: f000 fc64 bl 800f86c <_init> - 800efa4: 1b64 subs r4, r4, r5 - 800efa6: 10a4 asrs r4, r4, #2 - 800efa8: 2600 movs r6, #0 - 800efaa: 42a6 cmp r6, r4 - 800efac: d105 bne.n 800efba <__libc_init_array+0x2e> - 800efae: bd70 pop {r4, r5, r6, pc} - 800efb0: f855 3b04 ldr.w r3, [r5], #4 - 800efb4: 4798 blx r3 - 800efb6: 3601 adds r6, #1 - 800efb8: e7ee b.n 800ef98 <__libc_init_array+0xc> - 800efba: f855 3b04 ldr.w r3, [r5], #4 - 800efbe: 4798 blx r3 - 800efc0: 3601 adds r6, #1 - 800efc2: e7f2 b.n 800efaa <__libc_init_array+0x1e> - 800efc4: 08010654 .word 0x08010654 - 800efc8: 08010654 .word 0x08010654 - 800efcc: 08010654 .word 0x08010654 - 800efd0: 08010658 .word 0x08010658 +0800efb4 <__libc_init_array>: + 800efb4: b570 push {r4, r5, r6, lr} + 800efb6: 4d0d ldr r5, [pc, #52] @ (800efec <__libc_init_array+0x38>) + 800efb8: 4c0d ldr r4, [pc, #52] @ (800eff0 <__libc_init_array+0x3c>) + 800efba: 1b64 subs r4, r4, r5 + 800efbc: 10a4 asrs r4, r4, #2 + 800efbe: 2600 movs r6, #0 + 800efc0: 42a6 cmp r6, r4 + 800efc2: d109 bne.n 800efd8 <__libc_init_array+0x24> + 800efc4: 4d0b ldr r5, [pc, #44] @ (800eff4 <__libc_init_array+0x40>) + 800efc6: 4c0c ldr r4, [pc, #48] @ (800eff8 <__libc_init_array+0x44>) + 800efc8: f000 fc64 bl 800f894 <_init> + 800efcc: 1b64 subs r4, r4, r5 + 800efce: 10a4 asrs r4, r4, #2 + 800efd0: 2600 movs r6, #0 + 800efd2: 42a6 cmp r6, r4 + 800efd4: d105 bne.n 800efe2 <__libc_init_array+0x2e> + 800efd6: bd70 pop {r4, r5, r6, pc} + 800efd8: f855 3b04 ldr.w r3, [r5], #4 + 800efdc: 4798 blx r3 + 800efde: 3601 adds r6, #1 + 800efe0: e7ee b.n 800efc0 <__libc_init_array+0xc> + 800efe2: f855 3b04 ldr.w r3, [r5], #4 + 800efe6: 4798 blx r3 + 800efe8: 3601 adds r6, #1 + 800efea: e7f2 b.n 800efd2 <__libc_init_array+0x1e> + 800efec: 0801067c .word 0x0801067c + 800eff0: 0801067c .word 0x0801067c + 800eff4: 0801067c .word 0x0801067c + 800eff8: 08010680 .word 0x08010680 -0800efd4 <__retarget_lock_acquire_recursive>: - 800efd4: 4770 bx lr +0800effc <__retarget_lock_acquire_recursive>: + 800effc: 4770 bx lr -0800efd6 <__retarget_lock_release_recursive>: - 800efd6: 4770 bx lr +0800effe <__retarget_lock_release_recursive>: + 800effe: 4770 bx lr -0800efd8 : - 800efd8: 440a add r2, r1 - 800efda: 4291 cmp r1, r2 - 800efdc: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff - 800efe0: d100 bne.n 800efe4 - 800efe2: 4770 bx lr - 800efe4: b510 push {r4, lr} - 800efe6: f811 4b01 ldrb.w r4, [r1], #1 - 800efea: f803 4f01 strb.w r4, [r3, #1]! - 800efee: 4291 cmp r1, r2 - 800eff0: d1f9 bne.n 800efe6 - 800eff2: bd10 pop {r4, pc} +0800f000 : + 800f000: 440a add r2, r1 + 800f002: 4291 cmp r1, r2 + 800f004: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff + 800f008: d100 bne.n 800f00c + 800f00a: 4770 bx lr + 800f00c: b510 push {r4, lr} + 800f00e: f811 4b01 ldrb.w r4, [r1], #1 + 800f012: f803 4f01 strb.w r4, [r3, #1]! + 800f016: 4291 cmp r1, r2 + 800f018: d1f9 bne.n 800f00e + 800f01a: bd10 pop {r4, pc} -0800eff4 <_free_r>: - 800eff4: b538 push {r3, r4, r5, lr} - 800eff6: 4605 mov r5, r0 - 800eff8: 2900 cmp r1, #0 - 800effa: d041 beq.n 800f080 <_free_r+0x8c> - 800effc: f851 3c04 ldr.w r3, [r1, #-4] - 800f000: 1f0c subs r4, r1, #4 - 800f002: 2b00 cmp r3, #0 - 800f004: bfb8 it lt - 800f006: 18e4 addlt r4, r4, r3 - 800f008: f000 f8e0 bl 800f1cc <__malloc_lock> - 800f00c: 4a1d ldr r2, [pc, #116] @ (800f084 <_free_r+0x90>) - 800f00e: 6813 ldr r3, [r2, #0] - 800f010: b933 cbnz r3, 800f020 <_free_r+0x2c> - 800f012: 6063 str r3, [r4, #4] - 800f014: 6014 str r4, [r2, #0] - 800f016: 4628 mov r0, r5 - 800f018: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 800f01c: f000 b8dc b.w 800f1d8 <__malloc_unlock> - 800f020: 42a3 cmp r3, r4 - 800f022: d908 bls.n 800f036 <_free_r+0x42> - 800f024: 6820 ldr r0, [r4, #0] - 800f026: 1821 adds r1, r4, r0 - 800f028: 428b cmp r3, r1 - 800f02a: bf01 itttt eq - 800f02c: 6819 ldreq r1, [r3, #0] - 800f02e: 685b ldreq r3, [r3, #4] - 800f030: 1809 addeq r1, r1, r0 - 800f032: 6021 streq r1, [r4, #0] - 800f034: e7ed b.n 800f012 <_free_r+0x1e> - 800f036: 461a mov r2, r3 - 800f038: 685b ldr r3, [r3, #4] - 800f03a: b10b cbz r3, 800f040 <_free_r+0x4c> - 800f03c: 42a3 cmp r3, r4 - 800f03e: d9fa bls.n 800f036 <_free_r+0x42> - 800f040: 6811 ldr r1, [r2, #0] - 800f042: 1850 adds r0, r2, r1 - 800f044: 42a0 cmp r0, r4 - 800f046: d10b bne.n 800f060 <_free_r+0x6c> - 800f048: 6820 ldr r0, [r4, #0] - 800f04a: 4401 add r1, r0 - 800f04c: 1850 adds r0, r2, r1 - 800f04e: 4283 cmp r3, r0 - 800f050: 6011 str r1, [r2, #0] - 800f052: d1e0 bne.n 800f016 <_free_r+0x22> - 800f054: 6818 ldr r0, [r3, #0] - 800f056: 685b ldr r3, [r3, #4] - 800f058: 6053 str r3, [r2, #4] - 800f05a: 4408 add r0, r1 - 800f05c: 6010 str r0, [r2, #0] - 800f05e: e7da b.n 800f016 <_free_r+0x22> - 800f060: d902 bls.n 800f068 <_free_r+0x74> - 800f062: 230c movs r3, #12 - 800f064: 602b str r3, [r5, #0] - 800f066: e7d6 b.n 800f016 <_free_r+0x22> - 800f068: 6820 ldr r0, [r4, #0] - 800f06a: 1821 adds r1, r4, r0 - 800f06c: 428b cmp r3, r1 - 800f06e: bf04 itt eq - 800f070: 6819 ldreq r1, [r3, #0] - 800f072: 685b ldreq r3, [r3, #4] - 800f074: 6063 str r3, [r4, #4] - 800f076: bf04 itt eq - 800f078: 1809 addeq r1, r1, r0 - 800f07a: 6021 streq r1, [r4, #0] - 800f07c: 6054 str r4, [r2, #4] - 800f07e: e7ca b.n 800f016 <_free_r+0x22> - 800f080: bd38 pop {r3, r4, r5, pc} - 800f082: bf00 nop - 800f084: 20001090 .word 0x20001090 +0800f01c <_free_r>: + 800f01c: b538 push {r3, r4, r5, lr} + 800f01e: 4605 mov r5, r0 + 800f020: 2900 cmp r1, #0 + 800f022: d041 beq.n 800f0a8 <_free_r+0x8c> + 800f024: f851 3c04 ldr.w r3, [r1, #-4] + 800f028: 1f0c subs r4, r1, #4 + 800f02a: 2b00 cmp r3, #0 + 800f02c: bfb8 it lt + 800f02e: 18e4 addlt r4, r4, r3 + 800f030: f000 f8e0 bl 800f1f4 <__malloc_lock> + 800f034: 4a1d ldr r2, [pc, #116] @ (800f0ac <_free_r+0x90>) + 800f036: 6813 ldr r3, [r2, #0] + 800f038: b933 cbnz r3, 800f048 <_free_r+0x2c> + 800f03a: 6063 str r3, [r4, #4] + 800f03c: 6014 str r4, [r2, #0] + 800f03e: 4628 mov r0, r5 + 800f040: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 800f044: f000 b8dc b.w 800f200 <__malloc_unlock> + 800f048: 42a3 cmp r3, r4 + 800f04a: d908 bls.n 800f05e <_free_r+0x42> + 800f04c: 6820 ldr r0, [r4, #0] + 800f04e: 1821 adds r1, r4, r0 + 800f050: 428b cmp r3, r1 + 800f052: bf01 itttt eq + 800f054: 6819 ldreq r1, [r3, #0] + 800f056: 685b ldreq r3, [r3, #4] + 800f058: 1809 addeq r1, r1, r0 + 800f05a: 6021 streq r1, [r4, #0] + 800f05c: e7ed b.n 800f03a <_free_r+0x1e> + 800f05e: 461a mov r2, r3 + 800f060: 685b ldr r3, [r3, #4] + 800f062: b10b cbz r3, 800f068 <_free_r+0x4c> + 800f064: 42a3 cmp r3, r4 + 800f066: d9fa bls.n 800f05e <_free_r+0x42> + 800f068: 6811 ldr r1, [r2, #0] + 800f06a: 1850 adds r0, r2, r1 + 800f06c: 42a0 cmp r0, r4 + 800f06e: d10b bne.n 800f088 <_free_r+0x6c> + 800f070: 6820 ldr r0, [r4, #0] + 800f072: 4401 add r1, r0 + 800f074: 1850 adds r0, r2, r1 + 800f076: 4283 cmp r3, r0 + 800f078: 6011 str r1, [r2, #0] + 800f07a: d1e0 bne.n 800f03e <_free_r+0x22> + 800f07c: 6818 ldr r0, [r3, #0] + 800f07e: 685b ldr r3, [r3, #4] + 800f080: 6053 str r3, [r2, #4] + 800f082: 4408 add r0, r1 + 800f084: 6010 str r0, [r2, #0] + 800f086: e7da b.n 800f03e <_free_r+0x22> + 800f088: d902 bls.n 800f090 <_free_r+0x74> + 800f08a: 230c movs r3, #12 + 800f08c: 602b str r3, [r5, #0] + 800f08e: e7d6 b.n 800f03e <_free_r+0x22> + 800f090: 6820 ldr r0, [r4, #0] + 800f092: 1821 adds r1, r4, r0 + 800f094: 428b cmp r3, r1 + 800f096: bf04 itt eq + 800f098: 6819 ldreq r1, [r3, #0] + 800f09a: 685b ldreq r3, [r3, #4] + 800f09c: 6063 str r3, [r4, #4] + 800f09e: bf04 itt eq + 800f0a0: 1809 addeq r1, r1, r0 + 800f0a2: 6021 streq r1, [r4, #0] + 800f0a4: 6054 str r4, [r2, #4] + 800f0a6: e7ca b.n 800f03e <_free_r+0x22> + 800f0a8: bd38 pop {r3, r4, r5, pc} + 800f0aa: bf00 nop + 800f0ac: 200010c8 .word 0x200010c8 -0800f088 : - 800f088: b570 push {r4, r5, r6, lr} - 800f08a: 4e0f ldr r6, [pc, #60] @ (800f0c8 ) - 800f08c: 460c mov r4, r1 - 800f08e: 6831 ldr r1, [r6, #0] - 800f090: 4605 mov r5, r0 - 800f092: b911 cbnz r1, 800f09a - 800f094: f000 fba4 bl 800f7e0 <_sbrk_r> - 800f098: 6030 str r0, [r6, #0] - 800f09a: 4621 mov r1, r4 - 800f09c: 4628 mov r0, r5 - 800f09e: f000 fb9f bl 800f7e0 <_sbrk_r> - 800f0a2: 1c43 adds r3, r0, #1 - 800f0a4: d103 bne.n 800f0ae - 800f0a6: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff - 800f0aa: 4620 mov r0, r4 - 800f0ac: bd70 pop {r4, r5, r6, pc} - 800f0ae: 1cc4 adds r4, r0, #3 - 800f0b0: f024 0403 bic.w r4, r4, #3 - 800f0b4: 42a0 cmp r0, r4 - 800f0b6: d0f8 beq.n 800f0aa - 800f0b8: 1a21 subs r1, r4, r0 - 800f0ba: 4628 mov r0, r5 - 800f0bc: f000 fb90 bl 800f7e0 <_sbrk_r> - 800f0c0: 3001 adds r0, #1 - 800f0c2: d1f2 bne.n 800f0aa - 800f0c4: e7ef b.n 800f0a6 - 800f0c6: bf00 nop - 800f0c8: 2000108c .word 0x2000108c +0800f0b0 : + 800f0b0: b570 push {r4, r5, r6, lr} + 800f0b2: 4e0f ldr r6, [pc, #60] @ (800f0f0 ) + 800f0b4: 460c mov r4, r1 + 800f0b6: 6831 ldr r1, [r6, #0] + 800f0b8: 4605 mov r5, r0 + 800f0ba: b911 cbnz r1, 800f0c2 + 800f0bc: f000 fba4 bl 800f808 <_sbrk_r> + 800f0c0: 6030 str r0, [r6, #0] + 800f0c2: 4621 mov r1, r4 + 800f0c4: 4628 mov r0, r5 + 800f0c6: f000 fb9f bl 800f808 <_sbrk_r> + 800f0ca: 1c43 adds r3, r0, #1 + 800f0cc: d103 bne.n 800f0d6 + 800f0ce: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff + 800f0d2: 4620 mov r0, r4 + 800f0d4: bd70 pop {r4, r5, r6, pc} + 800f0d6: 1cc4 adds r4, r0, #3 + 800f0d8: f024 0403 bic.w r4, r4, #3 + 800f0dc: 42a0 cmp r0, r4 + 800f0de: d0f8 beq.n 800f0d2 + 800f0e0: 1a21 subs r1, r4, r0 + 800f0e2: 4628 mov r0, r5 + 800f0e4: f000 fb90 bl 800f808 <_sbrk_r> + 800f0e8: 3001 adds r0, #1 + 800f0ea: d1f2 bne.n 800f0d2 + 800f0ec: e7ef b.n 800f0ce + 800f0ee: bf00 nop + 800f0f0: 200010c4 .word 0x200010c4 -0800f0cc <_malloc_r>: - 800f0cc: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 800f0d0: 1ccd adds r5, r1, #3 - 800f0d2: f025 0503 bic.w r5, r5, #3 - 800f0d6: 3508 adds r5, #8 - 800f0d8: 2d0c cmp r5, #12 - 800f0da: bf38 it cc - 800f0dc: 250c movcc r5, #12 - 800f0de: 2d00 cmp r5, #0 - 800f0e0: 4606 mov r6, r0 - 800f0e2: db01 blt.n 800f0e8 <_malloc_r+0x1c> - 800f0e4: 42a9 cmp r1, r5 - 800f0e6: d904 bls.n 800f0f2 <_malloc_r+0x26> - 800f0e8: 230c movs r3, #12 - 800f0ea: 6033 str r3, [r6, #0] - 800f0ec: 2000 movs r0, #0 - 800f0ee: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 800f0f2: f8df 80d4 ldr.w r8, [pc, #212] @ 800f1c8 <_malloc_r+0xfc> - 800f0f6: f000 f869 bl 800f1cc <__malloc_lock> - 800f0fa: f8d8 3000 ldr.w r3, [r8] - 800f0fe: 461c mov r4, r3 - 800f100: bb44 cbnz r4, 800f154 <_malloc_r+0x88> - 800f102: 4629 mov r1, r5 - 800f104: 4630 mov r0, r6 - 800f106: f7ff ffbf bl 800f088 - 800f10a: 1c43 adds r3, r0, #1 - 800f10c: 4604 mov r4, r0 - 800f10e: d158 bne.n 800f1c2 <_malloc_r+0xf6> - 800f110: f8d8 4000 ldr.w r4, [r8] - 800f114: 4627 mov r7, r4 - 800f116: 2f00 cmp r7, #0 - 800f118: d143 bne.n 800f1a2 <_malloc_r+0xd6> - 800f11a: 2c00 cmp r4, #0 - 800f11c: d04b beq.n 800f1b6 <_malloc_r+0xea> - 800f11e: 6823 ldr r3, [r4, #0] - 800f120: 4639 mov r1, r7 - 800f122: 4630 mov r0, r6 - 800f124: eb04 0903 add.w r9, r4, r3 - 800f128: f000 fb5a bl 800f7e0 <_sbrk_r> - 800f12c: 4581 cmp r9, r0 - 800f12e: d142 bne.n 800f1b6 <_malloc_r+0xea> - 800f130: 6821 ldr r1, [r4, #0] - 800f132: 1a6d subs r5, r5, r1 - 800f134: 4629 mov r1, r5 - 800f136: 4630 mov r0, r6 - 800f138: f7ff ffa6 bl 800f088 - 800f13c: 3001 adds r0, #1 - 800f13e: d03a beq.n 800f1b6 <_malloc_r+0xea> - 800f140: 6823 ldr r3, [r4, #0] - 800f142: 442b add r3, r5 - 800f144: 6023 str r3, [r4, #0] - 800f146: f8d8 3000 ldr.w r3, [r8] - 800f14a: 685a ldr r2, [r3, #4] - 800f14c: bb62 cbnz r2, 800f1a8 <_malloc_r+0xdc> - 800f14e: f8c8 7000 str.w r7, [r8] - 800f152: e00f b.n 800f174 <_malloc_r+0xa8> - 800f154: 6822 ldr r2, [r4, #0] - 800f156: 1b52 subs r2, r2, r5 - 800f158: d420 bmi.n 800f19c <_malloc_r+0xd0> - 800f15a: 2a0b cmp r2, #11 - 800f15c: d917 bls.n 800f18e <_malloc_r+0xc2> - 800f15e: 1961 adds r1, r4, r5 - 800f160: 42a3 cmp r3, r4 - 800f162: 6025 str r5, [r4, #0] - 800f164: bf18 it ne - 800f166: 6059 strne r1, [r3, #4] - 800f168: 6863 ldr r3, [r4, #4] - 800f16a: bf08 it eq - 800f16c: f8c8 1000 streq.w r1, [r8] - 800f170: 5162 str r2, [r4, r5] - 800f172: 604b str r3, [r1, #4] - 800f174: 4630 mov r0, r6 - 800f176: f000 f82f bl 800f1d8 <__malloc_unlock> - 800f17a: f104 000b add.w r0, r4, #11 - 800f17e: 1d23 adds r3, r4, #4 - 800f180: f020 0007 bic.w r0, r0, #7 - 800f184: 1ac2 subs r2, r0, r3 - 800f186: bf1c itt ne - 800f188: 1a1b subne r3, r3, r0 - 800f18a: 50a3 strne r3, [r4, r2] - 800f18c: e7af b.n 800f0ee <_malloc_r+0x22> - 800f18e: 6862 ldr r2, [r4, #4] - 800f190: 42a3 cmp r3, r4 - 800f192: bf0c ite eq - 800f194: f8c8 2000 streq.w r2, [r8] - 800f198: 605a strne r2, [r3, #4] - 800f19a: e7eb b.n 800f174 <_malloc_r+0xa8> - 800f19c: 4623 mov r3, r4 - 800f19e: 6864 ldr r4, [r4, #4] - 800f1a0: e7ae b.n 800f100 <_malloc_r+0x34> - 800f1a2: 463c mov r4, r7 - 800f1a4: 687f ldr r7, [r7, #4] - 800f1a6: e7b6 b.n 800f116 <_malloc_r+0x4a> - 800f1a8: 461a mov r2, r3 - 800f1aa: 685b ldr r3, [r3, #4] - 800f1ac: 42a3 cmp r3, r4 - 800f1ae: d1fb bne.n 800f1a8 <_malloc_r+0xdc> - 800f1b0: 2300 movs r3, #0 - 800f1b2: 6053 str r3, [r2, #4] - 800f1b4: e7de b.n 800f174 <_malloc_r+0xa8> - 800f1b6: 230c movs r3, #12 - 800f1b8: 6033 str r3, [r6, #0] - 800f1ba: 4630 mov r0, r6 - 800f1bc: f000 f80c bl 800f1d8 <__malloc_unlock> - 800f1c0: e794 b.n 800f0ec <_malloc_r+0x20> - 800f1c2: 6005 str r5, [r0, #0] - 800f1c4: e7d6 b.n 800f174 <_malloc_r+0xa8> - 800f1c6: bf00 nop - 800f1c8: 20001090 .word 0x20001090 +0800f0f4 <_malloc_r>: + 800f0f4: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 800f0f8: 1ccd adds r5, r1, #3 + 800f0fa: f025 0503 bic.w r5, r5, #3 + 800f0fe: 3508 adds r5, #8 + 800f100: 2d0c cmp r5, #12 + 800f102: bf38 it cc + 800f104: 250c movcc r5, #12 + 800f106: 2d00 cmp r5, #0 + 800f108: 4606 mov r6, r0 + 800f10a: db01 blt.n 800f110 <_malloc_r+0x1c> + 800f10c: 42a9 cmp r1, r5 + 800f10e: d904 bls.n 800f11a <_malloc_r+0x26> + 800f110: 230c movs r3, #12 + 800f112: 6033 str r3, [r6, #0] + 800f114: 2000 movs r0, #0 + 800f116: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 800f11a: f8df 80d4 ldr.w r8, [pc, #212] @ 800f1f0 <_malloc_r+0xfc> + 800f11e: f000 f869 bl 800f1f4 <__malloc_lock> + 800f122: f8d8 3000 ldr.w r3, [r8] + 800f126: 461c mov r4, r3 + 800f128: bb44 cbnz r4, 800f17c <_malloc_r+0x88> + 800f12a: 4629 mov r1, r5 + 800f12c: 4630 mov r0, r6 + 800f12e: f7ff ffbf bl 800f0b0 + 800f132: 1c43 adds r3, r0, #1 + 800f134: 4604 mov r4, r0 + 800f136: d158 bne.n 800f1ea <_malloc_r+0xf6> + 800f138: f8d8 4000 ldr.w r4, [r8] + 800f13c: 4627 mov r7, r4 + 800f13e: 2f00 cmp r7, #0 + 800f140: d143 bne.n 800f1ca <_malloc_r+0xd6> + 800f142: 2c00 cmp r4, #0 + 800f144: d04b beq.n 800f1de <_malloc_r+0xea> + 800f146: 6823 ldr r3, [r4, #0] + 800f148: 4639 mov r1, r7 + 800f14a: 4630 mov r0, r6 + 800f14c: eb04 0903 add.w r9, r4, r3 + 800f150: f000 fb5a bl 800f808 <_sbrk_r> + 800f154: 4581 cmp r9, r0 + 800f156: d142 bne.n 800f1de <_malloc_r+0xea> + 800f158: 6821 ldr r1, [r4, #0] + 800f15a: 1a6d subs r5, r5, r1 + 800f15c: 4629 mov r1, r5 + 800f15e: 4630 mov r0, r6 + 800f160: f7ff ffa6 bl 800f0b0 + 800f164: 3001 adds r0, #1 + 800f166: d03a beq.n 800f1de <_malloc_r+0xea> + 800f168: 6823 ldr r3, [r4, #0] + 800f16a: 442b add r3, r5 + 800f16c: 6023 str r3, [r4, #0] + 800f16e: f8d8 3000 ldr.w r3, [r8] + 800f172: 685a ldr r2, [r3, #4] + 800f174: bb62 cbnz r2, 800f1d0 <_malloc_r+0xdc> + 800f176: f8c8 7000 str.w r7, [r8] + 800f17a: e00f b.n 800f19c <_malloc_r+0xa8> + 800f17c: 6822 ldr r2, [r4, #0] + 800f17e: 1b52 subs r2, r2, r5 + 800f180: d420 bmi.n 800f1c4 <_malloc_r+0xd0> + 800f182: 2a0b cmp r2, #11 + 800f184: d917 bls.n 800f1b6 <_malloc_r+0xc2> + 800f186: 1961 adds r1, r4, r5 + 800f188: 42a3 cmp r3, r4 + 800f18a: 6025 str r5, [r4, #0] + 800f18c: bf18 it ne + 800f18e: 6059 strne r1, [r3, #4] + 800f190: 6863 ldr r3, [r4, #4] + 800f192: bf08 it eq + 800f194: f8c8 1000 streq.w r1, [r8] + 800f198: 5162 str r2, [r4, r5] + 800f19a: 604b str r3, [r1, #4] + 800f19c: 4630 mov r0, r6 + 800f19e: f000 f82f bl 800f200 <__malloc_unlock> + 800f1a2: f104 000b add.w r0, r4, #11 + 800f1a6: 1d23 adds r3, r4, #4 + 800f1a8: f020 0007 bic.w r0, r0, #7 + 800f1ac: 1ac2 subs r2, r0, r3 + 800f1ae: bf1c itt ne + 800f1b0: 1a1b subne r3, r3, r0 + 800f1b2: 50a3 strne r3, [r4, r2] + 800f1b4: e7af b.n 800f116 <_malloc_r+0x22> + 800f1b6: 6862 ldr r2, [r4, #4] + 800f1b8: 42a3 cmp r3, r4 + 800f1ba: bf0c ite eq + 800f1bc: f8c8 2000 streq.w r2, [r8] + 800f1c0: 605a strne r2, [r3, #4] + 800f1c2: e7eb b.n 800f19c <_malloc_r+0xa8> + 800f1c4: 4623 mov r3, r4 + 800f1c6: 6864 ldr r4, [r4, #4] + 800f1c8: e7ae b.n 800f128 <_malloc_r+0x34> + 800f1ca: 463c mov r4, r7 + 800f1cc: 687f ldr r7, [r7, #4] + 800f1ce: e7b6 b.n 800f13e <_malloc_r+0x4a> + 800f1d0: 461a mov r2, r3 + 800f1d2: 685b ldr r3, [r3, #4] + 800f1d4: 42a3 cmp r3, r4 + 800f1d6: d1fb bne.n 800f1d0 <_malloc_r+0xdc> + 800f1d8: 2300 movs r3, #0 + 800f1da: 6053 str r3, [r2, #4] + 800f1dc: e7de b.n 800f19c <_malloc_r+0xa8> + 800f1de: 230c movs r3, #12 + 800f1e0: 6033 str r3, [r6, #0] + 800f1e2: 4630 mov r0, r6 + 800f1e4: f000 f80c bl 800f200 <__malloc_unlock> + 800f1e8: e794 b.n 800f114 <_malloc_r+0x20> + 800f1ea: 6005 str r5, [r0, #0] + 800f1ec: e7d6 b.n 800f19c <_malloc_r+0xa8> + 800f1ee: bf00 nop + 800f1f0: 200010c8 .word 0x200010c8 -0800f1cc <__malloc_lock>: - 800f1cc: 4801 ldr r0, [pc, #4] @ (800f1d4 <__malloc_lock+0x8>) - 800f1ce: f7ff bf01 b.w 800efd4 <__retarget_lock_acquire_recursive> - 800f1d2: bf00 nop - 800f1d4: 20001088 .word 0x20001088 +0800f1f4 <__malloc_lock>: + 800f1f4: 4801 ldr r0, [pc, #4] @ (800f1fc <__malloc_lock+0x8>) + 800f1f6: f7ff bf01 b.w 800effc <__retarget_lock_acquire_recursive> + 800f1fa: bf00 nop + 800f1fc: 200010c0 .word 0x200010c0 -0800f1d8 <__malloc_unlock>: - 800f1d8: 4801 ldr r0, [pc, #4] @ (800f1e0 <__malloc_unlock+0x8>) - 800f1da: f7ff befc b.w 800efd6 <__retarget_lock_release_recursive> - 800f1de: bf00 nop - 800f1e0: 20001088 .word 0x20001088 +0800f200 <__malloc_unlock>: + 800f200: 4801 ldr r0, [pc, #4] @ (800f208 <__malloc_unlock+0x8>) + 800f202: f7ff befc b.w 800effe <__retarget_lock_release_recursive> + 800f206: bf00 nop + 800f208: 200010c0 .word 0x200010c0 -0800f1e4 <__ssputs_r>: - 800f1e4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 800f1e8: 688e ldr r6, [r1, #8] - 800f1ea: 461f mov r7, r3 - 800f1ec: 42be cmp r6, r7 - 800f1ee: 680b ldr r3, [r1, #0] - 800f1f0: 4682 mov sl, r0 - 800f1f2: 460c mov r4, r1 - 800f1f4: 4690 mov r8, r2 - 800f1f6: d82d bhi.n 800f254 <__ssputs_r+0x70> - 800f1f8: f9b1 200c ldrsh.w r2, [r1, #12] - 800f1fc: f412 6f90 tst.w r2, #1152 @ 0x480 - 800f200: d026 beq.n 800f250 <__ssputs_r+0x6c> - 800f202: 6965 ldr r5, [r4, #20] - 800f204: 6909 ldr r1, [r1, #16] - 800f206: eb05 0545 add.w r5, r5, r5, lsl #1 - 800f20a: eba3 0901 sub.w r9, r3, r1 - 800f20e: eb05 75d5 add.w r5, r5, r5, lsr #31 - 800f212: 1c7b adds r3, r7, #1 - 800f214: 444b add r3, r9 - 800f216: 106d asrs r5, r5, #1 - 800f218: 429d cmp r5, r3 - 800f21a: bf38 it cc - 800f21c: 461d movcc r5, r3 - 800f21e: 0553 lsls r3, r2, #21 - 800f220: d527 bpl.n 800f272 <__ssputs_r+0x8e> - 800f222: 4629 mov r1, r5 - 800f224: f7ff ff52 bl 800f0cc <_malloc_r> - 800f228: 4606 mov r6, r0 - 800f22a: b360 cbz r0, 800f286 <__ssputs_r+0xa2> - 800f22c: 6921 ldr r1, [r4, #16] - 800f22e: 464a mov r2, r9 - 800f230: f7ff fed2 bl 800efd8 - 800f234: 89a3 ldrh r3, [r4, #12] - 800f236: f423 6390 bic.w r3, r3, #1152 @ 0x480 - 800f23a: f043 0380 orr.w r3, r3, #128 @ 0x80 - 800f23e: 81a3 strh r3, [r4, #12] - 800f240: 6126 str r6, [r4, #16] - 800f242: 6165 str r5, [r4, #20] - 800f244: 444e add r6, r9 - 800f246: eba5 0509 sub.w r5, r5, r9 - 800f24a: 6026 str r6, [r4, #0] - 800f24c: 60a5 str r5, [r4, #8] - 800f24e: 463e mov r6, r7 - 800f250: 42be cmp r6, r7 - 800f252: d900 bls.n 800f256 <__ssputs_r+0x72> - 800f254: 463e mov r6, r7 - 800f256: 6820 ldr r0, [r4, #0] - 800f258: 4632 mov r2, r6 - 800f25a: 4641 mov r1, r8 - 800f25c: f000 faa6 bl 800f7ac - 800f260: 68a3 ldr r3, [r4, #8] - 800f262: 1b9b subs r3, r3, r6 - 800f264: 60a3 str r3, [r4, #8] - 800f266: 6823 ldr r3, [r4, #0] - 800f268: 4433 add r3, r6 - 800f26a: 6023 str r3, [r4, #0] - 800f26c: 2000 movs r0, #0 - 800f26e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 800f272: 462a mov r2, r5 - 800f274: f000 fac4 bl 800f800 <_realloc_r> - 800f278: 4606 mov r6, r0 - 800f27a: 2800 cmp r0, #0 - 800f27c: d1e0 bne.n 800f240 <__ssputs_r+0x5c> - 800f27e: 6921 ldr r1, [r4, #16] - 800f280: 4650 mov r0, sl - 800f282: f7ff feb7 bl 800eff4 <_free_r> - 800f286: 230c movs r3, #12 - 800f288: f8ca 3000 str.w r3, [sl] - 800f28c: 89a3 ldrh r3, [r4, #12] - 800f28e: f043 0340 orr.w r3, r3, #64 @ 0x40 - 800f292: 81a3 strh r3, [r4, #12] - 800f294: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800f298: e7e9 b.n 800f26e <__ssputs_r+0x8a> +0800f20c <__ssputs_r>: + 800f20c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 800f210: 688e ldr r6, [r1, #8] + 800f212: 461f mov r7, r3 + 800f214: 42be cmp r6, r7 + 800f216: 680b ldr r3, [r1, #0] + 800f218: 4682 mov sl, r0 + 800f21a: 460c mov r4, r1 + 800f21c: 4690 mov r8, r2 + 800f21e: d82d bhi.n 800f27c <__ssputs_r+0x70> + 800f220: f9b1 200c ldrsh.w r2, [r1, #12] + 800f224: f412 6f90 tst.w r2, #1152 @ 0x480 + 800f228: d026 beq.n 800f278 <__ssputs_r+0x6c> + 800f22a: 6965 ldr r5, [r4, #20] + 800f22c: 6909 ldr r1, [r1, #16] + 800f22e: eb05 0545 add.w r5, r5, r5, lsl #1 + 800f232: eba3 0901 sub.w r9, r3, r1 + 800f236: eb05 75d5 add.w r5, r5, r5, lsr #31 + 800f23a: 1c7b adds r3, r7, #1 + 800f23c: 444b add r3, r9 + 800f23e: 106d asrs r5, r5, #1 + 800f240: 429d cmp r5, r3 + 800f242: bf38 it cc + 800f244: 461d movcc r5, r3 + 800f246: 0553 lsls r3, r2, #21 + 800f248: d527 bpl.n 800f29a <__ssputs_r+0x8e> + 800f24a: 4629 mov r1, r5 + 800f24c: f7ff ff52 bl 800f0f4 <_malloc_r> + 800f250: 4606 mov r6, r0 + 800f252: b360 cbz r0, 800f2ae <__ssputs_r+0xa2> + 800f254: 6921 ldr r1, [r4, #16] + 800f256: 464a mov r2, r9 + 800f258: f7ff fed2 bl 800f000 + 800f25c: 89a3 ldrh r3, [r4, #12] + 800f25e: f423 6390 bic.w r3, r3, #1152 @ 0x480 + 800f262: f043 0380 orr.w r3, r3, #128 @ 0x80 + 800f266: 81a3 strh r3, [r4, #12] + 800f268: 6126 str r6, [r4, #16] + 800f26a: 6165 str r5, [r4, #20] + 800f26c: 444e add r6, r9 + 800f26e: eba5 0509 sub.w r5, r5, r9 + 800f272: 6026 str r6, [r4, #0] + 800f274: 60a5 str r5, [r4, #8] + 800f276: 463e mov r6, r7 + 800f278: 42be cmp r6, r7 + 800f27a: d900 bls.n 800f27e <__ssputs_r+0x72> + 800f27c: 463e mov r6, r7 + 800f27e: 6820 ldr r0, [r4, #0] + 800f280: 4632 mov r2, r6 + 800f282: 4641 mov r1, r8 + 800f284: f000 faa6 bl 800f7d4 + 800f288: 68a3 ldr r3, [r4, #8] + 800f28a: 1b9b subs r3, r3, r6 + 800f28c: 60a3 str r3, [r4, #8] + 800f28e: 6823 ldr r3, [r4, #0] + 800f290: 4433 add r3, r6 + 800f292: 6023 str r3, [r4, #0] + 800f294: 2000 movs r0, #0 + 800f296: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 800f29a: 462a mov r2, r5 + 800f29c: f000 fac4 bl 800f828 <_realloc_r> + 800f2a0: 4606 mov r6, r0 + 800f2a2: 2800 cmp r0, #0 + 800f2a4: d1e0 bne.n 800f268 <__ssputs_r+0x5c> + 800f2a6: 6921 ldr r1, [r4, #16] + 800f2a8: 4650 mov r0, sl + 800f2aa: f7ff feb7 bl 800f01c <_free_r> + 800f2ae: 230c movs r3, #12 + 800f2b0: f8ca 3000 str.w r3, [sl] + 800f2b4: 89a3 ldrh r3, [r4, #12] + 800f2b6: f043 0340 orr.w r3, r3, #64 @ 0x40 + 800f2ba: 81a3 strh r3, [r4, #12] + 800f2bc: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800f2c0: e7e9 b.n 800f296 <__ssputs_r+0x8a> ... -0800f29c <_svfiprintf_r>: - 800f29c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 800f2a0: 4698 mov r8, r3 - 800f2a2: 898b ldrh r3, [r1, #12] - 800f2a4: 061b lsls r3, r3, #24 - 800f2a6: b09d sub sp, #116 @ 0x74 - 800f2a8: 4607 mov r7, r0 - 800f2aa: 460d mov r5, r1 - 800f2ac: 4614 mov r4, r2 - 800f2ae: d510 bpl.n 800f2d2 <_svfiprintf_r+0x36> - 800f2b0: 690b ldr r3, [r1, #16] - 800f2b2: b973 cbnz r3, 800f2d2 <_svfiprintf_r+0x36> - 800f2b4: 2140 movs r1, #64 @ 0x40 - 800f2b6: f7ff ff09 bl 800f0cc <_malloc_r> - 800f2ba: 6028 str r0, [r5, #0] - 800f2bc: 6128 str r0, [r5, #16] - 800f2be: b930 cbnz r0, 800f2ce <_svfiprintf_r+0x32> - 800f2c0: 230c movs r3, #12 - 800f2c2: 603b str r3, [r7, #0] - 800f2c4: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800f2c8: b01d add sp, #116 @ 0x74 - 800f2ca: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 800f2ce: 2340 movs r3, #64 @ 0x40 - 800f2d0: 616b str r3, [r5, #20] - 800f2d2: 2300 movs r3, #0 - 800f2d4: 9309 str r3, [sp, #36] @ 0x24 - 800f2d6: 2320 movs r3, #32 - 800f2d8: f88d 3029 strb.w r3, [sp, #41] @ 0x29 - 800f2dc: f8cd 800c str.w r8, [sp, #12] - 800f2e0: 2330 movs r3, #48 @ 0x30 - 800f2e2: f8df 819c ldr.w r8, [pc, #412] @ 800f480 <_svfiprintf_r+0x1e4> - 800f2e6: f88d 302a strb.w r3, [sp, #42] @ 0x2a - 800f2ea: f04f 0901 mov.w r9, #1 - 800f2ee: 4623 mov r3, r4 - 800f2f0: 469a mov sl, r3 - 800f2f2: f813 2b01 ldrb.w r2, [r3], #1 - 800f2f6: b10a cbz r2, 800f2fc <_svfiprintf_r+0x60> - 800f2f8: 2a25 cmp r2, #37 @ 0x25 - 800f2fa: d1f9 bne.n 800f2f0 <_svfiprintf_r+0x54> - 800f2fc: ebba 0b04 subs.w fp, sl, r4 - 800f300: d00b beq.n 800f31a <_svfiprintf_r+0x7e> - 800f302: 465b mov r3, fp - 800f304: 4622 mov r2, r4 - 800f306: 4629 mov r1, r5 - 800f308: 4638 mov r0, r7 - 800f30a: f7ff ff6b bl 800f1e4 <__ssputs_r> - 800f30e: 3001 adds r0, #1 - 800f310: f000 80a7 beq.w 800f462 <_svfiprintf_r+0x1c6> - 800f314: 9a09 ldr r2, [sp, #36] @ 0x24 - 800f316: 445a add r2, fp - 800f318: 9209 str r2, [sp, #36] @ 0x24 - 800f31a: f89a 3000 ldrb.w r3, [sl] - 800f31e: 2b00 cmp r3, #0 - 800f320: f000 809f beq.w 800f462 <_svfiprintf_r+0x1c6> - 800f324: 2300 movs r3, #0 - 800f326: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 800f32a: e9cd 2305 strd r2, r3, [sp, #20] - 800f32e: f10a 0a01 add.w sl, sl, #1 - 800f332: 9304 str r3, [sp, #16] - 800f334: 9307 str r3, [sp, #28] - 800f336: f88d 3053 strb.w r3, [sp, #83] @ 0x53 - 800f33a: 931a str r3, [sp, #104] @ 0x68 - 800f33c: 4654 mov r4, sl - 800f33e: 2205 movs r2, #5 - 800f340: f814 1b01 ldrb.w r1, [r4], #1 - 800f344: 484e ldr r0, [pc, #312] @ (800f480 <_svfiprintf_r+0x1e4>) - 800f346: f7f0 ff33 bl 80001b0 - 800f34a: 9a04 ldr r2, [sp, #16] - 800f34c: b9d8 cbnz r0, 800f386 <_svfiprintf_r+0xea> - 800f34e: 06d0 lsls r0, r2, #27 - 800f350: bf44 itt mi - 800f352: 2320 movmi r3, #32 - 800f354: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 - 800f358: 0711 lsls r1, r2, #28 - 800f35a: bf44 itt mi - 800f35c: 232b movmi r3, #43 @ 0x2b - 800f35e: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 - 800f362: f89a 3000 ldrb.w r3, [sl] - 800f366: 2b2a cmp r3, #42 @ 0x2a - 800f368: d015 beq.n 800f396 <_svfiprintf_r+0xfa> - 800f36a: 9a07 ldr r2, [sp, #28] - 800f36c: 4654 mov r4, sl - 800f36e: 2000 movs r0, #0 - 800f370: f04f 0c0a mov.w ip, #10 - 800f374: 4621 mov r1, r4 - 800f376: f811 3b01 ldrb.w r3, [r1], #1 - 800f37a: 3b30 subs r3, #48 @ 0x30 - 800f37c: 2b09 cmp r3, #9 - 800f37e: d94b bls.n 800f418 <_svfiprintf_r+0x17c> - 800f380: b1b0 cbz r0, 800f3b0 <_svfiprintf_r+0x114> - 800f382: 9207 str r2, [sp, #28] - 800f384: e014 b.n 800f3b0 <_svfiprintf_r+0x114> - 800f386: eba0 0308 sub.w r3, r0, r8 - 800f38a: fa09 f303 lsl.w r3, r9, r3 - 800f38e: 4313 orrs r3, r2 - 800f390: 9304 str r3, [sp, #16] - 800f392: 46a2 mov sl, r4 - 800f394: e7d2 b.n 800f33c <_svfiprintf_r+0xa0> - 800f396: 9b03 ldr r3, [sp, #12] - 800f398: 1d19 adds r1, r3, #4 - 800f39a: 681b ldr r3, [r3, #0] - 800f39c: 9103 str r1, [sp, #12] - 800f39e: 2b00 cmp r3, #0 - 800f3a0: bfbb ittet lt - 800f3a2: 425b neglt r3, r3 - 800f3a4: f042 0202 orrlt.w r2, r2, #2 - 800f3a8: 9307 strge r3, [sp, #28] - 800f3aa: 9307 strlt r3, [sp, #28] - 800f3ac: bfb8 it lt - 800f3ae: 9204 strlt r2, [sp, #16] - 800f3b0: 7823 ldrb r3, [r4, #0] - 800f3b2: 2b2e cmp r3, #46 @ 0x2e - 800f3b4: d10a bne.n 800f3cc <_svfiprintf_r+0x130> - 800f3b6: 7863 ldrb r3, [r4, #1] - 800f3b8: 2b2a cmp r3, #42 @ 0x2a - 800f3ba: d132 bne.n 800f422 <_svfiprintf_r+0x186> - 800f3bc: 9b03 ldr r3, [sp, #12] - 800f3be: 1d1a adds r2, r3, #4 - 800f3c0: 681b ldr r3, [r3, #0] - 800f3c2: 9203 str r2, [sp, #12] - 800f3c4: ea43 73e3 orr.w r3, r3, r3, asr #31 - 800f3c8: 3402 adds r4, #2 - 800f3ca: 9305 str r3, [sp, #20] - 800f3cc: f8df a0b4 ldr.w sl, [pc, #180] @ 800f484 <_svfiprintf_r+0x1e8> - 800f3d0: 7821 ldrb r1, [r4, #0] - 800f3d2: 2203 movs r2, #3 - 800f3d4: 4650 mov r0, sl - 800f3d6: f7f0 feeb bl 80001b0 - 800f3da: b138 cbz r0, 800f3ec <_svfiprintf_r+0x150> - 800f3dc: 9b04 ldr r3, [sp, #16] - 800f3de: eba0 000a sub.w r0, r0, sl - 800f3e2: 2240 movs r2, #64 @ 0x40 - 800f3e4: 4082 lsls r2, r0 - 800f3e6: 4313 orrs r3, r2 - 800f3e8: 3401 adds r4, #1 - 800f3ea: 9304 str r3, [sp, #16] - 800f3ec: f814 1b01 ldrb.w r1, [r4], #1 - 800f3f0: 4825 ldr r0, [pc, #148] @ (800f488 <_svfiprintf_r+0x1ec>) - 800f3f2: f88d 1028 strb.w r1, [sp, #40] @ 0x28 - 800f3f6: 2206 movs r2, #6 - 800f3f8: f7f0 feda bl 80001b0 - 800f3fc: 2800 cmp r0, #0 - 800f3fe: d036 beq.n 800f46e <_svfiprintf_r+0x1d2> - 800f400: 4b22 ldr r3, [pc, #136] @ (800f48c <_svfiprintf_r+0x1f0>) - 800f402: bb1b cbnz r3, 800f44c <_svfiprintf_r+0x1b0> - 800f404: 9b03 ldr r3, [sp, #12] - 800f406: 3307 adds r3, #7 - 800f408: f023 0307 bic.w r3, r3, #7 - 800f40c: 3308 adds r3, #8 - 800f40e: 9303 str r3, [sp, #12] - 800f410: 9b09 ldr r3, [sp, #36] @ 0x24 - 800f412: 4433 add r3, r6 - 800f414: 9309 str r3, [sp, #36] @ 0x24 - 800f416: e76a b.n 800f2ee <_svfiprintf_r+0x52> - 800f418: fb0c 3202 mla r2, ip, r2, r3 - 800f41c: 460c mov r4, r1 - 800f41e: 2001 movs r0, #1 - 800f420: e7a8 b.n 800f374 <_svfiprintf_r+0xd8> - 800f422: 2300 movs r3, #0 - 800f424: 3401 adds r4, #1 - 800f426: 9305 str r3, [sp, #20] - 800f428: 4619 mov r1, r3 - 800f42a: f04f 0c0a mov.w ip, #10 - 800f42e: 4620 mov r0, r4 - 800f430: f810 2b01 ldrb.w r2, [r0], #1 - 800f434: 3a30 subs r2, #48 @ 0x30 - 800f436: 2a09 cmp r2, #9 - 800f438: d903 bls.n 800f442 <_svfiprintf_r+0x1a6> - 800f43a: 2b00 cmp r3, #0 - 800f43c: d0c6 beq.n 800f3cc <_svfiprintf_r+0x130> - 800f43e: 9105 str r1, [sp, #20] - 800f440: e7c4 b.n 800f3cc <_svfiprintf_r+0x130> - 800f442: fb0c 2101 mla r1, ip, r1, r2 - 800f446: 4604 mov r4, r0 - 800f448: 2301 movs r3, #1 - 800f44a: e7f0 b.n 800f42e <_svfiprintf_r+0x192> - 800f44c: ab03 add r3, sp, #12 - 800f44e: 9300 str r3, [sp, #0] - 800f450: 462a mov r2, r5 - 800f452: 4b0f ldr r3, [pc, #60] @ (800f490 <_svfiprintf_r+0x1f4>) - 800f454: a904 add r1, sp, #16 - 800f456: 4638 mov r0, r7 - 800f458: f3af 8000 nop.w - 800f45c: 1c42 adds r2, r0, #1 - 800f45e: 4606 mov r6, r0 - 800f460: d1d6 bne.n 800f410 <_svfiprintf_r+0x174> - 800f462: 89ab ldrh r3, [r5, #12] - 800f464: 065b lsls r3, r3, #25 - 800f466: f53f af2d bmi.w 800f2c4 <_svfiprintf_r+0x28> - 800f46a: 9809 ldr r0, [sp, #36] @ 0x24 - 800f46c: e72c b.n 800f2c8 <_svfiprintf_r+0x2c> - 800f46e: ab03 add r3, sp, #12 - 800f470: 9300 str r3, [sp, #0] - 800f472: 462a mov r2, r5 - 800f474: 4b06 ldr r3, [pc, #24] @ (800f490 <_svfiprintf_r+0x1f4>) - 800f476: a904 add r1, sp, #16 - 800f478: 4638 mov r0, r7 - 800f47a: f000 f879 bl 800f570 <_printf_i> - 800f47e: e7ed b.n 800f45c <_svfiprintf_r+0x1c0> - 800f480: 08010619 .word 0x08010619 - 800f484: 0801061f .word 0x0801061f - 800f488: 08010623 .word 0x08010623 - 800f48c: 00000000 .word 0x00000000 - 800f490: 0800f1e5 .word 0x0800f1e5 +0800f2c4 <_svfiprintf_r>: + 800f2c4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 800f2c8: 4698 mov r8, r3 + 800f2ca: 898b ldrh r3, [r1, #12] + 800f2cc: 061b lsls r3, r3, #24 + 800f2ce: b09d sub sp, #116 @ 0x74 + 800f2d0: 4607 mov r7, r0 + 800f2d2: 460d mov r5, r1 + 800f2d4: 4614 mov r4, r2 + 800f2d6: d510 bpl.n 800f2fa <_svfiprintf_r+0x36> + 800f2d8: 690b ldr r3, [r1, #16] + 800f2da: b973 cbnz r3, 800f2fa <_svfiprintf_r+0x36> + 800f2dc: 2140 movs r1, #64 @ 0x40 + 800f2de: f7ff ff09 bl 800f0f4 <_malloc_r> + 800f2e2: 6028 str r0, [r5, #0] + 800f2e4: 6128 str r0, [r5, #16] + 800f2e6: b930 cbnz r0, 800f2f6 <_svfiprintf_r+0x32> + 800f2e8: 230c movs r3, #12 + 800f2ea: 603b str r3, [r7, #0] + 800f2ec: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800f2f0: b01d add sp, #116 @ 0x74 + 800f2f2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 800f2f6: 2340 movs r3, #64 @ 0x40 + 800f2f8: 616b str r3, [r5, #20] + 800f2fa: 2300 movs r3, #0 + 800f2fc: 9309 str r3, [sp, #36] @ 0x24 + 800f2fe: 2320 movs r3, #32 + 800f300: f88d 3029 strb.w r3, [sp, #41] @ 0x29 + 800f304: f8cd 800c str.w r8, [sp, #12] + 800f308: 2330 movs r3, #48 @ 0x30 + 800f30a: f8df 819c ldr.w r8, [pc, #412] @ 800f4a8 <_svfiprintf_r+0x1e4> + 800f30e: f88d 302a strb.w r3, [sp, #42] @ 0x2a + 800f312: f04f 0901 mov.w r9, #1 + 800f316: 4623 mov r3, r4 + 800f318: 469a mov sl, r3 + 800f31a: f813 2b01 ldrb.w r2, [r3], #1 + 800f31e: b10a cbz r2, 800f324 <_svfiprintf_r+0x60> + 800f320: 2a25 cmp r2, #37 @ 0x25 + 800f322: d1f9 bne.n 800f318 <_svfiprintf_r+0x54> + 800f324: ebba 0b04 subs.w fp, sl, r4 + 800f328: d00b beq.n 800f342 <_svfiprintf_r+0x7e> + 800f32a: 465b mov r3, fp + 800f32c: 4622 mov r2, r4 + 800f32e: 4629 mov r1, r5 + 800f330: 4638 mov r0, r7 + 800f332: f7ff ff6b bl 800f20c <__ssputs_r> + 800f336: 3001 adds r0, #1 + 800f338: f000 80a7 beq.w 800f48a <_svfiprintf_r+0x1c6> + 800f33c: 9a09 ldr r2, [sp, #36] @ 0x24 + 800f33e: 445a add r2, fp + 800f340: 9209 str r2, [sp, #36] @ 0x24 + 800f342: f89a 3000 ldrb.w r3, [sl] + 800f346: 2b00 cmp r3, #0 + 800f348: f000 809f beq.w 800f48a <_svfiprintf_r+0x1c6> + 800f34c: 2300 movs r3, #0 + 800f34e: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 800f352: e9cd 2305 strd r2, r3, [sp, #20] + 800f356: f10a 0a01 add.w sl, sl, #1 + 800f35a: 9304 str r3, [sp, #16] + 800f35c: 9307 str r3, [sp, #28] + 800f35e: f88d 3053 strb.w r3, [sp, #83] @ 0x53 + 800f362: 931a str r3, [sp, #104] @ 0x68 + 800f364: 4654 mov r4, sl + 800f366: 2205 movs r2, #5 + 800f368: f814 1b01 ldrb.w r1, [r4], #1 + 800f36c: 484e ldr r0, [pc, #312] @ (800f4a8 <_svfiprintf_r+0x1e4>) + 800f36e: f7f0 ff1f bl 80001b0 + 800f372: 9a04 ldr r2, [sp, #16] + 800f374: b9d8 cbnz r0, 800f3ae <_svfiprintf_r+0xea> + 800f376: 06d0 lsls r0, r2, #27 + 800f378: bf44 itt mi + 800f37a: 2320 movmi r3, #32 + 800f37c: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 + 800f380: 0711 lsls r1, r2, #28 + 800f382: bf44 itt mi + 800f384: 232b movmi r3, #43 @ 0x2b + 800f386: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 + 800f38a: f89a 3000 ldrb.w r3, [sl] + 800f38e: 2b2a cmp r3, #42 @ 0x2a + 800f390: d015 beq.n 800f3be <_svfiprintf_r+0xfa> + 800f392: 9a07 ldr r2, [sp, #28] + 800f394: 4654 mov r4, sl + 800f396: 2000 movs r0, #0 + 800f398: f04f 0c0a mov.w ip, #10 + 800f39c: 4621 mov r1, r4 + 800f39e: f811 3b01 ldrb.w r3, [r1], #1 + 800f3a2: 3b30 subs r3, #48 @ 0x30 + 800f3a4: 2b09 cmp r3, #9 + 800f3a6: d94b bls.n 800f440 <_svfiprintf_r+0x17c> + 800f3a8: b1b0 cbz r0, 800f3d8 <_svfiprintf_r+0x114> + 800f3aa: 9207 str r2, [sp, #28] + 800f3ac: e014 b.n 800f3d8 <_svfiprintf_r+0x114> + 800f3ae: eba0 0308 sub.w r3, r0, r8 + 800f3b2: fa09 f303 lsl.w r3, r9, r3 + 800f3b6: 4313 orrs r3, r2 + 800f3b8: 9304 str r3, [sp, #16] + 800f3ba: 46a2 mov sl, r4 + 800f3bc: e7d2 b.n 800f364 <_svfiprintf_r+0xa0> + 800f3be: 9b03 ldr r3, [sp, #12] + 800f3c0: 1d19 adds r1, r3, #4 + 800f3c2: 681b ldr r3, [r3, #0] + 800f3c4: 9103 str r1, [sp, #12] + 800f3c6: 2b00 cmp r3, #0 + 800f3c8: bfbb ittet lt + 800f3ca: 425b neglt r3, r3 + 800f3cc: f042 0202 orrlt.w r2, r2, #2 + 800f3d0: 9307 strge r3, [sp, #28] + 800f3d2: 9307 strlt r3, [sp, #28] + 800f3d4: bfb8 it lt + 800f3d6: 9204 strlt r2, [sp, #16] + 800f3d8: 7823 ldrb r3, [r4, #0] + 800f3da: 2b2e cmp r3, #46 @ 0x2e + 800f3dc: d10a bne.n 800f3f4 <_svfiprintf_r+0x130> + 800f3de: 7863 ldrb r3, [r4, #1] + 800f3e0: 2b2a cmp r3, #42 @ 0x2a + 800f3e2: d132 bne.n 800f44a <_svfiprintf_r+0x186> + 800f3e4: 9b03 ldr r3, [sp, #12] + 800f3e6: 1d1a adds r2, r3, #4 + 800f3e8: 681b ldr r3, [r3, #0] + 800f3ea: 9203 str r2, [sp, #12] + 800f3ec: ea43 73e3 orr.w r3, r3, r3, asr #31 + 800f3f0: 3402 adds r4, #2 + 800f3f2: 9305 str r3, [sp, #20] + 800f3f4: f8df a0b4 ldr.w sl, [pc, #180] @ 800f4ac <_svfiprintf_r+0x1e8> + 800f3f8: 7821 ldrb r1, [r4, #0] + 800f3fa: 2203 movs r2, #3 + 800f3fc: 4650 mov r0, sl + 800f3fe: f7f0 fed7 bl 80001b0 + 800f402: b138 cbz r0, 800f414 <_svfiprintf_r+0x150> + 800f404: 9b04 ldr r3, [sp, #16] + 800f406: eba0 000a sub.w r0, r0, sl + 800f40a: 2240 movs r2, #64 @ 0x40 + 800f40c: 4082 lsls r2, r0 + 800f40e: 4313 orrs r3, r2 + 800f410: 3401 adds r4, #1 + 800f412: 9304 str r3, [sp, #16] + 800f414: f814 1b01 ldrb.w r1, [r4], #1 + 800f418: 4825 ldr r0, [pc, #148] @ (800f4b0 <_svfiprintf_r+0x1ec>) + 800f41a: f88d 1028 strb.w r1, [sp, #40] @ 0x28 + 800f41e: 2206 movs r2, #6 + 800f420: f7f0 fec6 bl 80001b0 + 800f424: 2800 cmp r0, #0 + 800f426: d036 beq.n 800f496 <_svfiprintf_r+0x1d2> + 800f428: 4b22 ldr r3, [pc, #136] @ (800f4b4 <_svfiprintf_r+0x1f0>) + 800f42a: bb1b cbnz r3, 800f474 <_svfiprintf_r+0x1b0> + 800f42c: 9b03 ldr r3, [sp, #12] + 800f42e: 3307 adds r3, #7 + 800f430: f023 0307 bic.w r3, r3, #7 + 800f434: 3308 adds r3, #8 + 800f436: 9303 str r3, [sp, #12] + 800f438: 9b09 ldr r3, [sp, #36] @ 0x24 + 800f43a: 4433 add r3, r6 + 800f43c: 9309 str r3, [sp, #36] @ 0x24 + 800f43e: e76a b.n 800f316 <_svfiprintf_r+0x52> + 800f440: fb0c 3202 mla r2, ip, r2, r3 + 800f444: 460c mov r4, r1 + 800f446: 2001 movs r0, #1 + 800f448: e7a8 b.n 800f39c <_svfiprintf_r+0xd8> + 800f44a: 2300 movs r3, #0 + 800f44c: 3401 adds r4, #1 + 800f44e: 9305 str r3, [sp, #20] + 800f450: 4619 mov r1, r3 + 800f452: f04f 0c0a mov.w ip, #10 + 800f456: 4620 mov r0, r4 + 800f458: f810 2b01 ldrb.w r2, [r0], #1 + 800f45c: 3a30 subs r2, #48 @ 0x30 + 800f45e: 2a09 cmp r2, #9 + 800f460: d903 bls.n 800f46a <_svfiprintf_r+0x1a6> + 800f462: 2b00 cmp r3, #0 + 800f464: d0c6 beq.n 800f3f4 <_svfiprintf_r+0x130> + 800f466: 9105 str r1, [sp, #20] + 800f468: e7c4 b.n 800f3f4 <_svfiprintf_r+0x130> + 800f46a: fb0c 2101 mla r1, ip, r1, r2 + 800f46e: 4604 mov r4, r0 + 800f470: 2301 movs r3, #1 + 800f472: e7f0 b.n 800f456 <_svfiprintf_r+0x192> + 800f474: ab03 add r3, sp, #12 + 800f476: 9300 str r3, [sp, #0] + 800f478: 462a mov r2, r5 + 800f47a: 4b0f ldr r3, [pc, #60] @ (800f4b8 <_svfiprintf_r+0x1f4>) + 800f47c: a904 add r1, sp, #16 + 800f47e: 4638 mov r0, r7 + 800f480: f3af 8000 nop.w + 800f484: 1c42 adds r2, r0, #1 + 800f486: 4606 mov r6, r0 + 800f488: d1d6 bne.n 800f438 <_svfiprintf_r+0x174> + 800f48a: 89ab ldrh r3, [r5, #12] + 800f48c: 065b lsls r3, r3, #25 + 800f48e: f53f af2d bmi.w 800f2ec <_svfiprintf_r+0x28> + 800f492: 9809 ldr r0, [sp, #36] @ 0x24 + 800f494: e72c b.n 800f2f0 <_svfiprintf_r+0x2c> + 800f496: ab03 add r3, sp, #12 + 800f498: 9300 str r3, [sp, #0] + 800f49a: 462a mov r2, r5 + 800f49c: 4b06 ldr r3, [pc, #24] @ (800f4b8 <_svfiprintf_r+0x1f4>) + 800f49e: a904 add r1, sp, #16 + 800f4a0: 4638 mov r0, r7 + 800f4a2: f000 f879 bl 800f598 <_printf_i> + 800f4a6: e7ed b.n 800f484 <_svfiprintf_r+0x1c0> + 800f4a8: 08010641 .word 0x08010641 + 800f4ac: 08010647 .word 0x08010647 + 800f4b0: 0801064b .word 0x0801064b + 800f4b4: 00000000 .word 0x00000000 + 800f4b8: 0800f20d .word 0x0800f20d -0800f494 <_printf_common>: - 800f494: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 800f498: 4616 mov r6, r2 - 800f49a: 4698 mov r8, r3 - 800f49c: 688a ldr r2, [r1, #8] - 800f49e: 690b ldr r3, [r1, #16] - 800f4a0: f8dd 9020 ldr.w r9, [sp, #32] - 800f4a4: 4293 cmp r3, r2 - 800f4a6: bfb8 it lt - 800f4a8: 4613 movlt r3, r2 - 800f4aa: 6033 str r3, [r6, #0] - 800f4ac: f891 2043 ldrb.w r2, [r1, #67] @ 0x43 - 800f4b0: 4607 mov r7, r0 - 800f4b2: 460c mov r4, r1 - 800f4b4: b10a cbz r2, 800f4ba <_printf_common+0x26> - 800f4b6: 3301 adds r3, #1 - 800f4b8: 6033 str r3, [r6, #0] - 800f4ba: 6823 ldr r3, [r4, #0] - 800f4bc: 0699 lsls r1, r3, #26 - 800f4be: bf42 ittt mi - 800f4c0: 6833 ldrmi r3, [r6, #0] - 800f4c2: 3302 addmi r3, #2 - 800f4c4: 6033 strmi r3, [r6, #0] - 800f4c6: 6825 ldr r5, [r4, #0] - 800f4c8: f015 0506 ands.w r5, r5, #6 - 800f4cc: d106 bne.n 800f4dc <_printf_common+0x48> - 800f4ce: f104 0a19 add.w sl, r4, #25 - 800f4d2: 68e3 ldr r3, [r4, #12] - 800f4d4: 6832 ldr r2, [r6, #0] - 800f4d6: 1a9b subs r3, r3, r2 - 800f4d8: 42ab cmp r3, r5 - 800f4da: dc26 bgt.n 800f52a <_printf_common+0x96> - 800f4dc: f894 3043 ldrb.w r3, [r4, #67] @ 0x43 - 800f4e0: 6822 ldr r2, [r4, #0] - 800f4e2: 3b00 subs r3, #0 - 800f4e4: bf18 it ne - 800f4e6: 2301 movne r3, #1 - 800f4e8: 0692 lsls r2, r2, #26 - 800f4ea: d42b bmi.n 800f544 <_printf_common+0xb0> - 800f4ec: f104 0243 add.w r2, r4, #67 @ 0x43 - 800f4f0: 4641 mov r1, r8 - 800f4f2: 4638 mov r0, r7 - 800f4f4: 47c8 blx r9 - 800f4f6: 3001 adds r0, #1 - 800f4f8: d01e beq.n 800f538 <_printf_common+0xa4> - 800f4fa: 6823 ldr r3, [r4, #0] - 800f4fc: 6922 ldr r2, [r4, #16] - 800f4fe: f003 0306 and.w r3, r3, #6 - 800f502: 2b04 cmp r3, #4 - 800f504: bf02 ittt eq - 800f506: 68e5 ldreq r5, [r4, #12] - 800f508: 6833 ldreq r3, [r6, #0] - 800f50a: 1aed subeq r5, r5, r3 - 800f50c: 68a3 ldr r3, [r4, #8] - 800f50e: bf0c ite eq - 800f510: ea25 75e5 biceq.w r5, r5, r5, asr #31 - 800f514: 2500 movne r5, #0 - 800f516: 4293 cmp r3, r2 - 800f518: bfc4 itt gt - 800f51a: 1a9b subgt r3, r3, r2 - 800f51c: 18ed addgt r5, r5, r3 - 800f51e: 2600 movs r6, #0 - 800f520: 341a adds r4, #26 - 800f522: 42b5 cmp r5, r6 - 800f524: d11a bne.n 800f55c <_printf_common+0xc8> - 800f526: 2000 movs r0, #0 - 800f528: e008 b.n 800f53c <_printf_common+0xa8> - 800f52a: 2301 movs r3, #1 - 800f52c: 4652 mov r2, sl - 800f52e: 4641 mov r1, r8 - 800f530: 4638 mov r0, r7 - 800f532: 47c8 blx r9 - 800f534: 3001 adds r0, #1 - 800f536: d103 bne.n 800f540 <_printf_common+0xac> - 800f538: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800f53c: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 800f540: 3501 adds r5, #1 - 800f542: e7c6 b.n 800f4d2 <_printf_common+0x3e> - 800f544: 18e1 adds r1, r4, r3 - 800f546: 1c5a adds r2, r3, #1 - 800f548: 2030 movs r0, #48 @ 0x30 - 800f54a: f881 0043 strb.w r0, [r1, #67] @ 0x43 - 800f54e: 4422 add r2, r4 - 800f550: f894 1045 ldrb.w r1, [r4, #69] @ 0x45 - 800f554: f882 1043 strb.w r1, [r2, #67] @ 0x43 - 800f558: 3302 adds r3, #2 - 800f55a: e7c7 b.n 800f4ec <_printf_common+0x58> - 800f55c: 2301 movs r3, #1 - 800f55e: 4622 mov r2, r4 - 800f560: 4641 mov r1, r8 - 800f562: 4638 mov r0, r7 - 800f564: 47c8 blx r9 - 800f566: 3001 adds r0, #1 - 800f568: d0e6 beq.n 800f538 <_printf_common+0xa4> - 800f56a: 3601 adds r6, #1 - 800f56c: e7d9 b.n 800f522 <_printf_common+0x8e> +0800f4bc <_printf_common>: + 800f4bc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 800f4c0: 4616 mov r6, r2 + 800f4c2: 4698 mov r8, r3 + 800f4c4: 688a ldr r2, [r1, #8] + 800f4c6: 690b ldr r3, [r1, #16] + 800f4c8: f8dd 9020 ldr.w r9, [sp, #32] + 800f4cc: 4293 cmp r3, r2 + 800f4ce: bfb8 it lt + 800f4d0: 4613 movlt r3, r2 + 800f4d2: 6033 str r3, [r6, #0] + 800f4d4: f891 2043 ldrb.w r2, [r1, #67] @ 0x43 + 800f4d8: 4607 mov r7, r0 + 800f4da: 460c mov r4, r1 + 800f4dc: b10a cbz r2, 800f4e2 <_printf_common+0x26> + 800f4de: 3301 adds r3, #1 + 800f4e0: 6033 str r3, [r6, #0] + 800f4e2: 6823 ldr r3, [r4, #0] + 800f4e4: 0699 lsls r1, r3, #26 + 800f4e6: bf42 ittt mi + 800f4e8: 6833 ldrmi r3, [r6, #0] + 800f4ea: 3302 addmi r3, #2 + 800f4ec: 6033 strmi r3, [r6, #0] + 800f4ee: 6825 ldr r5, [r4, #0] + 800f4f0: f015 0506 ands.w r5, r5, #6 + 800f4f4: d106 bne.n 800f504 <_printf_common+0x48> + 800f4f6: f104 0a19 add.w sl, r4, #25 + 800f4fa: 68e3 ldr r3, [r4, #12] + 800f4fc: 6832 ldr r2, [r6, #0] + 800f4fe: 1a9b subs r3, r3, r2 + 800f500: 42ab cmp r3, r5 + 800f502: dc26 bgt.n 800f552 <_printf_common+0x96> + 800f504: f894 3043 ldrb.w r3, [r4, #67] @ 0x43 + 800f508: 6822 ldr r2, [r4, #0] + 800f50a: 3b00 subs r3, #0 + 800f50c: bf18 it ne + 800f50e: 2301 movne r3, #1 + 800f510: 0692 lsls r2, r2, #26 + 800f512: d42b bmi.n 800f56c <_printf_common+0xb0> + 800f514: f104 0243 add.w r2, r4, #67 @ 0x43 + 800f518: 4641 mov r1, r8 + 800f51a: 4638 mov r0, r7 + 800f51c: 47c8 blx r9 + 800f51e: 3001 adds r0, #1 + 800f520: d01e beq.n 800f560 <_printf_common+0xa4> + 800f522: 6823 ldr r3, [r4, #0] + 800f524: 6922 ldr r2, [r4, #16] + 800f526: f003 0306 and.w r3, r3, #6 + 800f52a: 2b04 cmp r3, #4 + 800f52c: bf02 ittt eq + 800f52e: 68e5 ldreq r5, [r4, #12] + 800f530: 6833 ldreq r3, [r6, #0] + 800f532: 1aed subeq r5, r5, r3 + 800f534: 68a3 ldr r3, [r4, #8] + 800f536: bf0c ite eq + 800f538: ea25 75e5 biceq.w r5, r5, r5, asr #31 + 800f53c: 2500 movne r5, #0 + 800f53e: 4293 cmp r3, r2 + 800f540: bfc4 itt gt + 800f542: 1a9b subgt r3, r3, r2 + 800f544: 18ed addgt r5, r5, r3 + 800f546: 2600 movs r6, #0 + 800f548: 341a adds r4, #26 + 800f54a: 42b5 cmp r5, r6 + 800f54c: d11a bne.n 800f584 <_printf_common+0xc8> + 800f54e: 2000 movs r0, #0 + 800f550: e008 b.n 800f564 <_printf_common+0xa8> + 800f552: 2301 movs r3, #1 + 800f554: 4652 mov r2, sl + 800f556: 4641 mov r1, r8 + 800f558: 4638 mov r0, r7 + 800f55a: 47c8 blx r9 + 800f55c: 3001 adds r0, #1 + 800f55e: d103 bne.n 800f568 <_printf_common+0xac> + 800f560: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800f564: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 800f568: 3501 adds r5, #1 + 800f56a: e7c6 b.n 800f4fa <_printf_common+0x3e> + 800f56c: 18e1 adds r1, r4, r3 + 800f56e: 1c5a adds r2, r3, #1 + 800f570: 2030 movs r0, #48 @ 0x30 + 800f572: f881 0043 strb.w r0, [r1, #67] @ 0x43 + 800f576: 4422 add r2, r4 + 800f578: f894 1045 ldrb.w r1, [r4, #69] @ 0x45 + 800f57c: f882 1043 strb.w r1, [r2, #67] @ 0x43 + 800f580: 3302 adds r3, #2 + 800f582: e7c7 b.n 800f514 <_printf_common+0x58> + 800f584: 2301 movs r3, #1 + 800f586: 4622 mov r2, r4 + 800f588: 4641 mov r1, r8 + 800f58a: 4638 mov r0, r7 + 800f58c: 47c8 blx r9 + 800f58e: 3001 adds r0, #1 + 800f590: d0e6 beq.n 800f560 <_printf_common+0xa4> + 800f592: 3601 adds r6, #1 + 800f594: e7d9 b.n 800f54a <_printf_common+0x8e> ... -0800f570 <_printf_i>: - 800f570: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} - 800f574: 7e0f ldrb r7, [r1, #24] - 800f576: 9e0c ldr r6, [sp, #48] @ 0x30 - 800f578: 2f78 cmp r7, #120 @ 0x78 - 800f57a: 4691 mov r9, r2 - 800f57c: 4680 mov r8, r0 - 800f57e: 460c mov r4, r1 - 800f580: 469a mov sl, r3 - 800f582: f101 0243 add.w r2, r1, #67 @ 0x43 - 800f586: d807 bhi.n 800f598 <_printf_i+0x28> - 800f588: 2f62 cmp r7, #98 @ 0x62 - 800f58a: d80a bhi.n 800f5a2 <_printf_i+0x32> - 800f58c: 2f00 cmp r7, #0 - 800f58e: f000 80d1 beq.w 800f734 <_printf_i+0x1c4> - 800f592: 2f58 cmp r7, #88 @ 0x58 - 800f594: f000 80b8 beq.w 800f708 <_printf_i+0x198> - 800f598: f104 0642 add.w r6, r4, #66 @ 0x42 - 800f59c: f884 7042 strb.w r7, [r4, #66] @ 0x42 - 800f5a0: e03a b.n 800f618 <_printf_i+0xa8> - 800f5a2: f1a7 0363 sub.w r3, r7, #99 @ 0x63 - 800f5a6: 2b15 cmp r3, #21 - 800f5a8: d8f6 bhi.n 800f598 <_printf_i+0x28> - 800f5aa: a101 add r1, pc, #4 @ (adr r1, 800f5b0 <_printf_i+0x40>) - 800f5ac: f851 f023 ldr.w pc, [r1, r3, lsl #2] - 800f5b0: 0800f609 .word 0x0800f609 - 800f5b4: 0800f61d .word 0x0800f61d - 800f5b8: 0800f599 .word 0x0800f599 - 800f5bc: 0800f599 .word 0x0800f599 - 800f5c0: 0800f599 .word 0x0800f599 - 800f5c4: 0800f599 .word 0x0800f599 - 800f5c8: 0800f61d .word 0x0800f61d - 800f5cc: 0800f599 .word 0x0800f599 - 800f5d0: 0800f599 .word 0x0800f599 - 800f5d4: 0800f599 .word 0x0800f599 - 800f5d8: 0800f599 .word 0x0800f599 - 800f5dc: 0800f71b .word 0x0800f71b - 800f5e0: 0800f647 .word 0x0800f647 - 800f5e4: 0800f6d5 .word 0x0800f6d5 - 800f5e8: 0800f599 .word 0x0800f599 - 800f5ec: 0800f599 .word 0x0800f599 - 800f5f0: 0800f73d .word 0x0800f73d - 800f5f4: 0800f599 .word 0x0800f599 - 800f5f8: 0800f647 .word 0x0800f647 - 800f5fc: 0800f599 .word 0x0800f599 - 800f600: 0800f599 .word 0x0800f599 - 800f604: 0800f6dd .word 0x0800f6dd - 800f608: 6833 ldr r3, [r6, #0] - 800f60a: 1d1a adds r2, r3, #4 - 800f60c: 681b ldr r3, [r3, #0] - 800f60e: 6032 str r2, [r6, #0] - 800f610: f104 0642 add.w r6, r4, #66 @ 0x42 - 800f614: f884 3042 strb.w r3, [r4, #66] @ 0x42 - 800f618: 2301 movs r3, #1 - 800f61a: e09c b.n 800f756 <_printf_i+0x1e6> - 800f61c: 6833 ldr r3, [r6, #0] - 800f61e: 6820 ldr r0, [r4, #0] - 800f620: 1d19 adds r1, r3, #4 - 800f622: 6031 str r1, [r6, #0] - 800f624: 0606 lsls r6, r0, #24 - 800f626: d501 bpl.n 800f62c <_printf_i+0xbc> - 800f628: 681d ldr r5, [r3, #0] - 800f62a: e003 b.n 800f634 <_printf_i+0xc4> - 800f62c: 0645 lsls r5, r0, #25 - 800f62e: d5fb bpl.n 800f628 <_printf_i+0xb8> - 800f630: f9b3 5000 ldrsh.w r5, [r3] - 800f634: 2d00 cmp r5, #0 - 800f636: da03 bge.n 800f640 <_printf_i+0xd0> - 800f638: 232d movs r3, #45 @ 0x2d - 800f63a: 426d negs r5, r5 - 800f63c: f884 3043 strb.w r3, [r4, #67] @ 0x43 - 800f640: 4858 ldr r0, [pc, #352] @ (800f7a4 <_printf_i+0x234>) - 800f642: 230a movs r3, #10 - 800f644: e011 b.n 800f66a <_printf_i+0xfa> - 800f646: 6821 ldr r1, [r4, #0] - 800f648: 6833 ldr r3, [r6, #0] - 800f64a: 0608 lsls r0, r1, #24 - 800f64c: f853 5b04 ldr.w r5, [r3], #4 - 800f650: d402 bmi.n 800f658 <_printf_i+0xe8> - 800f652: 0649 lsls r1, r1, #25 - 800f654: bf48 it mi - 800f656: b2ad uxthmi r5, r5 - 800f658: 2f6f cmp r7, #111 @ 0x6f - 800f65a: 4852 ldr r0, [pc, #328] @ (800f7a4 <_printf_i+0x234>) - 800f65c: 6033 str r3, [r6, #0] - 800f65e: bf14 ite ne - 800f660: 230a movne r3, #10 - 800f662: 2308 moveq r3, #8 - 800f664: 2100 movs r1, #0 - 800f666: f884 1043 strb.w r1, [r4, #67] @ 0x43 - 800f66a: 6866 ldr r6, [r4, #4] - 800f66c: 60a6 str r6, [r4, #8] - 800f66e: 2e00 cmp r6, #0 - 800f670: db05 blt.n 800f67e <_printf_i+0x10e> - 800f672: 6821 ldr r1, [r4, #0] - 800f674: 432e orrs r6, r5 - 800f676: f021 0104 bic.w r1, r1, #4 - 800f67a: 6021 str r1, [r4, #0] - 800f67c: d04b beq.n 800f716 <_printf_i+0x1a6> - 800f67e: 4616 mov r6, r2 - 800f680: fbb5 f1f3 udiv r1, r5, r3 - 800f684: fb03 5711 mls r7, r3, r1, r5 - 800f688: 5dc7 ldrb r7, [r0, r7] - 800f68a: f806 7d01 strb.w r7, [r6, #-1]! - 800f68e: 462f mov r7, r5 - 800f690: 42bb cmp r3, r7 - 800f692: 460d mov r5, r1 - 800f694: d9f4 bls.n 800f680 <_printf_i+0x110> - 800f696: 2b08 cmp r3, #8 - 800f698: d10b bne.n 800f6b2 <_printf_i+0x142> - 800f69a: 6823 ldr r3, [r4, #0] - 800f69c: 07df lsls r7, r3, #31 - 800f69e: d508 bpl.n 800f6b2 <_printf_i+0x142> - 800f6a0: 6923 ldr r3, [r4, #16] - 800f6a2: 6861 ldr r1, [r4, #4] - 800f6a4: 4299 cmp r1, r3 - 800f6a6: bfde ittt le - 800f6a8: 2330 movle r3, #48 @ 0x30 - 800f6aa: f806 3c01 strble.w r3, [r6, #-1] - 800f6ae: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff - 800f6b2: 1b92 subs r2, r2, r6 - 800f6b4: 6122 str r2, [r4, #16] - 800f6b6: f8cd a000 str.w sl, [sp] - 800f6ba: 464b mov r3, r9 - 800f6bc: aa03 add r2, sp, #12 - 800f6be: 4621 mov r1, r4 - 800f6c0: 4640 mov r0, r8 - 800f6c2: f7ff fee7 bl 800f494 <_printf_common> - 800f6c6: 3001 adds r0, #1 - 800f6c8: d14a bne.n 800f760 <_printf_i+0x1f0> - 800f6ca: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800f6ce: b004 add sp, #16 - 800f6d0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 800f6d4: 6823 ldr r3, [r4, #0] - 800f6d6: f043 0320 orr.w r3, r3, #32 - 800f6da: 6023 str r3, [r4, #0] - 800f6dc: 4832 ldr r0, [pc, #200] @ (800f7a8 <_printf_i+0x238>) - 800f6de: 2778 movs r7, #120 @ 0x78 - 800f6e0: f884 7045 strb.w r7, [r4, #69] @ 0x45 - 800f6e4: 6823 ldr r3, [r4, #0] - 800f6e6: 6831 ldr r1, [r6, #0] - 800f6e8: 061f lsls r7, r3, #24 - 800f6ea: f851 5b04 ldr.w r5, [r1], #4 - 800f6ee: d402 bmi.n 800f6f6 <_printf_i+0x186> - 800f6f0: 065f lsls r7, r3, #25 - 800f6f2: bf48 it mi - 800f6f4: b2ad uxthmi r5, r5 - 800f6f6: 6031 str r1, [r6, #0] - 800f6f8: 07d9 lsls r1, r3, #31 - 800f6fa: bf44 itt mi - 800f6fc: f043 0320 orrmi.w r3, r3, #32 - 800f700: 6023 strmi r3, [r4, #0] - 800f702: b11d cbz r5, 800f70c <_printf_i+0x19c> - 800f704: 2310 movs r3, #16 - 800f706: e7ad b.n 800f664 <_printf_i+0xf4> - 800f708: 4826 ldr r0, [pc, #152] @ (800f7a4 <_printf_i+0x234>) - 800f70a: e7e9 b.n 800f6e0 <_printf_i+0x170> +0800f598 <_printf_i>: + 800f598: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 800f59c: 7e0f ldrb r7, [r1, #24] + 800f59e: 9e0c ldr r6, [sp, #48] @ 0x30 + 800f5a0: 2f78 cmp r7, #120 @ 0x78 + 800f5a2: 4691 mov r9, r2 + 800f5a4: 4680 mov r8, r0 + 800f5a6: 460c mov r4, r1 + 800f5a8: 469a mov sl, r3 + 800f5aa: f101 0243 add.w r2, r1, #67 @ 0x43 + 800f5ae: d807 bhi.n 800f5c0 <_printf_i+0x28> + 800f5b0: 2f62 cmp r7, #98 @ 0x62 + 800f5b2: d80a bhi.n 800f5ca <_printf_i+0x32> + 800f5b4: 2f00 cmp r7, #0 + 800f5b6: f000 80d1 beq.w 800f75c <_printf_i+0x1c4> + 800f5ba: 2f58 cmp r7, #88 @ 0x58 + 800f5bc: f000 80b8 beq.w 800f730 <_printf_i+0x198> + 800f5c0: f104 0642 add.w r6, r4, #66 @ 0x42 + 800f5c4: f884 7042 strb.w r7, [r4, #66] @ 0x42 + 800f5c8: e03a b.n 800f640 <_printf_i+0xa8> + 800f5ca: f1a7 0363 sub.w r3, r7, #99 @ 0x63 + 800f5ce: 2b15 cmp r3, #21 + 800f5d0: d8f6 bhi.n 800f5c0 <_printf_i+0x28> + 800f5d2: a101 add r1, pc, #4 @ (adr r1, 800f5d8 <_printf_i+0x40>) + 800f5d4: f851 f023 ldr.w pc, [r1, r3, lsl #2] + 800f5d8: 0800f631 .word 0x0800f631 + 800f5dc: 0800f645 .word 0x0800f645 + 800f5e0: 0800f5c1 .word 0x0800f5c1 + 800f5e4: 0800f5c1 .word 0x0800f5c1 + 800f5e8: 0800f5c1 .word 0x0800f5c1 + 800f5ec: 0800f5c1 .word 0x0800f5c1 + 800f5f0: 0800f645 .word 0x0800f645 + 800f5f4: 0800f5c1 .word 0x0800f5c1 + 800f5f8: 0800f5c1 .word 0x0800f5c1 + 800f5fc: 0800f5c1 .word 0x0800f5c1 + 800f600: 0800f5c1 .word 0x0800f5c1 + 800f604: 0800f743 .word 0x0800f743 + 800f608: 0800f66f .word 0x0800f66f + 800f60c: 0800f6fd .word 0x0800f6fd + 800f610: 0800f5c1 .word 0x0800f5c1 + 800f614: 0800f5c1 .word 0x0800f5c1 + 800f618: 0800f765 .word 0x0800f765 + 800f61c: 0800f5c1 .word 0x0800f5c1 + 800f620: 0800f66f .word 0x0800f66f + 800f624: 0800f5c1 .word 0x0800f5c1 + 800f628: 0800f5c1 .word 0x0800f5c1 + 800f62c: 0800f705 .word 0x0800f705 + 800f630: 6833 ldr r3, [r6, #0] + 800f632: 1d1a adds r2, r3, #4 + 800f634: 681b ldr r3, [r3, #0] + 800f636: 6032 str r2, [r6, #0] + 800f638: f104 0642 add.w r6, r4, #66 @ 0x42 + 800f63c: f884 3042 strb.w r3, [r4, #66] @ 0x42 + 800f640: 2301 movs r3, #1 + 800f642: e09c b.n 800f77e <_printf_i+0x1e6> + 800f644: 6833 ldr r3, [r6, #0] + 800f646: 6820 ldr r0, [r4, #0] + 800f648: 1d19 adds r1, r3, #4 + 800f64a: 6031 str r1, [r6, #0] + 800f64c: 0606 lsls r6, r0, #24 + 800f64e: d501 bpl.n 800f654 <_printf_i+0xbc> + 800f650: 681d ldr r5, [r3, #0] + 800f652: e003 b.n 800f65c <_printf_i+0xc4> + 800f654: 0645 lsls r5, r0, #25 + 800f656: d5fb bpl.n 800f650 <_printf_i+0xb8> + 800f658: f9b3 5000 ldrsh.w r5, [r3] + 800f65c: 2d00 cmp r5, #0 + 800f65e: da03 bge.n 800f668 <_printf_i+0xd0> + 800f660: 232d movs r3, #45 @ 0x2d + 800f662: 426d negs r5, r5 + 800f664: f884 3043 strb.w r3, [r4, #67] @ 0x43 + 800f668: 4858 ldr r0, [pc, #352] @ (800f7cc <_printf_i+0x234>) + 800f66a: 230a movs r3, #10 + 800f66c: e011 b.n 800f692 <_printf_i+0xfa> + 800f66e: 6821 ldr r1, [r4, #0] + 800f670: 6833 ldr r3, [r6, #0] + 800f672: 0608 lsls r0, r1, #24 + 800f674: f853 5b04 ldr.w r5, [r3], #4 + 800f678: d402 bmi.n 800f680 <_printf_i+0xe8> + 800f67a: 0649 lsls r1, r1, #25 + 800f67c: bf48 it mi + 800f67e: b2ad uxthmi r5, r5 + 800f680: 2f6f cmp r7, #111 @ 0x6f + 800f682: 4852 ldr r0, [pc, #328] @ (800f7cc <_printf_i+0x234>) + 800f684: 6033 str r3, [r6, #0] + 800f686: bf14 ite ne + 800f688: 230a movne r3, #10 + 800f68a: 2308 moveq r3, #8 + 800f68c: 2100 movs r1, #0 + 800f68e: f884 1043 strb.w r1, [r4, #67] @ 0x43 + 800f692: 6866 ldr r6, [r4, #4] + 800f694: 60a6 str r6, [r4, #8] + 800f696: 2e00 cmp r6, #0 + 800f698: db05 blt.n 800f6a6 <_printf_i+0x10e> + 800f69a: 6821 ldr r1, [r4, #0] + 800f69c: 432e orrs r6, r5 + 800f69e: f021 0104 bic.w r1, r1, #4 + 800f6a2: 6021 str r1, [r4, #0] + 800f6a4: d04b beq.n 800f73e <_printf_i+0x1a6> + 800f6a6: 4616 mov r6, r2 + 800f6a8: fbb5 f1f3 udiv r1, r5, r3 + 800f6ac: fb03 5711 mls r7, r3, r1, r5 + 800f6b0: 5dc7 ldrb r7, [r0, r7] + 800f6b2: f806 7d01 strb.w r7, [r6, #-1]! + 800f6b6: 462f mov r7, r5 + 800f6b8: 42bb cmp r3, r7 + 800f6ba: 460d mov r5, r1 + 800f6bc: d9f4 bls.n 800f6a8 <_printf_i+0x110> + 800f6be: 2b08 cmp r3, #8 + 800f6c0: d10b bne.n 800f6da <_printf_i+0x142> + 800f6c2: 6823 ldr r3, [r4, #0] + 800f6c4: 07df lsls r7, r3, #31 + 800f6c6: d508 bpl.n 800f6da <_printf_i+0x142> + 800f6c8: 6923 ldr r3, [r4, #16] + 800f6ca: 6861 ldr r1, [r4, #4] + 800f6cc: 4299 cmp r1, r3 + 800f6ce: bfde ittt le + 800f6d0: 2330 movle r3, #48 @ 0x30 + 800f6d2: f806 3c01 strble.w r3, [r6, #-1] + 800f6d6: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff + 800f6da: 1b92 subs r2, r2, r6 + 800f6dc: 6122 str r2, [r4, #16] + 800f6de: f8cd a000 str.w sl, [sp] + 800f6e2: 464b mov r3, r9 + 800f6e4: aa03 add r2, sp, #12 + 800f6e6: 4621 mov r1, r4 + 800f6e8: 4640 mov r0, r8 + 800f6ea: f7ff fee7 bl 800f4bc <_printf_common> + 800f6ee: 3001 adds r0, #1 + 800f6f0: d14a bne.n 800f788 <_printf_i+0x1f0> + 800f6f2: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800f6f6: b004 add sp, #16 + 800f6f8: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 800f6fc: 6823 ldr r3, [r4, #0] + 800f6fe: f043 0320 orr.w r3, r3, #32 + 800f702: 6023 str r3, [r4, #0] + 800f704: 4832 ldr r0, [pc, #200] @ (800f7d0 <_printf_i+0x238>) + 800f706: 2778 movs r7, #120 @ 0x78 + 800f708: f884 7045 strb.w r7, [r4, #69] @ 0x45 800f70c: 6823 ldr r3, [r4, #0] - 800f70e: f023 0320 bic.w r3, r3, #32 - 800f712: 6023 str r3, [r4, #0] - 800f714: e7f6 b.n 800f704 <_printf_i+0x194> - 800f716: 4616 mov r6, r2 - 800f718: e7bd b.n 800f696 <_printf_i+0x126> - 800f71a: 6833 ldr r3, [r6, #0] - 800f71c: 6825 ldr r5, [r4, #0] - 800f71e: 6961 ldr r1, [r4, #20] - 800f720: 1d18 adds r0, r3, #4 - 800f722: 6030 str r0, [r6, #0] - 800f724: 062e lsls r6, r5, #24 - 800f726: 681b ldr r3, [r3, #0] - 800f728: d501 bpl.n 800f72e <_printf_i+0x1be> - 800f72a: 6019 str r1, [r3, #0] - 800f72c: e002 b.n 800f734 <_printf_i+0x1c4> - 800f72e: 0668 lsls r0, r5, #25 - 800f730: d5fb bpl.n 800f72a <_printf_i+0x1ba> - 800f732: 8019 strh r1, [r3, #0] - 800f734: 2300 movs r3, #0 - 800f736: 6123 str r3, [r4, #16] - 800f738: 4616 mov r6, r2 - 800f73a: e7bc b.n 800f6b6 <_printf_i+0x146> - 800f73c: 6833 ldr r3, [r6, #0] - 800f73e: 1d1a adds r2, r3, #4 - 800f740: 6032 str r2, [r6, #0] - 800f742: 681e ldr r6, [r3, #0] - 800f744: 6862 ldr r2, [r4, #4] - 800f746: 2100 movs r1, #0 - 800f748: 4630 mov r0, r6 - 800f74a: f7f0 fd31 bl 80001b0 - 800f74e: b108 cbz r0, 800f754 <_printf_i+0x1e4> - 800f750: 1b80 subs r0, r0, r6 - 800f752: 6060 str r0, [r4, #4] - 800f754: 6863 ldr r3, [r4, #4] - 800f756: 6123 str r3, [r4, #16] - 800f758: 2300 movs r3, #0 - 800f75a: f884 3043 strb.w r3, [r4, #67] @ 0x43 - 800f75e: e7aa b.n 800f6b6 <_printf_i+0x146> - 800f760: 6923 ldr r3, [r4, #16] - 800f762: 4632 mov r2, r6 - 800f764: 4649 mov r1, r9 - 800f766: 4640 mov r0, r8 - 800f768: 47d0 blx sl - 800f76a: 3001 adds r0, #1 - 800f76c: d0ad beq.n 800f6ca <_printf_i+0x15a> - 800f76e: 6823 ldr r3, [r4, #0] - 800f770: 079b lsls r3, r3, #30 - 800f772: d413 bmi.n 800f79c <_printf_i+0x22c> - 800f774: 68e0 ldr r0, [r4, #12] - 800f776: 9b03 ldr r3, [sp, #12] - 800f778: 4298 cmp r0, r3 - 800f77a: bfb8 it lt - 800f77c: 4618 movlt r0, r3 - 800f77e: e7a6 b.n 800f6ce <_printf_i+0x15e> - 800f780: 2301 movs r3, #1 - 800f782: 4632 mov r2, r6 - 800f784: 4649 mov r1, r9 - 800f786: 4640 mov r0, r8 - 800f788: 47d0 blx sl - 800f78a: 3001 adds r0, #1 - 800f78c: d09d beq.n 800f6ca <_printf_i+0x15a> - 800f78e: 3501 adds r5, #1 - 800f790: 68e3 ldr r3, [r4, #12] - 800f792: 9903 ldr r1, [sp, #12] - 800f794: 1a5b subs r3, r3, r1 - 800f796: 42ab cmp r3, r5 - 800f798: dcf2 bgt.n 800f780 <_printf_i+0x210> - 800f79a: e7eb b.n 800f774 <_printf_i+0x204> - 800f79c: 2500 movs r5, #0 - 800f79e: f104 0619 add.w r6, r4, #25 - 800f7a2: e7f5 b.n 800f790 <_printf_i+0x220> - 800f7a4: 0801062a .word 0x0801062a - 800f7a8: 0801063b .word 0x0801063b + 800f70e: 6831 ldr r1, [r6, #0] + 800f710: 061f lsls r7, r3, #24 + 800f712: f851 5b04 ldr.w r5, [r1], #4 + 800f716: d402 bmi.n 800f71e <_printf_i+0x186> + 800f718: 065f lsls r7, r3, #25 + 800f71a: bf48 it mi + 800f71c: b2ad uxthmi r5, r5 + 800f71e: 6031 str r1, [r6, #0] + 800f720: 07d9 lsls r1, r3, #31 + 800f722: bf44 itt mi + 800f724: f043 0320 orrmi.w r3, r3, #32 + 800f728: 6023 strmi r3, [r4, #0] + 800f72a: b11d cbz r5, 800f734 <_printf_i+0x19c> + 800f72c: 2310 movs r3, #16 + 800f72e: e7ad b.n 800f68c <_printf_i+0xf4> + 800f730: 4826 ldr r0, [pc, #152] @ (800f7cc <_printf_i+0x234>) + 800f732: e7e9 b.n 800f708 <_printf_i+0x170> + 800f734: 6823 ldr r3, [r4, #0] + 800f736: f023 0320 bic.w r3, r3, #32 + 800f73a: 6023 str r3, [r4, #0] + 800f73c: e7f6 b.n 800f72c <_printf_i+0x194> + 800f73e: 4616 mov r6, r2 + 800f740: e7bd b.n 800f6be <_printf_i+0x126> + 800f742: 6833 ldr r3, [r6, #0] + 800f744: 6825 ldr r5, [r4, #0] + 800f746: 6961 ldr r1, [r4, #20] + 800f748: 1d18 adds r0, r3, #4 + 800f74a: 6030 str r0, [r6, #0] + 800f74c: 062e lsls r6, r5, #24 + 800f74e: 681b ldr r3, [r3, #0] + 800f750: d501 bpl.n 800f756 <_printf_i+0x1be> + 800f752: 6019 str r1, [r3, #0] + 800f754: e002 b.n 800f75c <_printf_i+0x1c4> + 800f756: 0668 lsls r0, r5, #25 + 800f758: d5fb bpl.n 800f752 <_printf_i+0x1ba> + 800f75a: 8019 strh r1, [r3, #0] + 800f75c: 2300 movs r3, #0 + 800f75e: 6123 str r3, [r4, #16] + 800f760: 4616 mov r6, r2 + 800f762: e7bc b.n 800f6de <_printf_i+0x146> + 800f764: 6833 ldr r3, [r6, #0] + 800f766: 1d1a adds r2, r3, #4 + 800f768: 6032 str r2, [r6, #0] + 800f76a: 681e ldr r6, [r3, #0] + 800f76c: 6862 ldr r2, [r4, #4] + 800f76e: 2100 movs r1, #0 + 800f770: 4630 mov r0, r6 + 800f772: f7f0 fd1d bl 80001b0 + 800f776: b108 cbz r0, 800f77c <_printf_i+0x1e4> + 800f778: 1b80 subs r0, r0, r6 + 800f77a: 6060 str r0, [r4, #4] + 800f77c: 6863 ldr r3, [r4, #4] + 800f77e: 6123 str r3, [r4, #16] + 800f780: 2300 movs r3, #0 + 800f782: f884 3043 strb.w r3, [r4, #67] @ 0x43 + 800f786: e7aa b.n 800f6de <_printf_i+0x146> + 800f788: 6923 ldr r3, [r4, #16] + 800f78a: 4632 mov r2, r6 + 800f78c: 4649 mov r1, r9 + 800f78e: 4640 mov r0, r8 + 800f790: 47d0 blx sl + 800f792: 3001 adds r0, #1 + 800f794: d0ad beq.n 800f6f2 <_printf_i+0x15a> + 800f796: 6823 ldr r3, [r4, #0] + 800f798: 079b lsls r3, r3, #30 + 800f79a: d413 bmi.n 800f7c4 <_printf_i+0x22c> + 800f79c: 68e0 ldr r0, [r4, #12] + 800f79e: 9b03 ldr r3, [sp, #12] + 800f7a0: 4298 cmp r0, r3 + 800f7a2: bfb8 it lt + 800f7a4: 4618 movlt r0, r3 + 800f7a6: e7a6 b.n 800f6f6 <_printf_i+0x15e> + 800f7a8: 2301 movs r3, #1 + 800f7aa: 4632 mov r2, r6 + 800f7ac: 4649 mov r1, r9 + 800f7ae: 4640 mov r0, r8 + 800f7b0: 47d0 blx sl + 800f7b2: 3001 adds r0, #1 + 800f7b4: d09d beq.n 800f6f2 <_printf_i+0x15a> + 800f7b6: 3501 adds r5, #1 + 800f7b8: 68e3 ldr r3, [r4, #12] + 800f7ba: 9903 ldr r1, [sp, #12] + 800f7bc: 1a5b subs r3, r3, r1 + 800f7be: 42ab cmp r3, r5 + 800f7c0: dcf2 bgt.n 800f7a8 <_printf_i+0x210> + 800f7c2: e7eb b.n 800f79c <_printf_i+0x204> + 800f7c4: 2500 movs r5, #0 + 800f7c6: f104 0619 add.w r6, r4, #25 + 800f7ca: e7f5 b.n 800f7b8 <_printf_i+0x220> + 800f7cc: 08010652 .word 0x08010652 + 800f7d0: 08010663 .word 0x08010663 -0800f7ac : - 800f7ac: 4288 cmp r0, r1 - 800f7ae: b510 push {r4, lr} - 800f7b0: eb01 0402 add.w r4, r1, r2 - 800f7b4: d902 bls.n 800f7bc - 800f7b6: 4284 cmp r4, r0 - 800f7b8: 4623 mov r3, r4 - 800f7ba: d807 bhi.n 800f7cc - 800f7bc: 1e43 subs r3, r0, #1 - 800f7be: 42a1 cmp r1, r4 - 800f7c0: d008 beq.n 800f7d4 - 800f7c2: f811 2b01 ldrb.w r2, [r1], #1 - 800f7c6: f803 2f01 strb.w r2, [r3, #1]! - 800f7ca: e7f8 b.n 800f7be - 800f7cc: 4402 add r2, r0 - 800f7ce: 4601 mov r1, r0 - 800f7d0: 428a cmp r2, r1 - 800f7d2: d100 bne.n 800f7d6 - 800f7d4: bd10 pop {r4, pc} - 800f7d6: f813 4d01 ldrb.w r4, [r3, #-1]! - 800f7da: f802 4d01 strb.w r4, [r2, #-1]! - 800f7de: e7f7 b.n 800f7d0 +0800f7d4 : + 800f7d4: 4288 cmp r0, r1 + 800f7d6: b510 push {r4, lr} + 800f7d8: eb01 0402 add.w r4, r1, r2 + 800f7dc: d902 bls.n 800f7e4 + 800f7de: 4284 cmp r4, r0 + 800f7e0: 4623 mov r3, r4 + 800f7e2: d807 bhi.n 800f7f4 + 800f7e4: 1e43 subs r3, r0, #1 + 800f7e6: 42a1 cmp r1, r4 + 800f7e8: d008 beq.n 800f7fc + 800f7ea: f811 2b01 ldrb.w r2, [r1], #1 + 800f7ee: f803 2f01 strb.w r2, [r3, #1]! + 800f7f2: e7f8 b.n 800f7e6 + 800f7f4: 4402 add r2, r0 + 800f7f6: 4601 mov r1, r0 + 800f7f8: 428a cmp r2, r1 + 800f7fa: d100 bne.n 800f7fe + 800f7fc: bd10 pop {r4, pc} + 800f7fe: f813 4d01 ldrb.w r4, [r3, #-1]! + 800f802: f802 4d01 strb.w r4, [r2, #-1]! + 800f806: e7f7 b.n 800f7f8 -0800f7e0 <_sbrk_r>: - 800f7e0: b538 push {r3, r4, r5, lr} - 800f7e2: 4d06 ldr r5, [pc, #24] @ (800f7fc <_sbrk_r+0x1c>) - 800f7e4: 2300 movs r3, #0 - 800f7e6: 4604 mov r4, r0 - 800f7e8: 4608 mov r0, r1 - 800f7ea: 602b str r3, [r5, #0] - 800f7ec: f7f1 faba bl 8000d64 <_sbrk> - 800f7f0: 1c43 adds r3, r0, #1 - 800f7f2: d102 bne.n 800f7fa <_sbrk_r+0x1a> - 800f7f4: 682b ldr r3, [r5, #0] - 800f7f6: b103 cbz r3, 800f7fa <_sbrk_r+0x1a> - 800f7f8: 6023 str r3, [r4, #0] - 800f7fa: bd38 pop {r3, r4, r5, pc} - 800f7fc: 20001084 .word 0x20001084 +0800f808 <_sbrk_r>: + 800f808: b538 push {r3, r4, r5, lr} + 800f80a: 4d06 ldr r5, [pc, #24] @ (800f824 <_sbrk_r+0x1c>) + 800f80c: 2300 movs r3, #0 + 800f80e: 4604 mov r4, r0 + 800f810: 4608 mov r0, r1 + 800f812: 602b str r3, [r5, #0] + 800f814: f7f1 faa6 bl 8000d64 <_sbrk> + 800f818: 1c43 adds r3, r0, #1 + 800f81a: d102 bne.n 800f822 <_sbrk_r+0x1a> + 800f81c: 682b ldr r3, [r5, #0] + 800f81e: b103 cbz r3, 800f822 <_sbrk_r+0x1a> + 800f820: 6023 str r3, [r4, #0] + 800f822: bd38 pop {r3, r4, r5, pc} + 800f824: 200010bc .word 0x200010bc -0800f800 <_realloc_r>: - 800f800: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 800f804: 4607 mov r7, r0 - 800f806: 4614 mov r4, r2 - 800f808: 460d mov r5, r1 - 800f80a: b921 cbnz r1, 800f816 <_realloc_r+0x16> - 800f80c: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 800f810: 4611 mov r1, r2 - 800f812: f7ff bc5b b.w 800f0cc <_malloc_r> - 800f816: b92a cbnz r2, 800f824 <_realloc_r+0x24> - 800f818: f7ff fbec bl 800eff4 <_free_r> - 800f81c: 4625 mov r5, r4 - 800f81e: 4628 mov r0, r5 - 800f820: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 800f824: f000 f81a bl 800f85c <_malloc_usable_size_r> - 800f828: 4284 cmp r4, r0 - 800f82a: 4606 mov r6, r0 - 800f82c: d802 bhi.n 800f834 <_realloc_r+0x34> - 800f82e: ebb4 0f50 cmp.w r4, r0, lsr #1 - 800f832: d8f4 bhi.n 800f81e <_realloc_r+0x1e> - 800f834: 4621 mov r1, r4 - 800f836: 4638 mov r0, r7 - 800f838: f7ff fc48 bl 800f0cc <_malloc_r> - 800f83c: 4680 mov r8, r0 - 800f83e: b908 cbnz r0, 800f844 <_realloc_r+0x44> - 800f840: 4645 mov r5, r8 - 800f842: e7ec b.n 800f81e <_realloc_r+0x1e> - 800f844: 42b4 cmp r4, r6 - 800f846: 4622 mov r2, r4 - 800f848: 4629 mov r1, r5 - 800f84a: bf28 it cs - 800f84c: 4632 movcs r2, r6 - 800f84e: f7ff fbc3 bl 800efd8 - 800f852: 4629 mov r1, r5 - 800f854: 4638 mov r0, r7 - 800f856: f7ff fbcd bl 800eff4 <_free_r> - 800f85a: e7f1 b.n 800f840 <_realloc_r+0x40> +0800f828 <_realloc_r>: + 800f828: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 800f82c: 4607 mov r7, r0 + 800f82e: 4614 mov r4, r2 + 800f830: 460d mov r5, r1 + 800f832: b921 cbnz r1, 800f83e <_realloc_r+0x16> + 800f834: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 800f838: 4611 mov r1, r2 + 800f83a: f7ff bc5b b.w 800f0f4 <_malloc_r> + 800f83e: b92a cbnz r2, 800f84c <_realloc_r+0x24> + 800f840: f7ff fbec bl 800f01c <_free_r> + 800f844: 4625 mov r5, r4 + 800f846: 4628 mov r0, r5 + 800f848: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 800f84c: f000 f81a bl 800f884 <_malloc_usable_size_r> + 800f850: 4284 cmp r4, r0 + 800f852: 4606 mov r6, r0 + 800f854: d802 bhi.n 800f85c <_realloc_r+0x34> + 800f856: ebb4 0f50 cmp.w r4, r0, lsr #1 + 800f85a: d8f4 bhi.n 800f846 <_realloc_r+0x1e> + 800f85c: 4621 mov r1, r4 + 800f85e: 4638 mov r0, r7 + 800f860: f7ff fc48 bl 800f0f4 <_malloc_r> + 800f864: 4680 mov r8, r0 + 800f866: b908 cbnz r0, 800f86c <_realloc_r+0x44> + 800f868: 4645 mov r5, r8 + 800f86a: e7ec b.n 800f846 <_realloc_r+0x1e> + 800f86c: 42b4 cmp r4, r6 + 800f86e: 4622 mov r2, r4 + 800f870: 4629 mov r1, r5 + 800f872: bf28 it cs + 800f874: 4632 movcs r2, r6 + 800f876: f7ff fbc3 bl 800f000 + 800f87a: 4629 mov r1, r5 + 800f87c: 4638 mov r0, r7 + 800f87e: f7ff fbcd bl 800f01c <_free_r> + 800f882: e7f1 b.n 800f868 <_realloc_r+0x40> -0800f85c <_malloc_usable_size_r>: - 800f85c: f851 3c04 ldr.w r3, [r1, #-4] - 800f860: 1f18 subs r0, r3, #4 - 800f862: 2b00 cmp r3, #0 - 800f864: bfbc itt lt - 800f866: 580b ldrlt r3, [r1, r0] - 800f868: 18c0 addlt r0, r0, r3 - 800f86a: 4770 bx lr +0800f884 <_malloc_usable_size_r>: + 800f884: f851 3c04 ldr.w r3, [r1, #-4] + 800f888: 1f18 subs r0, r3, #4 + 800f88a: 2b00 cmp r3, #0 + 800f88c: bfbc itt lt + 800f88e: 580b ldrlt r3, [r1, r0] + 800f890: 18c0 addlt r0, r0, r3 + 800f892: 4770 bx lr -0800f86c <_init>: - 800f86c: b5f8 push {r3, r4, r5, r6, r7, lr} - 800f86e: bf00 nop - 800f870: bcf8 pop {r3, r4, r5, r6, r7} - 800f872: bc08 pop {r3} - 800f874: 469e mov lr, r3 - 800f876: 4770 bx lr +0800f894 <_init>: + 800f894: b5f8 push {r3, r4, r5, r6, r7, lr} + 800f896: bf00 nop + 800f898: bcf8 pop {r3, r4, r5, r6, r7} + 800f89a: bc08 pop {r3} + 800f89c: 469e mov lr, r3 + 800f89e: 4770 bx lr -0800f878 <_fini>: - 800f878: b5f8 push {r3, r4, r5, r6, r7, lr} - 800f87a: bf00 nop - 800f87c: bcf8 pop {r3, r4, r5, r6, r7} - 800f87e: bc08 pop {r3} - 800f880: 469e mov lr, r3 - 800f882: 4770 bx lr +0800f8a0 <_fini>: + 800f8a0: b5f8 push {r3, r4, r5, r6, r7, lr} + 800f8a2: bf00 nop + 800f8a4: bcf8 pop {r3, r4, r5, r6, r7} + 800f8a6: bc08 pop {r3} + 800f8a8: 469e mov lr, r3 + 800f8aa: 4770 bx lr diff --git a/Debug/suffix.map b/Debug/suffix.map index b86243e..d332eb0 100644 --- a/Debug/suffix.map +++ b/Debug/suffix.map @@ -5843,6 +5843,7 @@ Discarded input sections .group 0x00000000 0xc ./SubGHz_Phy/App/subghz_phy_app.o .group 0x00000000 0xc ./SubGHz_Phy/App/subghz_phy_app.o .group 0x00000000 0xc ./SubGHz_Phy/App/subghz_phy_app.o + .group 0x00000000 0xc ./SubGHz_Phy/App/subghz_phy_app.o .text 0x00000000 0x0 ./SubGHz_Phy/App/subghz_phy_app.o .data 0x00000000 0x0 ./SubGHz_Phy/App/subghz_phy_app.o .bss 0x00000000 0x0 ./SubGHz_Phy/App/subghz_phy_app.o @@ -5925,6 +5926,7 @@ Discarded input sections .debug_macro 0x00000000 0x3c ./SubGHz_Phy/App/subghz_phy_app.o .debug_macro 0x00000000 0x20 ./SubGHz_Phy/App/subghz_phy_app.o .debug_macro 0x00000000 0xcc ./SubGHz_Phy/App/subghz_phy_app.o + .debug_macro 0x00000000 0x3a ./SubGHz_Phy/App/subghz_phy_app.o .debug_macro 0x00000000 0x1c ./SubGHz_Phy/App/subghz_phy_app.o .debug_macro 0x00000000 0x16 ./SubGHz_Phy/App/subghz_phy_app.o .debug_macro 0x00000000 0x146 ./SubGHz_Phy/App/subghz_phy_app.o @@ -7212,7 +7214,7 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g 0x08000000 g_pfnVectors 0x08000138 . = ALIGN (0x4) -.text 0x08000140 0xf744 +.text 0x08000140 0xf76c 0x08000140 . = ALIGN (0x4) *(.text) .text 0x08000140 0x40 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o @@ -8414,431 +8416,435 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g 0x0800c22c 0x14 ./SubGHz_Phy/App/app_subghz_phy.o 0x0800c22c MX_SubGHz_Phy_Process .text.SubghzApp_Init - 0x0800c240 0xa4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c240 0x120 ./SubGHz_Phy/App/subghz_phy_app.o 0x0800c240 SubghzApp_Init .text.SubghzApp_Process - 0x0800c2e4 0x1c ./SubGHz_Phy/App/subghz_phy_app.o - 0x0800c2e4 SubghzApp_Process + 0x0800c360 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c360 SubghzApp_Process .text.App_ProcessRadioEvents - 0x0800c300 0x130 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c378 0x130 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ProcessUartPacketizer - 0x0800c430 0x58 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c4a8 0x58 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ProcessEscape - 0x0800c488 0xa0 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c500 0xa0 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_StartNextTxIfPossible - 0x0800c528 0x78 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c5a0 0x78 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ApplyConfig - 0x0800c5a0 0x34 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c618 0x34 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_RadioApplyConfig - 0x0800c5d4 0x28 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c64c 0x28 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_RadioConfigureRx - 0x0800c5fc 0xa8 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c674 0xa8 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_RadioConfigureTx - 0x0800c6a4 0x98 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c71c 0x98 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_RadioEnterRx - 0x0800c73c 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c7b4 0x18 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_EnterConfigMode - 0x0800c754 0x60 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c7cc 0x60 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ExitConfigMode - 0x0800c7b4 0x34 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c82c 0x34 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ResetDataPath - 0x0800c7e8 0x44 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c860 0x44 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_DataModeFeedByte - 0x0800c82c 0x84 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c8a4 0x84 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_DataModeFlushBuilder - 0x0800c8b0 0x40 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c928 0x40 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_QueuePush - 0x0800c8f0 0x8c ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c968 0x8c ./SubGHz_Phy/App/subghz_phy_app.o .text.App_QueuePop - 0x0800c97c 0x3c ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800c9f4 0x3c ./SubGHz_Phy/App/subghz_phy_app.o .text.UartRxByteCallback - 0x0800c9b8 0x140 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800ca30 0x140 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ConfigFeedByte - 0x0800caf8 0xc4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800cb70 0xc4 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ConfigExecuteLine - 0x0800cbbc 0x424 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800cc34 0x424 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_PrintConfigPrompt - 0x0800cfe0 0x20 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d058 0x20 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_PrintHelp - 0x0800d000 0xa0 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d078 0xa0 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_PrintStatus - 0x0800d0a0 0x174 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d118 0x174 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_Printf - 0x0800d214 0x56 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x0800d26a 0x2 + 0x0800d28c 0x56 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x0800d2e2 0x2 .text.App_Write - 0x0800d26c 0x34 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d2e4 0x34 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ReconfigureUart - 0x0800d2a0 0x70 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d318 0x70 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_ParseHexSyncWord - 0x0800d310 0xec ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d388 0xec ./SubGHz_Phy/App/subghz_phy_app.o .text.App_SkipSpaces - 0x0800d3fc 0x44 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d474 0x44 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_LedTxPulse - 0x0800d440 0x34 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d4b8 0x30 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_LedRxPulse - 0x0800d474 0x34 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d4e8 0x30 ./SubGHz_Phy/App/subghz_phy_app.o .text.App_LedErrPulse - 0x0800d4a8 0x34 ./SubGHz_Phy/App/subghz_phy_app.o - .text.App_ProcessLeds - 0x0800d4dc 0xa4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d518 0x30 ./SubGHz_Phy/App/subghz_phy_app.o .text.OnTxDone - 0x0800d580 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d548 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + .text.App_LedTxOff + 0x0800d560 0x20 ./SubGHz_Phy/App/subghz_phy_app.o + .text.App_LedRxOff + 0x0800d580 0x20 ./SubGHz_Phy/App/subghz_phy_app.o + .text.App_LedErrOff + 0x0800d5a0 0x20 ./SubGHz_Phy/App/subghz_phy_app.o .text.OnRxDone - 0x0800d598 0x64 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d5c0 0x64 ./SubGHz_Phy/App/subghz_phy_app.o .text.OnTxTimeout - 0x0800d5fc 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d624 0x18 ./SubGHz_Phy/App/subghz_phy_app.o .text.OnRxTimeout - 0x0800d614 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d63c 0x18 ./SubGHz_Phy/App/subghz_phy_app.o .text.OnRxError - 0x0800d62c 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + 0x0800d654 0x18 ./SubGHz_Phy/App/subghz_phy_app.o .text.Config_LoadDefaults - 0x0800d644 0x68 ./SubGHz_Phy/App/config/config_defaults.o - 0x0800d644 Config_LoadDefaults + 0x0800d66c 0x68 ./SubGHz_Phy/App/config/config_defaults.o + 0x0800d66c Config_LoadDefaults .text.Config_CalcChecksum - 0x0800d6ac 0x3e ./SubGHz_Phy/App/config/config_store.o - *fill* 0x0800d6ea 0x2 + 0x0800d6d4 0x3e ./SubGHz_Phy/App/config/config_store.o + *fill* 0x0800d712 0x2 .text.Config_Load - 0x0800d6ec 0x60 ./SubGHz_Phy/App/config/config_store.o - 0x0800d6ec Config_Load + 0x0800d714 0x60 ./SubGHz_Phy/App/config/config_store.o + 0x0800d714 Config_Load .text.Config_Save - 0x0800d74c 0xe8 ./SubGHz_Phy/App/config/config_store.o - 0x0800d74c Config_Save + 0x0800d774 0xe8 ./SubGHz_Phy/App/config/config_store.o + 0x0800d774 Config_Save .text.RBI_Init - 0x0800d834 0xe ./SubGHz_Phy/Target/radio_board_if.o - 0x0800d834 RBI_Init + 0x0800d85c 0xe ./SubGHz_Phy/Target/radio_board_if.o + 0x0800d85c RBI_Init .text.RBI_ConfigRFSwitch - 0x0800d842 0x1c ./SubGHz_Phy/Target/radio_board_if.o - 0x0800d842 RBI_ConfigRFSwitch + 0x0800d86a 0x1c ./SubGHz_Phy/Target/radio_board_if.o + 0x0800d86a RBI_ConfigRFSwitch .text.RBI_GetTxConfig - 0x0800d85e 0xe ./SubGHz_Phy/Target/radio_board_if.o - 0x0800d85e RBI_GetTxConfig + 0x0800d886 0xe ./SubGHz_Phy/Target/radio_board_if.o + 0x0800d886 RBI_GetTxConfig .text.RBI_IsTCXO - 0x0800d86c 0xe ./SubGHz_Phy/Target/radio_board_if.o - 0x0800d86c RBI_IsTCXO + 0x0800d894 0xe ./SubGHz_Phy/Target/radio_board_if.o + 0x0800d894 RBI_IsTCXO .text.RBI_IsDCDC - 0x0800d87a 0xe ./SubGHz_Phy/Target/radio_board_if.o - 0x0800d87a RBI_IsDCDC + 0x0800d8a2 0xe ./SubGHz_Phy/Target/radio_board_if.o + 0x0800d8a2 RBI_IsDCDC .text.RBI_GetRFOMaxPowerConfig - 0x0800d888 0x1c ./SubGHz_Phy/Target/radio_board_if.o - 0x0800d888 RBI_GetRFOMaxPowerConfig + 0x0800d8b0 0x1c ./SubGHz_Phy/Target/radio_board_if.o + 0x0800d8b0 RBI_GetRFOMaxPowerConfig .text.UTIL_LPM_Init - 0x0800d8a4 0x20 ./Utilities/lpm/tiny_lpm/stm32_lpm.o - 0x0800d8a4 UTIL_LPM_Init + 0x0800d8cc 0x20 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x0800d8cc UTIL_LPM_Init .text.UTIL_LPM_SetStopMode - 0x0800d8c4 0x60 ./Utilities/lpm/tiny_lpm/stm32_lpm.o - 0x0800d8c4 UTIL_LPM_SetStopMode + 0x0800d8ec 0x60 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x0800d8ec UTIL_LPM_SetStopMode .text.UTIL_LPM_SetOffMode - 0x0800d924 0x60 ./Utilities/lpm/tiny_lpm/stm32_lpm.o - 0x0800d924 UTIL_LPM_SetOffMode + 0x0800d94c 0x60 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x0800d94c UTIL_LPM_SetOffMode .text.UTIL_LPM_EnterLowPower - 0x0800d984 0x6c ./Utilities/lpm/tiny_lpm/stm32_lpm.o - 0x0800d984 UTIL_LPM_EnterLowPower + 0x0800d9ac 0x6c ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x0800d9ac UTIL_LPM_EnterLowPower .text.UTIL_MEM_cpy_8 - 0x0800d9f0 0x3e ./Utilities/misc/stm32_mem.o - 0x0800d9f0 UTIL_MEM_cpy_8 + 0x0800da18 0x3e ./Utilities/misc/stm32_mem.o + 0x0800da18 UTIL_MEM_cpy_8 .text.UTIL_MEM_set_8 - 0x0800da2e 0x36 ./Utilities/misc/stm32_mem.o - 0x0800da2e UTIL_MEM_set_8 + 0x0800da56 0x36 ./Utilities/misc/stm32_mem.o + 0x0800da56 UTIL_MEM_set_8 .text.SysTimeAdd - 0x0800da64 0x72 ./Utilities/misc/stm32_systime.o - 0x0800da64 SysTimeAdd - *fill* 0x0800dad6 0x2 + 0x0800da8c 0x72 ./Utilities/misc/stm32_systime.o + 0x0800da8c SysTimeAdd + *fill* 0x0800dafe 0x2 .text.SysTimeGet - 0x0800dad8 0x70 ./Utilities/misc/stm32_systime.o - 0x0800dad8 SysTimeGet + 0x0800db00 0x70 ./Utilities/misc/stm32_systime.o + 0x0800db00 SysTimeGet .text.ee_skip_atoi - 0x0800db48 0x4c ./Utilities/misc/stm32_tiny_vsnprintf.o + 0x0800db70 0x4c ./Utilities/misc/stm32_tiny_vsnprintf.o .text.ee_number - 0x0800db94 0x1dc ./Utilities/misc/stm32_tiny_vsnprintf.o + 0x0800dbbc 0x1dc ./Utilities/misc/stm32_tiny_vsnprintf.o .text.tiny_vsnprintf_like - 0x0800dd70 0x2a4 ./Utilities/misc/stm32_tiny_vsnprintf.o - 0x0800dd70 tiny_vsnprintf_like + 0x0800dd98 0x2a4 ./Utilities/misc/stm32_tiny_vsnprintf.o + 0x0800dd98 tiny_vsnprintf_like .text.UTIL_SEQ_Run - 0x0800e014 0x1f8 ./Utilities/sequencer/stm32_seq.o - 0x0800e014 UTIL_SEQ_Run + 0x0800e03c 0x1f8 ./Utilities/sequencer/stm32_seq.o + 0x0800e03c UTIL_SEQ_Run .text.UTIL_SEQ_PreIdle - 0x0800e20c 0xc ./Utilities/sequencer/stm32_seq.o - 0x0800e20c UTIL_SEQ_PreIdle + 0x0800e234 0xc ./Utilities/sequencer/stm32_seq.o + 0x0800e234 UTIL_SEQ_PreIdle .text.UTIL_SEQ_PostIdle - 0x0800e218 0xc ./Utilities/sequencer/stm32_seq.o - 0x0800e218 UTIL_SEQ_PostIdle + 0x0800e240 0xc ./Utilities/sequencer/stm32_seq.o + 0x0800e240 UTIL_SEQ_PostIdle .text.SEQ_BitPosition - 0x0800e224 0x70 ./Utilities/sequencer/stm32_seq.o - 0x0800e224 SEQ_BitPosition + 0x0800e24c 0x70 ./Utilities/sequencer/stm32_seq.o + 0x0800e24c SEQ_BitPosition .text.UTIL_TIMER_Init - 0x0800e294 0x20 ./Utilities/timer/stm32_timer.o - 0x0800e294 UTIL_TIMER_Init + 0x0800e2bc 0x20 ./Utilities/timer/stm32_timer.o + 0x0800e2bc UTIL_TIMER_Init .text.UTIL_TIMER_Create - 0x0800e2b4 0x6c ./Utilities/timer/stm32_timer.o - 0x0800e2b4 UTIL_TIMER_Create + 0x0800e2dc 0x6c ./Utilities/timer/stm32_timer.o + 0x0800e2dc UTIL_TIMER_Create .text.UTIL_TIMER_Start - 0x0800e320 0xdc ./Utilities/timer/stm32_timer.o - 0x0800e320 UTIL_TIMER_Start + 0x0800e348 0xdc ./Utilities/timer/stm32_timer.o + 0x0800e348 UTIL_TIMER_Start .text.UTIL_TIMER_Stop - 0x0800e3fc 0xe0 ./Utilities/timer/stm32_timer.o - 0x0800e3fc UTIL_TIMER_Stop + 0x0800e424 0xe0 ./Utilities/timer/stm32_timer.o + 0x0800e424 UTIL_TIMER_Stop .text.UTIL_TIMER_SetPeriod - 0x0800e4dc 0x54 ./Utilities/timer/stm32_timer.o - 0x0800e4dc UTIL_TIMER_SetPeriod + 0x0800e504 0x54 ./Utilities/timer/stm32_timer.o + 0x0800e504 UTIL_TIMER_SetPeriod .text.UTIL_TIMER_IRQ_Handler - 0x0800e530 0x100 ./Utilities/timer/stm32_timer.o - 0x0800e530 UTIL_TIMER_IRQ_Handler + 0x0800e558 0x100 ./Utilities/timer/stm32_timer.o + 0x0800e558 UTIL_TIMER_IRQ_Handler .text.UTIL_TIMER_GetCurrentTime - 0x0800e630 0x24 ./Utilities/timer/stm32_timer.o - 0x0800e630 UTIL_TIMER_GetCurrentTime + 0x0800e658 0x24 ./Utilities/timer/stm32_timer.o + 0x0800e658 UTIL_TIMER_GetCurrentTime .text.UTIL_TIMER_GetElapsedTime - 0x0800e654 0x38 ./Utilities/timer/stm32_timer.o - 0x0800e654 UTIL_TIMER_GetElapsedTime + 0x0800e67c 0x38 ./Utilities/timer/stm32_timer.o + 0x0800e67c UTIL_TIMER_GetElapsedTime .text.TimerExists - 0x0800e68c 0x38 ./Utilities/timer/stm32_timer.o - 0x0800e68c TimerExists + 0x0800e6b4 0x38 ./Utilities/timer/stm32_timer.o + 0x0800e6b4 TimerExists .text.TimerSetTimeout - 0x0800e6c4 0x54 ./Utilities/timer/stm32_timer.o - 0x0800e6c4 TimerSetTimeout + 0x0800e6ec 0x54 ./Utilities/timer/stm32_timer.o + 0x0800e6ec TimerSetTimeout .text.TimerInsertTimer - 0x0800e718 0x60 ./Utilities/timer/stm32_timer.o - 0x0800e718 TimerInsertTimer + 0x0800e740 0x60 ./Utilities/timer/stm32_timer.o + 0x0800e740 TimerInsertTimer .text.TimerInsertNewHeadTimer - 0x0800e778 0x3c ./Utilities/timer/stm32_timer.o - 0x0800e778 TimerInsertNewHeadTimer + 0x0800e7a0 0x3c ./Utilities/timer/stm32_timer.o + 0x0800e7a0 TimerInsertNewHeadTimer .text.UTIL_ADV_TRACE_Init - 0x0800e7b4 0x38 ./Utilities/trace/adv_trace/stm32_adv_trace.o - 0x0800e7b4 UTIL_ADV_TRACE_Init + 0x0800e7dc 0x38 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800e7dc UTIL_ADV_TRACE_Init .text.UTIL_ADV_TRACE_COND_FSend - 0x0800e7ec 0x100 ./Utilities/trace/adv_trace/stm32_adv_trace.o - 0x0800e7ec UTIL_ADV_TRACE_COND_FSend + 0x0800e814 0x100 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800e814 UTIL_ADV_TRACE_COND_FSend .text.UTIL_ADV_TRACE_RegisterTimeStampFunction - 0x0800e8ec 0x1c ./Utilities/trace/adv_trace/stm32_adv_trace.o - 0x0800e8ec UTIL_ADV_TRACE_RegisterTimeStampFunction + 0x0800e914 0x1c ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800e914 UTIL_ADV_TRACE_RegisterTimeStampFunction .text.UTIL_ADV_TRACE_SetVerboseLevel - 0x0800e908 0x20 ./Utilities/trace/adv_trace/stm32_adv_trace.o - 0x0800e908 UTIL_ADV_TRACE_SetVerboseLevel + 0x0800e930 0x20 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800e930 UTIL_ADV_TRACE_SetVerboseLevel .text.TRACE_Send - 0x0800e928 0x108 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800e950 0x108 ./Utilities/trace/adv_trace/stm32_adv_trace.o .text.TRACE_TxCpltCallback - 0x0800ea30 0x118 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800ea58 0x118 ./Utilities/trace/adv_trace/stm32_adv_trace.o .text.TRACE_AllocateBufer - 0x0800eb48 0xfc ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800eb70 0xfc ./Utilities/trace/adv_trace/stm32_adv_trace.o .text.TRACE_Lock - 0x0800ec44 0x3c ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800ec6c 0x3c ./Utilities/trace/adv_trace/stm32_adv_trace.o .text.TRACE_UnLock - 0x0800ec80 0x3c ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800eca8 0x3c ./Utilities/trace/adv_trace/stm32_adv_trace.o .text.TRACE_IsLocked - 0x0800ecbc 0x20 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x0800ece4 0x20 ./Utilities/trace/adv_trace/stm32_adv_trace.o .text._strtol_l.isra.0 - 0x0800ecdc 0xf4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtol.o) - .text.strtol 0x0800edd0 0x14 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtol.o) - 0x0800edd0 strtol + 0x0800ed04 0xf4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtol.o) + .text.strtol 0x0800edf8 0x14 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtol.o) + 0x0800edf8 strtol .text._strtoul_l.isra.0 - 0x0800ede4 0xdc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtoul.o) - .text.strtoul 0x0800eec0 0x14 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtoul.o) - 0x0800eec0 strtoul + 0x0800ee0c 0xdc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtoul.o) + .text.strtoul 0x0800eee8 0x14 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtoul.o) + 0x0800eee8 strtoul .text._vsnprintf_r - 0x0800eed4 0x5c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-vsnprintf.o) - 0x0800eed4 _vsnprintf_r - 0x0800eed4 _vsniprintf_r + 0x0800eefc 0x5c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-vsnprintf.o) + 0x0800eefc _vsnprintf_r + 0x0800eefc _vsniprintf_r .text.vsnprintf - 0x0800ef30 0x1c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-vsnprintf.o) - 0x0800ef30 vsnprintf - 0x0800ef30 vsniprintf - .text.memset 0x0800ef4c 0x10 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memset.o) - 0x0800ef4c memset - .text.strncmp 0x0800ef5c 0x24 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strncmp.o) - 0x0800ef5c strncmp - .text.__errno 0x0800ef80 0xc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-errno.o) - 0x0800ef80 __errno + 0x0800ef58 0x1c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-vsnprintf.o) + 0x0800ef58 vsnprintf + 0x0800ef58 vsniprintf + .text.memset 0x0800ef74 0x10 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memset.o) + 0x0800ef74 memset + .text.strncmp 0x0800ef84 0x24 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strncmp.o) + 0x0800ef84 strncmp + .text.__errno 0x0800efa8 0xc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-errno.o) + 0x0800efa8 __errno .text.__libc_init_array - 0x0800ef8c 0x48 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-init.o) - 0x0800ef8c __libc_init_array + 0x0800efb4 0x48 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-init.o) + 0x0800efb4 __libc_init_array .text.__retarget_lock_acquire_recursive - 0x0800efd4 0x2 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) - 0x0800efd4 __retarget_lock_acquire_recursive + 0x0800effc 0x2 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) + 0x0800effc __retarget_lock_acquire_recursive .text.__retarget_lock_release_recursive - 0x0800efd6 0x2 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) - 0x0800efd6 __retarget_lock_release_recursive - .text.memcpy 0x0800efd8 0x1c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) - 0x0800efd8 memcpy - .text._free_r 0x0800eff4 0x94 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-freer.o) - 0x0800eff4 _free_r + 0x0800effe 0x2 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) + 0x0800effe __retarget_lock_release_recursive + .text.memcpy 0x0800f000 0x1c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + 0x0800f000 memcpy + .text._free_r 0x0800f01c 0x94 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-freer.o) + 0x0800f01c _free_r .text.sbrk_aligned - 0x0800f088 0x44 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) + 0x0800f0b0 0x44 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) .text._malloc_r - 0x0800f0cc 0x100 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) - 0x0800f0cc _malloc_r + 0x0800f0f4 0x100 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) + 0x0800f0f4 _malloc_r .text.__malloc_lock - 0x0800f1cc 0xc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mlock.o) - 0x0800f1cc __malloc_lock + 0x0800f1f4 0xc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mlock.o) + 0x0800f1f4 __malloc_lock .text.__malloc_unlock - 0x0800f1d8 0xc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mlock.o) - 0x0800f1d8 __malloc_unlock + 0x0800f200 0xc /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mlock.o) + 0x0800f200 __malloc_unlock .text.__ssputs_r - 0x0800f1e4 0xb6 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) - 0x0800f1e4 __ssputs_r - *fill* 0x0800f29a 0x2 + 0x0800f20c 0xb6 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) + 0x0800f20c __ssputs_r + *fill* 0x0800f2c2 0x2 .text._svfprintf_r - 0x0800f29c 0x1f8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) - 0x0800f29c _svfprintf_r - 0x0800f29c _svfiprintf_r + 0x0800f2c4 0x1f8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) + 0x0800f2c4 _svfprintf_r + 0x0800f2c4 _svfiprintf_r .text._printf_common - 0x0800f494 0xda /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) - 0x0800f494 _printf_common - *fill* 0x0800f56e 0x2 + 0x0800f4bc 0xda /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) + 0x0800f4bc _printf_common + *fill* 0x0800f596 0x2 .text._printf_i - 0x0800f570 0x23c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) - 0x0800f570 _printf_i - .text.memmove 0x0800f7ac 0x34 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memmove.o) - 0x0800f7ac memmove - .text._sbrk_r 0x0800f7e0 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-sbrkr.o) - 0x0800f7e0 _sbrk_r + 0x0800f598 0x23c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) + 0x0800f598 _printf_i + .text.memmove 0x0800f7d4 0x34 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memmove.o) + 0x0800f7d4 memmove + .text._sbrk_r 0x0800f808 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-sbrkr.o) + 0x0800f808 _sbrk_r .text._realloc_r - 0x0800f800 0x5c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reallocr.o) - 0x0800f800 _realloc_r + 0x0800f828 0x5c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reallocr.o) + 0x0800f828 _realloc_r .text._malloc_usable_size_r - 0x0800f85c 0x10 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-msizer.o) - 0x0800f85c _malloc_usable_size_r + 0x0800f884 0x10 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-msizer.o) + 0x0800f884 _malloc_usable_size_r *(.glue_7) - .glue_7 0x0800f86c 0x0 linker stubs + .glue_7 0x0800f894 0x0 linker stubs *(.glue_7t) - .glue_7t 0x0800f86c 0x0 linker stubs + .glue_7t 0x0800f894 0x0 linker stubs *(.eh_frame) - .eh_frame 0x0800f86c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o + .eh_frame 0x0800f894 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o *(.init) - .init 0x0800f86c 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crti.o - 0x0800f86c _init - .init 0x0800f870 0x8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtn.o + .init 0x0800f894 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crti.o + 0x0800f894 _init + .init 0x0800f898 0x8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtn.o *(.fini) - .fini 0x0800f878 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crti.o - 0x0800f878 _fini - .fini 0x0800f87c 0x8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtn.o - 0x0800f884 . = ALIGN (0x4) - 0x0800f884 _etext = . + .fini 0x0800f8a0 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crti.o + 0x0800f8a0 _fini + .fini 0x0800f8a4 0x8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtn.o + 0x0800f8ac . = ALIGN (0x4) + 0x0800f8ac _etext = . -.vfp11_veneer 0x0800f884 0x0 - .vfp11_veneer 0x0800f884 0x0 linker stubs +.vfp11_veneer 0x0800f8ac 0x0 + .vfp11_veneer 0x0800f8ac 0x0 linker stubs -.v4_bx 0x0800f884 0x0 - .v4_bx 0x0800f884 0x0 linker stubs +.v4_bx 0x0800f8ac 0x0 + .v4_bx 0x0800f8ac 0x0 linker stubs -.iplt 0x0800f884 0x0 - .iplt 0x0800f884 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o +.iplt 0x0800f8ac 0x0 + .iplt 0x0800f8ac 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o -.rodata 0x0800f884 0xdc8 - 0x0800f884 . = ALIGN (0x4) +.rodata 0x0800f8ac 0xdc8 + 0x0800f8ac . = ALIGN (0x4) *(.rodata) - .rodata 0x0800f884 0x9 ./Core/Src/sys_app.o - *fill* 0x0800f88d 0x3 - .rodata 0x0800f890 0x1c ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.o - .rodata 0x0800f8ac 0x7c ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o - .rodata 0x0800f928 0x195 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o - *fill* 0x0800fabd 0x3 - .rodata 0x0800fac0 0x77a ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x0801023a 0x2 - .rodata 0x0801023c 0x57 ./Utilities/misc/stm32_tiny_vsnprintf.o + .rodata 0x0800f8ac 0x9 ./Core/Src/sys_app.o + *fill* 0x0800f8b5 0x3 + .rodata 0x0800f8b8 0x1c ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.o + .rodata 0x0800f8d4 0x7c ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o + .rodata 0x0800f950 0x195 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o + *fill* 0x0800fae5 0x3 + .rodata 0x0800fae8 0x77a ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x08010262 0x2 + .rodata 0x08010264 0x57 ./Utilities/misc/stm32_tiny_vsnprintf.o *(.rodata*) - *fill* 0x08010293 0x1 + *fill* 0x080102bb 0x1 .rodata.UTIL_PowerDriver - 0x08010294 0x18 ./Core/Src/stm32_lpm_if.o - 0x08010294 UTIL_PowerDriver + 0x080102bc 0x18 ./Core/Src/stm32_lpm_if.o + 0x080102bc UTIL_PowerDriver .rodata.AHBPrescTable - 0x080102ac 0x40 ./Core/Src/system_stm32wlxx.o - 0x080102ac AHBPrescTable + 0x080102d4 0x40 ./Core/Src/system_stm32wlxx.o + 0x080102d4 AHBPrescTable .rodata.APBPrescTable - 0x080102ec 0x20 ./Core/Src/system_stm32wlxx.o - 0x080102ec APBPrescTable + 0x08010314 0x20 ./Core/Src/system_stm32wlxx.o + 0x08010314 APBPrescTable .rodata.MSIRangeTable - 0x0801030c 0x40 ./Core/Src/system_stm32wlxx.o - 0x0801030c MSIRangeTable + 0x08010334 0x40 ./Core/Src/system_stm32wlxx.o + 0x08010334 MSIRangeTable .rodata.UTIL_TimerDriver - 0x0801034c 0x2c ./Core/Src/timer_if.o - 0x0801034c UTIL_TimerDriver + 0x08010374 0x2c ./Core/Src/timer_if.o + 0x08010374 UTIL_TimerDriver .rodata.UTIL_SYSTIMDriver - 0x08010378 0x14 ./Core/Src/timer_if.o - 0x08010378 UTIL_SYSTIMDriver + 0x080103a0 0x14 ./Core/Src/timer_if.o + 0x080103a0 UTIL_SYSTIMDriver .rodata.UTIL_TraceDriver - 0x0801038c 0x10 ./Core/Src/usart_if.o - 0x0801038c UTIL_TraceDriver + 0x080103b4 0x10 ./Core/Src/usart_if.o + 0x080103b4 UTIL_TraceDriver .rodata.UARTPrescTable - 0x0801039c 0x18 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.o - 0x0801039c UARTPrescTable + 0x080103c4 0x18 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.o + 0x080103c4 UARTPrescTable .rodata.numerator.1 - 0x080103b4 0x8 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.o + 0x080103dc 0x8 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.o .rodata.denominator.0 - 0x080103bc 0x8 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.o - .rodata.Radio 0x080103c4 0x8c ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o - 0x080103c4 Radio + 0x080103e4 0x8 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.o + .rodata.Radio 0x080103ec 0x8c ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o + 0x080103ec Radio .rodata.Bandwidths - 0x08010450 0x3 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o - 0x08010450 Bandwidths - *fill* 0x08010453 0x1 + 0x08010478 0x3 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o + 0x08010478 Bandwidths + *fill* 0x0801047b 0x1 .rodata.FskBandwidths - 0x08010454 0xb0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o + 0x0801047c 0xb0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o .rodata.default_syncword.0 - 0x08010504 0x3 ./SubGHz_Phy/App/config/config_defaults.o - *fill* 0x08010507 0x1 + 0x0801052c 0x3 ./SubGHz_Phy/App/config/config_defaults.o + *fill* 0x0801052f 0x1 .rodata.SEQ_clz_table_4bit - 0x08010508 0x10 ./Utilities/sequencer/stm32_seq.o - 0x08010508 SEQ_clz_table_4bit + 0x08010530 0x10 ./Utilities/sequencer/stm32_seq.o + 0x08010530 SEQ_clz_table_4bit .rodata._ctype_ - 0x08010518 0x101 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-ctype_.o) - 0x08010518 _ctype_ + 0x08010540 0x101 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-ctype_.o) + 0x08010540 _ctype_ .rodata._svfprintf_r.str1.1 - 0x08010619 0x33 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) + 0x08010641 0x33 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) 0x11 (size before relaxing) .rodata._printf_i.str1.1 - 0x0801064c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) + 0x08010674 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) 0x22 (size before relaxing) - 0x0801064c . = ALIGN (0x4) + 0x08010674 . = ALIGN (0x4) -.ARM.extab 0x0801064c 0x0 - 0x0801064c . = ALIGN (0x4) +.ARM.extab 0x08010674 0x0 + 0x08010674 . = ALIGN (0x4) *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x0801064c . = ALIGN (0x4) + 0x08010674 . = ALIGN (0x4) -.ARM 0x0801064c 0x8 - 0x0801064c . = ALIGN (0x4) - 0x0801064c __exidx_start = . +.ARM 0x08010674 0x8 + 0x08010674 . = ALIGN (0x4) + 0x08010674 __exidx_start = . *(.ARM.exidx*) - .ARM.exidx 0x0801064c 0x8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strcmp.o) - .ARM.exidx 0x08010654 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strlen.o) + .ARM.exidx 0x08010674 0x8 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strcmp.o) + .ARM.exidx 0x0801067c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strlen.o) 0x8 (size before relaxing) - .ARM.exidx 0x08010654 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memchr.o) + .ARM.exidx 0x0801067c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memchr.o) 0x8 (size before relaxing) - .ARM.exidx 0x08010654 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a(_udivmoddi4.o) + .ARM.exidx 0x0801067c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a(_udivmoddi4.o) 0x8 (size before relaxing) - 0x08010654 __exidx_end = . - 0x08010654 . = ALIGN (0x4) + 0x0801067c __exidx_end = . + 0x0801067c . = ALIGN (0x4) -.preinit_array 0x08010654 0x0 - 0x08010654 . = ALIGN (0x4) - 0x08010654 PROVIDE (__preinit_array_start = .) +.preinit_array 0x0801067c 0x0 + 0x0801067c . = ALIGN (0x4) + 0x0801067c PROVIDE (__preinit_array_start = .) *(.preinit_array*) - 0x08010654 PROVIDE (__preinit_array_end = .) - 0x08010654 . = ALIGN (0x4) + 0x0801067c PROVIDE (__preinit_array_end = .) + 0x0801067c . = ALIGN (0x4) -.init_array 0x08010654 0x4 - 0x08010654 . = ALIGN (0x4) - 0x08010654 PROVIDE (__init_array_start = .) +.init_array 0x0801067c 0x4 + 0x0801067c . = ALIGN (0x4) + 0x0801067c PROVIDE (__init_array_start = .) *(SORT_BY_NAME(.init_array.*)) *(.init_array*) - .init_array 0x08010654 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o - 0x08010658 PROVIDE (__init_array_end = .) - 0x08010658 . = ALIGN (0x4) + .init_array 0x0801067c 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o + 0x08010680 PROVIDE (__init_array_end = .) + 0x08010680 . = ALIGN (0x4) -.fini_array 0x08010658 0x4 - 0x08010658 . = ALIGN (0x4) +.fini_array 0x08010680 0x4 + 0x08010680 . = ALIGN (0x4) [!provide] PROVIDE (__fini_array_start = .) *(SORT_BY_NAME(.fini_array.*)) *(.fini_array*) - .fini_array 0x08010658 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o + .fini_array 0x08010680 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o [!provide] PROVIDE (__fini_array_end = .) - 0x0801065c . = ALIGN (0x4) - 0x0801065c _sidata = LOADADDR (.data) + 0x08010684 . = ALIGN (0x4) + 0x08010684 _sidata = LOADADDR (.data) -.rel.dyn 0x0801065c 0x0 - .rel.iplt 0x0801065c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o +.rel.dyn 0x08010684 0x0 + .rel.iplt 0x08010684 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o -.data 0x20000000 0x6c load address 0x0801065c +.data 0x20000000 0x6c load address 0x08010684 0x20000000 . = ALIGN (0x4) 0x20000000 _sdata = . *(.data) @@ -8871,11 +8877,11 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g 0x2000006c . = ALIGN (0x4) 0x2000006c _edata = . -.igot.plt 0x2000006c 0x0 load address 0x080106c8 +.igot.plt 0x2000006c 0x0 load address 0x080106f0 .igot.plt 0x2000006c 0x0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/crtbegin.o 0x2000006c . = ALIGN (0x4) -.bss 0x2000006c 0x1028 load address 0x080106c8 +.bss 0x2000006c 0x1060 load address 0x080106f0 0x2000006c _sbss = . 0x2000006c __bss_start__ = _sbss *(.bss) @@ -8963,111 +8969,105 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .bss.g_last_rx_cfo 0x2000062c 0x1 ./SubGHz_Phy/App/subghz_phy_app.o *fill* 0x2000062d 0x3 - .bss.g_led_tx_until - 0x20000630 0x4 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_led_rx_until - 0x20000634 0x4 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_led_err_until - 0x20000638 0x4 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_led_tx_active - 0x2000063c 0x1 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_led_rx_active - 0x2000063d 0x1 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_led_err_active - 0x2000063e 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + .bss.g_led_tx_timer + 0x20000630 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + .bss.g_led_rx_timer + 0x20000648 0x18 ./SubGHz_Phy/App/subghz_phy_app.o + .bss.g_led_err_timer + 0x20000660 0x18 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_radio_busy - 0x2000063f 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000678 0x1 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_radio_needs_rx_restart - 0x20000640 0x1 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x20000641 0x3 + 0x20000679 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x2000067a 0x2 .bss.g_rx_payload - 0x20000644 0xdc ./SubGHz_Phy/App/subghz_phy_app.o + 0x2000067c 0xdc ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_rx_payload_len - 0x20000720 0x2 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x20000722 0x2 + 0x20000758 0x2 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x2000075a 0x2 .bss.g_tx_queue - 0x20000724 0x374 ./SubGHz_Phy/App/subghz_phy_app.o + 0x2000075c 0x374 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_tx_q_head - 0x20000a98 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000ad0 0x1 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_tx_q_tail - 0x20000a99 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000ad1 0x1 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_tx_q_count - 0x20000a9a 0x1 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x20000a9b 0x1 + 0x20000ad2 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x20000ad3 0x1 .bss.g_uart_build_buf - 0x20000a9c 0xdc ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000ad4 0xdc ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_uart_build_len - 0x20000b78 0x2 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x20000b7a 0x2 + 0x20000bb0 0x2 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x20000bb2 0x2 .bss.g_uart_last_data_tick - 0x20000b7c 0x4 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_escape 0x20000b80 0x10 ./SubGHz_Phy/App/subghz_phy_app.o - .bss.g_mode 0x20000b90 0x1 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x20000b91 0x3 + 0x20000bb4 0x4 ./SubGHz_Phy/App/subghz_phy_app.o + .bss.g_escape 0x20000bb8 0x10 ./SubGHz_Phy/App/subghz_phy_app.o + .bss.g_mode 0x20000bc8 0x1 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x20000bc9 0x3 .bss.g_cfg_line - 0x20000b94 0x60 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000bcc 0x60 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_cfg_line_len - 0x20000bf4 0x2 ./SubGHz_Phy/App/subghz_phy_app.o - *fill* 0x20000bf6 0x2 + 0x20000c2c 0x2 ./SubGHz_Phy/App/subghz_phy_app.o + *fill* 0x20000c2e 0x2 .bss.g_stat_uart_packets_tx - 0x20000bf8 0x4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000c30 0x4 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_stat_uart_bytes_tx - 0x20000bfc 0x4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000c34 0x4 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_stat_radio_packets_rx - 0x20000c00 0x4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000c38 0x4 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_stat_radio_bytes_rx - 0x20000c04 0x4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000c3c 0x4 ./SubGHz_Phy/App/subghz_phy_app.o .bss.g_stat_queue_overflow - 0x20000c08 0x4 ./SubGHz_Phy/App/subghz_phy_app.o + 0x20000c40 0x4 ./SubGHz_Phy/App/subghz_phy_app.o .bss.StopModeDisable - 0x20000c0c 0x4 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x20000c44 0x4 ./Utilities/lpm/tiny_lpm/stm32_lpm.o .bss.OffModeDisable - 0x20000c10 0x4 ./Utilities/lpm/tiny_lpm/stm32_lpm.o - .bss.TaskSet 0x20000c14 0x4 ./Utilities/sequencer/stm32_seq.o - .bss.EvtSet 0x20000c18 0x4 ./Utilities/sequencer/stm32_seq.o + 0x20000c48 0x4 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + .bss.TaskSet 0x20000c4c 0x4 ./Utilities/sequencer/stm32_seq.o + .bss.EvtSet 0x20000c50 0x4 ./Utilities/sequencer/stm32_seq.o .bss.EvtWaited - 0x20000c1c 0x4 ./Utilities/sequencer/stm32_seq.o + 0x20000c54 0x4 ./Utilities/sequencer/stm32_seq.o .bss.CurrentTaskIdx - 0x20000c20 0x4 ./Utilities/sequencer/stm32_seq.o - .bss.TaskCb 0x20000c24 0x4 ./Utilities/sequencer/stm32_seq.o - .bss.TaskPrio 0x20000c28 0x8 ./Utilities/sequencer/stm32_seq.o + 0x20000c58 0x4 ./Utilities/sequencer/stm32_seq.o + .bss.TaskCb 0x20000c5c 0x4 ./Utilities/sequencer/stm32_seq.o + .bss.TaskPrio 0x20000c60 0x8 ./Utilities/sequencer/stm32_seq.o .bss.TimerListHead - 0x20000c30 0x4 ./Utilities/timer/stm32_timer.o + 0x20000c68 0x4 ./Utilities/timer/stm32_timer.o .bss.ADV_TRACE_Ctx - 0x20000c34 0x18 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x20000c6c 0x18 ./Utilities/trace/adv_trace/stm32_adv_trace.o .bss.ADV_TRACE_Buffer - 0x20000c4c 0x200 ./Utilities/trace/adv_trace/stm32_adv_trace.o - .bss.sztmp 0x20000e4c 0x100 ./Utilities/trace/adv_trace/stm32_adv_trace.o - .bss.__sf 0x20000f4c 0x138 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-findfp.o) - 0x20000f4c __sf - .bss.errno 0x20001084 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reent.o) - 0x20001084 errno + 0x20000c84 0x200 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .bss.sztmp 0x20000e84 0x100 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .bss.__sf 0x20000f84 0x138 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-findfp.o) + 0x20000f84 __sf + .bss.errno 0x200010bc 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reent.o) + 0x200010bc errno .bss.__lock___malloc_recursive_mutex - 0x20001088 0x1 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) - 0x20001088 __lock___malloc_recursive_mutex - *fill* 0x20001089 0x3 + 0x200010c0 0x1 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) + 0x200010c0 __lock___malloc_recursive_mutex + *fill* 0x200010c1 0x3 .bss.__malloc_sbrk_start - 0x2000108c 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) - 0x2000108c __malloc_sbrk_start + 0x200010c4 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) + 0x200010c4 __malloc_sbrk_start .bss.__malloc_free_list - 0x20001090 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) - 0x20001090 __malloc_free_list + 0x200010c8 0x4 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) + 0x200010c8 __malloc_free_list *(COMMON) - 0x20001094 . = ALIGN (0x4) - 0x20001094 _ebss = . - 0x20001094 __bss_end__ = _ebss + 0x200010cc . = ALIGN (0x4) + 0x200010cc _ebss = . + 0x200010cc __bss_end__ = _ebss ._user_heap_stack - 0x20001094 0xa04 load address 0x080106c8 - 0x20001098 . = ALIGN (0x8) - *fill* 0x20001094 0x4 + 0x200010cc 0xa04 load address 0x080106f0 + 0x200010d0 . = ALIGN (0x8) + *fill* 0x200010cc 0x4 [!provide] PROVIDE (end = .) - 0x20001098 PROVIDE (_end = .) - 0x20001298 . = (. + _Min_Heap_Size) - *fill* 0x20001098 0x200 - 0x20001a98 . = (. + _Min_Stack_Size) - *fill* 0x20001298 0x800 - 0x20001a98 . = ALIGN (0x8) + 0x200010d0 PROVIDE (_end = .) + 0x200012d0 . = (. + _Min_Heap_Size) + *fill* 0x200010d0 0x200 + 0x20001ad0 . = (. + _Min_Stack_Size) + *fill* 0x200012d0 0x800 + 0x20001ad0 . = ALIGN (0x8) /DISCARD/ libc.a(*) @@ -9239,7 +9239,7 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libm.a LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a -.debug_info 0x00000000 0x25c8e +.debug_info 0x00000000 0x25e14 .debug_info 0x00000000 0x642 ./Core/Src/dma.o .debug_info 0x00000642 0x7cf ./Core/Src/gpio.o .debug_info 0x00000e11 0x8a2 ./Core/Src/main.o @@ -9276,17 +9276,17 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_info 0x0001c49b 0x22ae ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o .debug_info 0x0001e749 0x19c5 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o .debug_info 0x0002010e 0xea ./SubGHz_Phy/App/app_subghz_phy.o - .debug_info 0x000201f8 0x24c4 ./SubGHz_Phy/App/subghz_phy_app.o - .debug_info 0x000226bc 0x1c7 ./SubGHz_Phy/App/config/config_defaults.o - .debug_info 0x00022883 0x46c ./SubGHz_Phy/App/config/config_store.o - .debug_info 0x00022cef 0x288 ./SubGHz_Phy/Target/radio_board_if.o - .debug_info 0x00022f77 0x3b8 ./Utilities/lpm/tiny_lpm/stm32_lpm.o - .debug_info 0x0002332f 0x1bd ./Utilities/misc/stm32_mem.o - .debug_info 0x000234ec 0x69f ./Utilities/misc/stm32_systime.o - .debug_info 0x00023b8b 0x2ea ./Utilities/misc/stm32_tiny_vsnprintf.o - .debug_info 0x00023e75 0x9af ./Utilities/sequencer/stm32_seq.o - .debug_info 0x00024824 0x883 ./Utilities/timer/stm32_timer.o - .debug_info 0x000250a7 0xbe7 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .debug_info 0x000201f8 0x264a ./SubGHz_Phy/App/subghz_phy_app.o + .debug_info 0x00022842 0x1c7 ./SubGHz_Phy/App/config/config_defaults.o + .debug_info 0x00022a09 0x46c ./SubGHz_Phy/App/config/config_store.o + .debug_info 0x00022e75 0x288 ./SubGHz_Phy/Target/radio_board_if.o + .debug_info 0x000230fd 0x3b8 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + .debug_info 0x000234b5 0x1bd ./Utilities/misc/stm32_mem.o + .debug_info 0x00023672 0x69f ./Utilities/misc/stm32_systime.o + .debug_info 0x00023d11 0x2ea ./Utilities/misc/stm32_tiny_vsnprintf.o + .debug_info 0x00023ffb 0x9af ./Utilities/sequencer/stm32_seq.o + .debug_info 0x000249aa 0x883 ./Utilities/timer/stm32_timer.o + .debug_info 0x0002522d 0xbe7 ./Utilities/trace/adv_trace/stm32_adv_trace.o .debug_abbrev 0x00000000 0x68c7 .debug_abbrev 0x00000000 0x156 ./Core/Src/dma.o @@ -9337,7 +9337,7 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_abbrev 0x00006207 0x2f4 ./Utilities/timer/stm32_timer.o .debug_abbrev 0x000064fb 0x3cc ./Utilities/trace/adv_trace/stm32_adv_trace.o -.debug_aranges 0x00000000 0x2340 +.debug_aranges 0x00000000 0x2350 .debug_aranges 0x00000000 0x28 ./Core/Src/dma.o .debug_aranges @@ -9411,30 +9411,30 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_aranges 0x00001dc8 0x28 ./SubGHz_Phy/App/app_subghz_phy.o .debug_aranges - 0x00001df0 0x148 ./SubGHz_Phy/App/subghz_phy_app.o + 0x00001df0 0x158 ./SubGHz_Phy/App/subghz_phy_app.o .debug_aranges - 0x00001f38 0x20 ./SubGHz_Phy/App/config/config_defaults.o + 0x00001f48 0x20 ./SubGHz_Phy/App/config/config_defaults.o .debug_aranges - 0x00001f58 0x30 ./SubGHz_Phy/App/config/config_store.o + 0x00001f68 0x30 ./SubGHz_Phy/App/config/config_store.o .debug_aranges - 0x00001f88 0x50 ./SubGHz_Phy/Target/radio_board_if.o + 0x00001f98 0x50 ./SubGHz_Phy/Target/radio_board_if.o .debug_aranges - 0x00001fd8 0x48 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x00001fe8 0x48 ./Utilities/lpm/tiny_lpm/stm32_lpm.o .debug_aranges - 0x00002020 0x30 ./Utilities/misc/stm32_mem.o + 0x00002030 0x30 ./Utilities/misc/stm32_mem.o .debug_aranges - 0x00002050 0x80 ./Utilities/misc/stm32_systime.o + 0x00002060 0x80 ./Utilities/misc/stm32_systime.o .debug_aranges - 0x000020d0 0x30 ./Utilities/misc/stm32_tiny_vsnprintf.o + 0x000020e0 0x30 ./Utilities/misc/stm32_tiny_vsnprintf.o .debug_aranges - 0x00002100 0xa8 ./Utilities/sequencer/stm32_seq.o + 0x00002110 0xa8 ./Utilities/sequencer/stm32_seq.o .debug_aranges - 0x000021a8 0xb0 ./Utilities/timer/stm32_timer.o + 0x000021b8 0xb0 ./Utilities/timer/stm32_timer.o .debug_aranges - 0x00002258 0xe8 ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x00002268 0xe8 ./Utilities/trace/adv_trace/stm32_adv_trace.o .debug_rnglists - 0x00000000 0x1a7a + 0x00000000 0x1a85 .debug_rnglists 0x00000000 0x19 ./Core/Src/dma.o .debug_rnglists @@ -9508,29 +9508,29 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_rnglists 0x0000167b 0x19 ./SubGHz_Phy/App/app_subghz_phy.o .debug_rnglists - 0x00001694 0xff ./SubGHz_Phy/App/subghz_phy_app.o + 0x00001694 0x10a ./SubGHz_Phy/App/subghz_phy_app.o .debug_rnglists - 0x00001793 0x13 ./SubGHz_Phy/App/config/config_defaults.o + 0x0000179e 0x13 ./SubGHz_Phy/App/config/config_defaults.o .debug_rnglists - 0x000017a6 0x20 ./SubGHz_Phy/App/config/config_store.o + 0x000017b1 0x20 ./SubGHz_Phy/App/config/config_store.o .debug_rnglists - 0x000017c6 0x37 ./SubGHz_Phy/Target/radio_board_if.o + 0x000017d1 0x37 ./SubGHz_Phy/Target/radio_board_if.o .debug_rnglists - 0x000017fd 0x31 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + 0x00001808 0x31 ./Utilities/lpm/tiny_lpm/stm32_lpm.o .debug_rnglists - 0x0000182e 0x1f ./Utilities/misc/stm32_mem.o + 0x00001839 0x1f ./Utilities/misc/stm32_mem.o .debug_rnglists - 0x0000184d 0x5f ./Utilities/misc/stm32_systime.o + 0x00001858 0x5f ./Utilities/misc/stm32_systime.o .debug_rnglists - 0x000018ac 0x21 ./Utilities/misc/stm32_tiny_vsnprintf.o + 0x000018b7 0x21 ./Utilities/misc/stm32_tiny_vsnprintf.o .debug_rnglists - 0x000018cd 0x7c ./Utilities/sequencer/stm32_seq.o + 0x000018d8 0x7c ./Utilities/sequencer/stm32_seq.o .debug_rnglists - 0x00001949 0x82 ./Utilities/timer/stm32_timer.o + 0x00001954 0x82 ./Utilities/timer/stm32_timer.o .debug_rnglists - 0x000019cb 0xaf ./Utilities/trace/adv_trace/stm32_adv_trace.o + 0x000019d6 0xaf ./Utilities/trace/adv_trace/stm32_adv_trace.o -.debug_macro 0x00000000 0x2436a +.debug_macro 0x00000000 0x24387 .debug_macro 0x00000000 0x250 ./Core/Src/dma.o .debug_macro 0x00000250 0xad2 ./Core/Src/dma.o .debug_macro 0x00000d22 0x12a ./Core/Src/dma.o @@ -9684,24 +9684,24 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_macro 0x000220b5 0x474 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o .debug_macro 0x00022529 0x292 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o .debug_macro 0x000227bb 0x1cb ./SubGHz_Phy/App/app_subghz_phy.o - .debug_macro 0x00022986 0x48c ./SubGHz_Phy/App/subghz_phy_app.o - .debug_macro 0x00022e12 0xac ./SubGHz_Phy/App/subghz_phy_app.o - .debug_macro 0x00022ebe 0x1c ./SubGHz_Phy/App/subghz_phy_app.o - .debug_macro 0x00022eda 0x11f ./SubGHz_Phy/App/subghz_phy_app.o - .debug_macro 0x00022ff9 0x153 ./SubGHz_Phy/App/config/config_defaults.o - .debug_macro 0x0002314c 0x335 ./SubGHz_Phy/App/config/config_store.o - .debug_macro 0x00023481 0x294 ./SubGHz_Phy/Target/radio_board_if.o - .debug_macro 0x00023715 0x16 ./SubGHz_Phy/Target/radio_board_if.o - .debug_macro 0x0002372b 0x1ba ./Utilities/lpm/tiny_lpm/stm32_lpm.o - .debug_macro 0x000238e5 0x18c ./Utilities/misc/stm32_mem.o - .debug_macro 0x00023a71 0x26b ./Utilities/misc/stm32_systime.o - .debug_macro 0x00023cdc 0x143 ./Utilities/misc/stm32_tiny_vsnprintf.o - .debug_macro 0x00023e1f 0x1b9 ./Utilities/sequencer/stm32_seq.o - .debug_macro 0x00023fd8 0x1c ./Utilities/sequencer/stm32_seq.o - .debug_macro 0x00023ff4 0x1b5 ./Utilities/timer/stm32_timer.o - .debug_macro 0x000241a9 0x1c1 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .debug_macro 0x00022986 0x4a9 ./SubGHz_Phy/App/subghz_phy_app.o + .debug_macro 0x00022e2f 0xac ./SubGHz_Phy/App/subghz_phy_app.o + .debug_macro 0x00022edb 0x1c ./SubGHz_Phy/App/subghz_phy_app.o + .debug_macro 0x00022ef7 0x11f ./SubGHz_Phy/App/subghz_phy_app.o + .debug_macro 0x00023016 0x153 ./SubGHz_Phy/App/config/config_defaults.o + .debug_macro 0x00023169 0x335 ./SubGHz_Phy/App/config/config_store.o + .debug_macro 0x0002349e 0x294 ./SubGHz_Phy/Target/radio_board_if.o + .debug_macro 0x00023732 0x16 ./SubGHz_Phy/Target/radio_board_if.o + .debug_macro 0x00023748 0x1ba ./Utilities/lpm/tiny_lpm/stm32_lpm.o + .debug_macro 0x00023902 0x18c ./Utilities/misc/stm32_mem.o + .debug_macro 0x00023a8e 0x26b ./Utilities/misc/stm32_systime.o + .debug_macro 0x00023cf9 0x143 ./Utilities/misc/stm32_tiny_vsnprintf.o + .debug_macro 0x00023e3c 0x1b9 ./Utilities/sequencer/stm32_seq.o + .debug_macro 0x00023ff5 0x1c ./Utilities/sequencer/stm32_seq.o + .debug_macro 0x00024011 0x1b5 ./Utilities/timer/stm32_timer.o + .debug_macro 0x000241c6 0x1c1 ./Utilities/trace/adv_trace/stm32_adv_trace.o -.debug_line 0x00000000 0x258f8 +.debug_line 0x00000000 0x258f0 .debug_line 0x00000000 0x77a ./Core/Src/dma.o .debug_line 0x0000077a 0x7b3 ./Core/Src/gpio.o .debug_line 0x00000f2d 0x81b ./Core/Src/main.o @@ -9738,112 +9738,112 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_line 0x0001b661 0x1939 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o .debug_line 0x0001cf9a 0x138e ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o .debug_line 0x0001e328 0x628 ./SubGHz_Phy/App/app_subghz_phy.o - .debug_line 0x0001e950 0x1725 ./SubGHz_Phy/App/subghz_phy_app.o - .debug_line 0x00020075 0x525 ./SubGHz_Phy/App/config/config_defaults.o - .debug_line 0x0002059a 0x9e7 ./SubGHz_Phy/App/config/config_store.o - .debug_line 0x00020f81 0x8da ./SubGHz_Phy/Target/radio_board_if.o - .debug_line 0x0002185b 0x717 ./Utilities/lpm/tiny_lpm/stm32_lpm.o - .debug_line 0x00021f72 0x5cc ./Utilities/misc/stm32_mem.o - .debug_line 0x0002253e 0x93d ./Utilities/misc/stm32_systime.o - .debug_line 0x00022e7b 0x80c ./Utilities/misc/stm32_tiny_vsnprintf.o - .debug_line 0x00023687 0xb0d ./Utilities/sequencer/stm32_seq.o - .debug_line 0x00024194 0xaab ./Utilities/timer/stm32_timer.o - .debug_line 0x00024c3f 0xcb9 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .debug_line 0x0001e950 0x171d ./SubGHz_Phy/App/subghz_phy_app.o + .debug_line 0x0002006d 0x525 ./SubGHz_Phy/App/config/config_defaults.o + .debug_line 0x00020592 0x9e7 ./SubGHz_Phy/App/config/config_store.o + .debug_line 0x00020f79 0x8da ./SubGHz_Phy/Target/radio_board_if.o + .debug_line 0x00021853 0x717 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + .debug_line 0x00021f6a 0x5cc ./Utilities/misc/stm32_mem.o + .debug_line 0x00022536 0x93d ./Utilities/misc/stm32_systime.o + .debug_line 0x00022e73 0x80c ./Utilities/misc/stm32_tiny_vsnprintf.o + .debug_line 0x0002367f 0xb0d ./Utilities/sequencer/stm32_seq.o + .debug_line 0x0002418c 0xaab ./Utilities/timer/stm32_timer.o + .debug_line 0x00024c37 0xcb9 ./Utilities/trace/adv_trace/stm32_adv_trace.o -.debug_str 0x00000000 0xc7293 - .debug_str 0x00000000 0xc7293 ./Core/Src/dma.o +.debug_str 0x00000000 0xc7281 + .debug_str 0x00000000 0xc7281 ./Core/Src/dma.o 0xb0ef2 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/gpio.o + .debug_str 0x000c7281 0x0 ./Core/Src/gpio.o 0xb0fc0 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/main.o + .debug_str 0x000c7281 0x0 ./Core/Src/main.o 0xb0d97 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/rtc.o + .debug_str 0x000c7281 0x0 ./Core/Src/rtc.o 0xb1421 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/stm32_lpm_if.o + .debug_str 0x000c7281 0x0 ./Core/Src/stm32_lpm_if.o 0xb5a73 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/stm32wlxx_hal_msp.o + .debug_str 0x000c7281 0x0 ./Core/Src/stm32wlxx_hal_msp.o 0xb087c (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/stm32wlxx_it.o + .debug_str 0x000c7281 0x0 ./Core/Src/stm32wlxx_it.o 0xb1277 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/subghz.o + .debug_str 0x000c7281 0x0 ./Core/Src/subghz.o 0xb10be (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/sys_app.o + .debug_str 0x000c7281 0x0 ./Core/Src/sys_app.o 0xb7998 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/sys_debug.o + .debug_str 0x000c7281 0x0 ./Core/Src/sys_debug.o 0xb26af (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/sysmem.o + .debug_str 0x000c7281 0x0 ./Core/Src/sysmem.o 0x771d (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/system_stm32wlxx.o + .debug_str 0x000c7281 0x0 ./Core/Src/system_stm32wlxx.o 0xb08a2 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/timer_if.o + .debug_str 0x000c7281 0x0 ./Core/Src/timer_if.o 0xb7e0c (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/usart.o + .debug_str 0x000c7281 0x0 ./Core/Src/usart.o 0xb17ac (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Src/usart_if.o + .debug_str 0x000c7281 0x0 ./Core/Src/usart_if.o 0xb50c6 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Core/Startup/startup_stm32wl55jcix.o + .debug_str 0x000c7281 0x0 ./Core/Startup/startup_stm32wl55jcix.o 0x66 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/BSP/STM32WLxx_Nucleo/stm32wlxx_nucleo_radio.o + .debug_str 0x000c7281 0x0 ./Drivers/BSP/STM32WLxx_Nucleo/stm32wlxx_nucleo_radio.o 0xb110d (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal.o 0xb168a (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_cortex.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_cortex.o 0xb0fc0 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma.o 0xb0c57 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash.o 0xb09b8 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash_ex.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_flash_ex.o 0xb0da6 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_gpio.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_gpio.o 0xb08fb (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr.o 0xb0cfa (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr_ex.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr_ex.o 0xb105a (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc.o 0xb166e (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc_ex.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rcc_ex.o 0xb11c9 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rtc.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rtc.o 0xb0d59 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rtc_ex.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_rtc_ex.o 0xb1293 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_subghz.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_subghz.o 0xb13a3 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.o 0xb18e0 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.o + .debug_str 0x000c7281 0x0 ./Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.o 0xb0fd9 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o + .debug_str 0x000c7281 0x0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.o 0xb9f4b (size before relaxing) - .debug_str 0x000c7293 0x0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o + .debug_str 0x000c7281 0x0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o 0xb8640 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o + .debug_str 0x000c7281 0x0 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o 0xb8a53 (size before relaxing) - .debug_str 0x000c7293 0x0 ./SubGHz_Phy/App/app_subghz_phy.o + .debug_str 0x000c7281 0x0 ./SubGHz_Phy/App/app_subghz_phy.o 0x871c (size before relaxing) - .debug_str 0x000c7293 0x0 ./SubGHz_Phy/App/subghz_phy_app.o - 0xb8a96 (size before relaxing) - .debug_str 0x000c7293 0x0 ./SubGHz_Phy/App/config/config_defaults.o + .debug_str 0x000c7281 0x0 ./SubGHz_Phy/App/subghz_phy_app.o + 0xb8dfd (size before relaxing) + .debug_str 0x000c7281 0x0 ./SubGHz_Phy/App/config/config_defaults.o 0x76e3 (size before relaxing) - .debug_str 0x000c7293 0x0 ./SubGHz_Phy/App/config/config_store.o + .debug_str 0x000c7281 0x0 ./SubGHz_Phy/App/config/config_store.o 0xb3d76 (size before relaxing) - .debug_str 0x000c7293 0x0 ./SubGHz_Phy/Target/radio_board_if.o + .debug_str 0x000c7281 0x0 ./SubGHz_Phy/Target/radio_board_if.o 0xb225e (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/lpm/tiny_lpm/stm32_lpm.o + .debug_str 0x000c7281 0x0 ./Utilities/lpm/tiny_lpm/stm32_lpm.o 0x8571 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/misc/stm32_mem.o + .debug_str 0x000c7281 0x0 ./Utilities/misc/stm32_mem.o 0x8273 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/misc/stm32_systime.o + .debug_str 0x000c7281 0x0 ./Utilities/misc/stm32_systime.o 0x8c66 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/misc/stm32_tiny_vsnprintf.o + .debug_str 0x000c7281 0x0 ./Utilities/misc/stm32_tiny_vsnprintf.o 0x6aa3 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/sequencer/stm32_seq.o + .debug_str 0x000c7281 0x0 ./Utilities/sequencer/stm32_seq.o 0x8807 (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/timer/stm32_timer.o + .debug_str 0x000c7281 0x0 ./Utilities/timer/stm32_timer.o 0x87bb (size before relaxing) - .debug_str 0x000c7293 0x0 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .debug_str 0x000c7281 0x0 ./Utilities/trace/adv_trace/stm32_adv_trace.o 0x8e73 (size before relaxing) .comment 0x00000000 0x43 @@ -9940,7 +9940,7 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .comment 0x00000043 0x0 ./Utilities/trace/adv_trace/stm32_adv_trace.o 0x44 (size before relaxing) -.debug_frame 0x00000000 0x9470 +.debug_frame 0x00000000 0x94c0 .debug_frame 0x00000000 0x54 ./Core/Src/dma.o .debug_frame 0x00000054 0x5c ./Core/Src/gpio.o .debug_frame 0x000000b0 0x90 ./Core/Src/main.o @@ -9976,40 +9976,40 @@ LOAD /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.g .debug_frame 0x00006b78 0x9b8 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.o .debug_frame 0x00007530 0x454 ./Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.o .debug_frame 0x00007984 0x48 ./SubGHz_Phy/App/app_subghz_phy.o - .debug_frame 0x000079cc 0x4fc ./SubGHz_Phy/App/subghz_phy_app.o - .debug_frame 0x00007ec8 0x38 ./SubGHz_Phy/App/config/config_defaults.o - .debug_frame 0x00007f00 0x80 ./SubGHz_Phy/App/config/config_store.o - .debug_frame 0x00007f80 0xe4 ./SubGHz_Phy/Target/radio_board_if.o - .debug_frame 0x00008064 0xec ./Utilities/lpm/tiny_lpm/stm32_lpm.o - .debug_frame 0x00008150 0x88 ./Utilities/misc/stm32_mem.o - .debug_frame 0x000081d8 0x20c ./Utilities/misc/stm32_systime.o - .debug_frame 0x000083e4 0x88 ./Utilities/misc/stm32_tiny_vsnprintf.o - .debug_frame 0x0000846c 0x2ac ./Utilities/sequencer/stm32_seq.o - .debug_frame 0x00008718 0x2c0 ./Utilities/timer/stm32_timer.o - .debug_frame 0x000089d8 0x3c4 ./Utilities/trace/adv_trace/stm32_adv_trace.o - .debug_frame 0x00008d9c 0x64 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtol.o) - .debug_frame 0x00008e00 0x64 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtoul.o) - .debug_frame 0x00008e64 0x144 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-findfp.o) - .debug_frame 0x00008fa8 0x4c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-vsnprintf.o) - .debug_frame 0x00008ff4 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memset.o) - .debug_frame 0x00009014 0x28 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strncmp.o) - .debug_frame 0x0000903c 0x38 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reent.o) - .debug_frame 0x00009074 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-errno.o) - .debug_frame 0x00009094 0x2c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-init.o) - .debug_frame 0x000090c0 0xb0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) - .debug_frame 0x00009170 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strcmp.o) - .debug_frame 0x00009190 0x28 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) - .debug_frame 0x000091b8 0x38 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-freer.o) - .debug_frame 0x000091f0 0x50 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) - .debug_frame 0x00009240 0x30 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mlock.o) - .debug_frame 0x00009270 0x90 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) - .debug_frame 0x00009300 0x60 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) - .debug_frame 0x00009360 0x28 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memmove.o) - .debug_frame 0x00009388 0x2c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-sbrkr.o) - .debug_frame 0x000093b4 0x3c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reallocr.o) - .debug_frame 0x000093f0 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-msizer.o) - .debug_frame 0x00009410 0x2c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a(_aeabi_uldivmod.o) - .debug_frame 0x0000943c 0x34 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a(_udivmoddi4.o) + .debug_frame 0x000079cc 0x54c ./SubGHz_Phy/App/subghz_phy_app.o + .debug_frame 0x00007f18 0x38 ./SubGHz_Phy/App/config/config_defaults.o + .debug_frame 0x00007f50 0x80 ./SubGHz_Phy/App/config/config_store.o + .debug_frame 0x00007fd0 0xe4 ./SubGHz_Phy/Target/radio_board_if.o + .debug_frame 0x000080b4 0xec ./Utilities/lpm/tiny_lpm/stm32_lpm.o + .debug_frame 0x000081a0 0x88 ./Utilities/misc/stm32_mem.o + .debug_frame 0x00008228 0x20c ./Utilities/misc/stm32_systime.o + .debug_frame 0x00008434 0x88 ./Utilities/misc/stm32_tiny_vsnprintf.o + .debug_frame 0x000084bc 0x2ac ./Utilities/sequencer/stm32_seq.o + .debug_frame 0x00008768 0x2c0 ./Utilities/timer/stm32_timer.o + .debug_frame 0x00008a28 0x3c4 ./Utilities/trace/adv_trace/stm32_adv_trace.o + .debug_frame 0x00008dec 0x64 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtol.o) + .debug_frame 0x00008e50 0x64 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strtoul.o) + .debug_frame 0x00008eb4 0x144 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-findfp.o) + .debug_frame 0x00008ff8 0x4c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-vsnprintf.o) + .debug_frame 0x00009044 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_frame 0x00009064 0x28 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strncmp.o) + .debug_frame 0x0000908c 0x38 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reent.o) + .debug_frame 0x000090c4 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-errno.o) + .debug_frame 0x000090e4 0x2c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-init.o) + .debug_frame 0x00009110 0xb0 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-lock.o) + .debug_frame 0x000091c0 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-strcmp.o) + .debug_frame 0x000091e0 0x28 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memcpy-stub.o) + .debug_frame 0x00009208 0x38 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-freer.o) + .debug_frame 0x00009240 0x50 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x00009290 0x30 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-mlock.o) + .debug_frame 0x000092c0 0x90 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-svfprintf.o) + .debug_frame 0x00009350 0x60 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-nano-vfprintf_i.o) + .debug_frame 0x000093b0 0x28 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-memmove.o) + .debug_frame 0x000093d8 0x2c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x00009404 0x3c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-reallocr.o) + .debug_frame 0x00009440 0x20 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/nofp/libc_nano.a(libc_a-msizer.o) + .debug_frame 0x00009460 0x2c /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x0000948c 0x34 /opt/st/stm32cubeide_2.0.0/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.linux64_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7e-m/nofp/libgcc.a(_udivmoddi4.o) .debug_line_str 0x00000000 0x4a diff --git a/SubGHz_Phy/App/subghz_phy_app.c b/SubGHz_Phy/App/subghz_phy_app.c index 439cca8..104a0df 100644 --- a/SubGHz_Phy/App/subghz_phy_app.c +++ b/SubGHz_Phy/App/subghz_phy_app.c @@ -4,6 +4,7 @@ #include "usart_if.h" #include "usart.h" #include "main.h" +#include "timer.h" #include "config/config_consts.h" #include "config/config_types.h" @@ -49,9 +50,9 @@ static volatile uint8_t g_radio_rx_error = 0; static volatile int16_t g_last_rx_rssi = 0; static volatile int8_t g_last_rx_cfo = 0; -static volatile uint8_t g_led_tx_ticks = 0U; -static volatile uint8_t g_led_rx_ticks = 0U; -static volatile uint8_t g_led_err_ticks = 0U; +static TimerEvent_t g_led_tx_timer; +static TimerEvent_t g_led_rx_timer; +static TimerEvent_t g_led_err_timer; static volatile uint8_t g_radio_busy = 0; static volatile uint8_t g_radio_needs_rx_restart = 0; @@ -90,6 +91,10 @@ static void App_LedTxPulse(void); static void App_LedRxPulse(void); static void App_LedErrPulse(void); +static void App_LedTxOff(void *context); +static void App_LedRxOff(void *context); +static void App_LedErrOff(void *context); + static void UartRxByteCallback(uint8_t *rxChar, uint16_t size, uint8_t error); static void App_ProcessRadioEvents(void); static void App_ProcessUartPacketizer(void); @@ -132,6 +137,10 @@ void SubghzApp_Init(void) Radio.Init(&RadioEvents); + TimerInit(&g_led_tx_timer, App_LedTxOff); + TimerInit(&g_led_rx_timer, App_LedRxOff); + TimerInit(&g_led_err_timer, App_LedErrOff); + App_RadioApplyConfig(); App_ReconfigureUart(g_cfg.uart_baudrate); App_RadioEnterRx(); @@ -140,10 +149,6 @@ void SubghzApp_Init(void) HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); - g_led_tx_ticks = 0U; - g_led_rx_ticks = 0U; - g_led_err_ticks = 0U; - g_uart_last_data_tick = HAL_GetTick(); (void)vcom_ReceiveInit(UartRxByteCallback); @@ -862,67 +867,53 @@ static char *App_SkipSpaces(char *s) } return s; } -void SubghzApp_Timer1msIrq(void) -{ - if (g_led_tx_ticks > 0U) - { - g_led_tx_ticks--; - if (g_led_tx_ticks == 0U) - { - HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); - } - } - - if (g_led_rx_ticks > 0U) - { - g_led_rx_ticks--; - if (g_led_rx_ticks == 0U) - { - HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); - } - } - - if (g_led_err_ticks > 0U) - { - g_led_err_ticks--; - if (g_led_err_ticks == 0U) - { - HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); - } - } -} - -void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) -{ - if (htim->Instance == TIM2) // замени на свой таймер - { - SubghzApp_Timer1msIrq(); - } -} - static void App_LedTxPulse(void) { + TimerStop(&g_led_tx_timer); HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); - g_led_tx_ticks = LED_PULSE_MS; + TimerSetValue(&g_led_tx_timer, LED_PULSE_MS); + TimerStart(&g_led_tx_timer); } static void App_LedRxPulse(void) { + TimerStop(&g_led_rx_timer); HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); - g_led_rx_ticks = LED_PULSE_MS; + TimerSetValue(&g_led_rx_timer, LED_PULSE_MS); + TimerStart(&g_led_rx_timer); } static void App_LedErrPulse(void) { + TimerStop(&g_led_err_timer); HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); - g_led_err_ticks = LED_PULSE_MS; + TimerSetValue(&g_led_err_timer, LED_PULSE_MS); + TimerStart(&g_led_err_timer); } - static void OnTxDone(void) { g_radio_tx_done = 1U; } +static void App_LedTxOff(void *context) +{ + (void)context; + HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); +} + +static void App_LedRxOff(void *context) +{ + (void)context; + HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); +} + +static void App_LedErrOff(void *context) +{ + (void)context; + HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); +} + + static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t cfo) { g_last_rx_rssi = rssi;