<html>
  <head>
    <meta content="text/html; charset=iso-8859-2"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Sypu si popel na hlavu, v prokladanem
      vypisu jsou prehazeny adresy a to jsem si nevsimnul, pokud je
      vypis jen ASM vypada to OK<br>
      <br>
      08000454    push    {r7}<br>
      08000456    add    r7, sp, #0<br>
      08000458    mov.w    r0, #95    ; 0x5f<br>
      0800045C    msr    BASEPRI, r0<br>
      08000460    ldr    r3, [pc, #60]    ; (0x80004a0
      <SysTick_Handler+76>)<br>
      08000462    ldr    r3, [r3, #0]<br>
      08000464    adds    r2, r3, #1<br>
      08000466    ldr    r3, [pc, #56]    ; (0x80004a0
      <SysTick_Handler+76>)<br>
      08000468    str    r2, [r3, #0]<br>
      0800046A    ldr    r3, [pc, #56]    ; (0x80004a4
      <SysTick_Handler+80>)<br>
      0800046C    ldrd    r2, r3, [r3]<br>
      08000470    adds    r2, #1<br>
      08000472    adc.w    r3, r3, #0<br>
      08000476    ldr    r1, [pc, #44]    ; (0x80004a4
      <SysTick_Handler+80>)<br>
      08000478    strd    r2, r3, [r1]<br>
      0800047C    ldr    r3, [pc, #32]    ; (0x80004a0
      <SysTick_Handler+76>)<br>
      0800047E    ldr    r3, [r3, #0]<br>
      08000480    subs    r2, r3, #1<br>
      08000482    ldr    r3, [pc, #28]    ; (0x80004a0
      <SysTick_Handler+76>)<br>
      08000484    str    r2, [r3, #0]<br>
      08000486    ldr    r3, [pc, #24]    ; (0x80004a0
      <SysTick_Handler+76>)<br>
      08000488    ldr    r3, [r3, #0]<br>
      0800048A    cmp    r3, #0<br>
      0800048C    bne.n    0x8000496 <SysTick_Handler+66><br>
      0800048E    mov.w    r0, #0<br>
      08000492    msr    BASEPRI, r0<br>
      08000496    mov    sp, r7<br>
      08000498    ldr.w    r7, [sp], #4<br>
      0800049C    bx    lr<br>
      <br>
      <br>
      Volatile u funkce jde ale nesmi pak byt void, ale chova se to
      stejne.<br>
      <br>
      Dne 13.08.2016 v 9:05 Zdenìk Aster napsal(a):<br>
    </div>
    <blockquote cite="mid:1rd.rIl.5pSBbaOomms.1NhiR1@seznam.cz"
      type="cite">pujde dat ?<br>
      <p><span style="color: rgb(0, 51, 153); line-height: 16.8px;">inline
          void volatile EnterCritical() __attribute__( ( always_inline )
          );</span><br>
      </p>
      <p><span style="color: rgb(0, 51, 153); line-height: 16.8px;"><br>
        </span></p>
      <p><span style="color: rgb(0, 51, 153); line-height: 16.8px;">Zdenek
          Aster</span></p>
      <p>---------- Pùvodní zpráva ----------<br>
        Od: Jaroslav Buchta <a class="moz-txt-link-rfc2396E" href="mailto:jaroslav.buchta@hascomp.cz"><jaroslav.buchta@hascomp.cz></a><br>
        Komu: HW-news <a class="moz-txt-link-rfc2396E" href="mailto:hw-list@list.hw.cz"><hw-list@list.hw.cz></a><br>
        Datum: 13. 8. 2016 7:47:28<br>
        Pøedmìt: GCC inline a optimalizace</p>
      <br>
      <blockquote>Zdravim,<br>
        <br>
        nevim jak donutit compiler, aby mi neprehazel posloupnost
        operaci v <br>
        nasledujici funkci<br>
        <br>
        inline void EnterCritical() __attribute__( ( always_inline ) );<br>
        inline void ExitCritical() __attribute__( ( always_inline ) );<br>
        <br>
        <br>
        inline void EnterCritical()<br>
        {<br>
        __asm volatile<br>
        (<br>
        " mov r0, %0 \n"<br>
        " msr basepri, r0 \n"<br>
        ::"i"(CRITICAL_INT_PRIORITY):"r0"<br>
        );<br>
        criticalNesting++;<br>
        }<br>
        <br>
        inline void ExitCritical()<br>
        {<br>
        criticalNesting--;<br>
        if( criticalNesting == 0 )<br>
        {<br>
        __asm volatile<br>
        (<br>
        " mov r0, #0 \n"<br>
        " msr basepri, r0 \n"<br>
        :::"r0"<br>
        );<br>
        }<br>
        <br>
        }<br>
        <br>
        <br>
        volatile uint64_t sysTicksCounter;<br>
        <br>
        void SysTick_Handler(void)<br>
        {<br>
        EnterCritical();<br>
        sysTicksCounter++;<br>
        ExitCritical();<br>
        }<br>
        <br>
        Ma nekdo tip jak na to? Takhle z toho vypadne toto v asm:<br>
        <br>
        <br>
        08000458 mov.w r0, #95 ; 0x5f<br>
        0800045C msr BASEPRI, r0<br>
        (56) (<br>
        (57) " mov r0, %0 \n"<br>
        (58) " msr basepri, r0 \n"<br>
        (59) ::"i"(CRITICAL_INT_PRIORITY):"r0"<br>
        (60) );<br>
        (61) criticalNesting++;<br>
        08000460 ldr r3, [pc, #60] ; (0x80004a0
        <SysTick_Handler+76>)<br>
        08000462 ldr r3, [r3, #0]<br>
        08000464 adds r2, r3, #1<br>
        08000466 ldr r3, [pc, #56] ; (0x80004a0
        <SysTick_Handler+76>)<br>
        08000468 str r2, [r3, #0]<br>
        (62) }<br>
        (63)<br>
        (64) inline void ExitCritical()<br>
        (65) {<br>
        (66) criticalNesting--;<br>
        0800047C ldr r3, [pc, #32] ; (0x80004a0
        <SysTick_Handler+76>)<br>
        0800047E ldr r3, [r3, #0]<br>
        08000480 subs r2, r3, #1<br>
        08000482 ldr r3, [pc, #28] ; (0x80004a0
        <SysTick_Handler+76>)<br>
        08000484 str r2, [r3, #0]<br>
        (67) if( criticalNesting == 0 )<br>
        08000486 ldr r3, [pc, #24] ; (0x80004a0
        <SysTick_Handler+76>)<br>
        08000488 ldr r3, [r3, #0]<br>
        0800048A cmp r3, #0<br>
        0800048C bne.n 0x8000496 <SysTick_Handler+66><br>
        (68) {<br>
        (69) __asm volatile<br>
        0800048E mov.w r0, #0<br>
        08000492 msr BASEPRI, r0<br>
        (70) (<br>
        (71) " mov r0, #0 \n"<br>
        (72) " msr basepri, r0 \n"<br>
        (73) :::"r0"<br>
        (74) );<br>
        (75) }<br>
        (76)<br>
        (77) }<br>
        (78)<br>
        (79) volatile uint64_t sysTicksCounter;<br>
        (80)<br>
        (81) void SysTick_Handler(void)<br>
        (82) {<br>
        08000454 push {r7}<br>
        08000456 add r7, sp, #0<br>
        (83) EnterCritical();<br>
        (84) sysTicksCounter++;<br>
        0800046A ldr r3, [pc, #56] ; (0x80004a4
        <SysTick_Handler+80>)<br>
        0800046C ldrd r2, r3, [r3]<br>
        08000470 adds r2, #1<br>
        08000472 adc.w r3, r3, #0<br>
        08000476 ldr r1, [pc, #44] ; (0x80004a4
        <SysTick_Handler+80>)<br>
        08000478 strd r2, r3, [r1]<br>
        (85) ExitCritical();<br>
        (86) }<br>
        08000496 mov sp, r7<br>
        08000498 ldr.w r7, [sp], #4<br>
        0800049C bx lr<br>
        0800049E nop<br>
        080004A0 lsls r4, r1, #17<br>
        080004A2 movs r0, #0<br>
        080004A4 lsls r0, r2, #17<br>
        080004A6 movs r0, #0<br>
        <br>
        <br>
        -> cili to provede omezeni preruseni, zrusi omezeni a teprve
        potom <br>
        provede increment ktery ma byt samozrejme mezi tim...<br>
        <br>
        _______________________________________________<br>
        HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a><br>
        <a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
        <a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></blockquote>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>