小编mag*_*lum的帖子

C 变量可以限制在一定的读/写速度吗?

我正在使用一个嵌入式系统(基于 RISC-V),其中处理器连接到数据总线,数据总线又连接到 UART 模块。当数据总线被读/写时,需要两个处理器周期才能准备好新的读/写操作,否则会产生错误。

数据总线的内存映射如下:

struct WishboneBus {
    volatile uint32_t read_addr;
    volatile uint32_t write_addr;
    volatile uint32_t write_data;
    volatile uint32_t read_data;
};

#define WISHBONE_BUS ((struct WishboneBus *) (0x4000000))
Run Code Online (Sandbox Code Playgroud)

我想写这样的代码:

void wb_write(uint32_t addr, uint32_t data) {
    WISHBONE_BUS->write_data = data;
    WISHBONE_BUS->write_addr = addr;
}
Run Code Online (Sandbox Code Playgroud)

当使用 -O0 编译程序时,它会生成以下六个指令:

    WISHBONE_BUS->write_data = data;
    153c:   400007b7            lui a5,0x40000
    1540:   fd842703            lw  a4,-40(s0)
    1544:   00e7a423            sw  a4,8(a5) # 40000008 <BUS_START+0x8>
    WISHBONE_BUS->write_addr = addr;
    1548:   400007b7            lui a5,0x40000
    154c:   fdc42703            lw  a4,-36(s0)
    1550:   00e7a223            sw  a4,4(a5) # 40000004 <BUS_START+0x4> …
Run Code Online (Sandbox Code Playgroud)

c embedded assembly gcc

2
推荐指数
1
解决办法
109
查看次数

标签 统计

assembly ×1

c ×1

embedded ×1

gcc ×1