• lk中内联调用的dsb()


    lk中内联调用的dsb()

     

    比如lk的uart_dm_init()函数就调用了dsb()

    /* Configure the uart clock */
           clock_config_uart_dm(id);
           dsb();
     
           /*Configure GPIO to provide connectivity between UART block
              product ports and chip pads */
           gpio_config_uart_dm(id);
           dsb();

    dsb的在lkarcharmincludearchDefines.h中定义,如下:

    #if ARM_ISA_ARMV7
    #define dsb() __asm__ volatile("dsb" : : : "memory");
    #define dmb() __asm__ volatile("dmb" : : : "memory");
    #define isb() __asm__ volatile("isb" : : : "memory");
    #elif ARM_ISA_ARMV6
    #define dsb() __asm__ volatile ("mcrp15, 0, %0, c7, c10, 4" : : "r" (0): "memory");
    #define dmb() __asm__ volatile ("mcrp15, 0, %0, c7, c10, 5" : : "r" (0): "memory");
    #define isb() __asm__ volatile ("mcrp15, 0, %0, c7, c5,  4" : :"r" (0): "memory");
    #endif

    这里是内联汇编里的dsb指令,这是gcc的inline asssemble,主要功能是数据同步屏障,Datasynchronization barrier。

     

    memory is an instruction to GCC that (sortof) says that the inline asm sequence has side effects on global memory, andhence not just effects on local variables need to be taken into account.

    这都是 gcc的 inlineassemble

     

     

    相关链接:

    ARM嵌入式开发中的GCC内联汇编(ARM GCC Inline Assembler Cookbook)

    http://blog.csdn.net/linglongqiongge/article/details/51678588

     

  • 相关阅读:
    hdu 3832 Earth Hour
    hdu 2112 HDU Today
    hdu 2473 Junk-Mail Filter
    hdu 1558 Segment set
    5-2学习记录|5-3日
    看面经
    2020-5-1学习记录
    2020-4-30学习记录
    2020-4-27学习记录
    4.19日学习笔记
  • 原文地址:https://www.cnblogs.com/liang123/p/6325206.html
Copyright © 2020-2023  润新知